- data_size= url_ftell(pb) - metadata_size_pos - 10;
- url_fseek(pb, metadata_size_pos, SEEK_SET);
- put_be24(pb, data_size);
- url_fseek(pb, data_size + 10 - 3, SEEK_CUR);
- put_be32(pb, data_size + 11);
+ 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);
+ avio_wb32(pb, data_size + 11);
+
+ for (i = 0; i < s->nb_streams; i++) {
+ AVCodecContext *enc = s->streams[i]->codec;
+ if (enc->codec_id == CODEC_ID_AAC || enc->codec_id == CODEC_ID_H264) {
+ int64_t pos;
+ avio_w8(pb, enc->codec_type == AVMEDIA_TYPE_VIDEO ?
+ FLV_TAG_TYPE_VIDEO : FLV_TAG_TYPE_AUDIO);
+ avio_wb24(pb, 0); // size patched later
+ avio_wb24(pb, 0); // ts
+ avio_w8(pb, 0); // ts ext
+ avio_wb24(pb, 0); // streamid
+ pos = avio_tell(pb);
+ if (enc->codec_id == CODEC_ID_AAC) {
+ avio_w8(pb, get_audio_flags(enc));
+ avio_w8(pb, 0); // AAC sequence header
+ avio_write(pb, enc->extradata, enc->extradata_size);
+ } else {
+ avio_w8(pb, enc->codec_tag | FLV_FRAME_KEY); // flags
+ avio_w8(pb, 0); // AVC sequence header
+ avio_wb24(pb, 0); // composition time
+ ff_isom_write_avcc(pb, enc->extradata, enc->extradata_size);
+ }
+ data_size = avio_tell(pb) - pos;
+ avio_seek(pb, -data_size - 10, SEEK_CUR);
+ avio_wb24(pb, data_size);
+ avio_skip(pb, data_size + 10 - 3);
+ avio_wb32(pb, data_size + 11); // previous tag size
+ }
+ }