FFMPEG重写RTMP流iOS的标头

时间:2014-03-28 10:54:51

标签: ios ffmpeg rtmp libavformat

我正在使用FFMPEG通过iOS中的RTMP协议流式传输视频。我正在尝试建立一个网络自适应系统,如果网络性能下降,它将丢弃帧并降低(视频帧的)比特率。当我连接到RTMP服务器时,我首先编写标题。但是当我改变视频配置时,强迫我重新编写标题(使用av_write_header)。重写头文件的最佳方法是什么?

这就是我第一次写标题的方法(这是有效的)。基于此,如何在需要时重新编写标题?

AVStream*
video = avformat_new_stream(file, videoCodec->codec),
audio = avformat_new_stream(file, audioCodec->codec);

memcpy(video->codec, videoCodec, sizeof(AVCodecContext));
memcpy(audio->codec, audioCodec, sizeof(AVCodecContext));

video->codec->extradata = av_malloc(video->codec->extradata_size);
audio->codec->extradata = av_malloc(audio->codec->extradata_size);

memcpy(video->codec->extradata, videoCodec->extradata, video->codec->extradata_size);
memcpy(audio->codec->extradata, audioCodec->extradata, audio->codec->extradata_size);

video->codec->codec_tag = FLV_TAG_TYPE_VIDEO;
audio->codec->codec_tag = FLV_TAG_TYPE_AUDIO;
video->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
audio->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
audio->codec->sample_rate = audioRate;

video->codec->time_base.num = 1;
audio->codec->time_base.den = video->codec->time_base.den = FLV_TIMEBASE;

avformat_write_header(file, NULL);

谢谢。

0 个答案:

没有答案