2

我正在使用 ffmpeg 库从本地网络中的 IP 摄像机流式传输 RTSP。流与代码一起工作正常。

唯一的问题是流似乎在一段时间后停止了。在进一步调试时,我发现我收到了“文件结束”,这就是循环中断的原因。

while(!playerShouldStop)// && (av_read_frame(pFormatCtx, &pkt1)>=0))
    {
            int ret = av_read_frame(pFormatCtx, &pkt1);
            NSLog(@"av read frame returned = %s",av_err2str(ret));
            if(ret >= 0)
            {
                // process video
            }
            else 
               break;
    }

日志说

av 读取帧返回 = 文件结束

我下载了 Wireshark 来检查我收到了哪些 RTSP 数据包,但那里没有帮助。

在此处输入图像描述

首先,在直播流中接收 EOF 是正常的(不应该结束)。

其次av_read_frame(),一次又一次地调用也无济于事,但是当我重新启动整个方法(从 开始avformat_open_input)时,它就可以工作了。只是流媒体并不流畅,并且时不时会暂停。

4

1 回答 1

0

好的...当我使用 AVDictionary 选项打开流时,它似乎在没有 EOF 的情况下工作。

AVDictionary *opts = 0;
int ret = av_dict_set(&opts, "rtsp_transport", "tcp", 0);

// Open video file and read header information into pFormatCtx
        if (avformat_open_input(&pFormatCtx, filename, NULL, &opts) != 0)
        {
            NSLog(@"Error opening video file.");
            return;
        }

        av_dict_free(&opts);

尽管如此,对此的任何适当解释都会有所帮助。

于 2013-11-07T05:48:29.207 回答