2017-04-05 142 views
1

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

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

每当我尝试使用这些格式之一,我看到下面的警告我在通话过程中avformat_write_header:

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

我的理解是,标题想知道最终文件大小,我不知道(RTSP服务器是直播流一个摄像头,并且用户只要他们想要就停止录制)。我想这是有道理的,但我知道其他人已经使用ffmpeg命令行成功完成了这个任务,所以我很困惑我还需要在这里做什么。

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

我希望对此有所了解。谢谢。

弗兰克

回答

0

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