@ -177,9 +177,9 @@ static int flv_write_header(AVFormatContext *s)
AVIOContext * pb = s - > pb ;
FLVContext * flv = s - > priv_data ;
AVCodecContext * audio_enc = NULL , * video_enc = NULL ;
int i ;
int i , metadata_count = 0 ;
double framerate = 0.0 ;
int64_t metadata_size_pos , data_size ;
int64_t metadata_size_pos , data_size , metadata_count_pos ;
AVDictionaryEntry * tag = NULL ;
for ( i = 0 ; i < s - > nb_streams ; i + + ) {
@ -237,7 +237,9 @@ static int flv_write_header(AVFormatContext *s)
/* mixed array (hash) with size and string/type/data tuples */
avio_w8 ( pb , AMF_DATA_TYPE_MIXEDARRAY ) ;
avio_wb32 ( pb , 5 * ! ! video_enc + 5 * ! ! audio_enc + 2 ) ; // +2 for duration and file size
metadata_count_pos = avio_tell ( pb ) ;
metadata_count = 5 * ! ! video_enc + 5 * ! ! audio_enc + 2 ; // +2 for duration and file size
avio_wb32 ( pb , metadata_count ) ;
put_amf_string ( pb , " duration " ) ;
flv - > duration_offset = avio_tell ( pb ) ;
@ -281,6 +283,7 @@ static int flv_write_header(AVFormatContext *s)
put_amf_string ( pb , tag - > key ) ;
avio_w8 ( pb , AMF_DATA_TYPE_STRING ) ;
put_amf_string ( pb , tag - > value ) ;
metadata_count + + ;
}
put_amf_string ( pb , " filesize " ) ;
@ -292,6 +295,10 @@ static int flv_write_header(AVFormatContext *s)
/* write total size of tag */
data_size = avio_tell ( pb ) - metadata_size_pos - 10 ;
avio_seek ( pb , metadata_count_pos , SEEK_SET ) ;
avio_wb32 ( pb , metadata_count ) ;
avio_seek ( pb , metadata_size_pos , SEEK_SET ) ;
avio_wb24 ( pb , data_size ) ;
avio_skip ( pb , data_size + 10 - 3 ) ;