libffmpeg:将RTSP流写入输出文件

时间:2017-04-05 15:22:40

标签: ios ffmpeg

我在iOS应用中使用libffmpeg。我的目标是连接到RTSP源并将媒体写入文件,以后可以与iOS媒体播放器一起使用。理想情况下,我想在不转码传入数据的情况下执行此操作。我还希望以后能够使用AVAssetExportSession对媒体进行重新编码,如果用户选择这样做的话。

因为我想创建一个与iOS兼容的文件,所以我有限制(我相信)mpeg,mp4或quicktime(mov)格式。

每当我尝试使用其中一种格式时,在调用avformat_write_header时会看到以下警告:

[mov @ 0x16401c00]流0的编解码器不使用全局标头,但容器格式需要全局标头 [mov @ 0x16401c00]流1的编解码器不使用全局标头,但容器格式需要全局标头

我的理解是标题想要知道最终文件大小,我不知道(RTSP服务器是实时流式传输相机,用户可以随时停止录制)。我想这是有道理的,但我知道其他人已经使用ffmpeg命令行成功完成了这项工作,所以我很困惑我还需要做些什么。

如果我忽略警告,我仍然可以继续编写文件。如果我选择mpeg或mp4格式,当我调用av_write_trailer时我的应用程序崩溃了。如果我使用mov,我可以成功关闭文件,并且文件会播放,但是当我尝试将其传递给AVAssetExportSession时通常会失败。

我很感激对此的任何见解。感谢。

1 个答案:

答案 0 :(得分:0)

我发现似乎是一种解决方案 - 至少,它消除了警告。在调用avcodec_open2之前,我必须在音频和视频编解码器上设置CODEC_FLAG_GLOBAL_HEADER。