当前位置: 首页 > 知识库问答 >
问题:

从UDP多播RTSP视频流读取

逑彬炳
2023-03-14

我目前正在开发一个需要解码UDP多播RTSP流的应用程序。目前,我可以通过ffplay查看RTP流

ffplay -rtsp_transport udp_multicast rtsp://streamURLGoesHere

但是,我尝试使用FFMPEG通过(为了简洁起见,删除了错误检查和清理代码)打开UDP流。

AVFormatContext* ctxt = NULL;
av_open_input_file(
    &ctxt,
    urlString,
    NULL,
    0,
    NULL
);

av_find_stream_info(ctxt);

AVCodecContext* codecCtxt;

int videoStreamIdx = -1;
for (int i = 0; i < ctxt->nb_streams; i++)
{
    if (ctxt->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
    {
        videoStreamIdx = i;
        break;
    }
}

AVCodecContext* codecCtxt = ctxt->streams[videoStreamIdx]->codec;
AVCodec* codec = avcodec_fine_decoder(codecCtxt->codec_id);
avcodec_open(codecCtxt, codec);

AVPacket packet;
while(av_read_frame(ctxt, &packet) >= 0)
{
    if (packet.stream_index == videoStreamIdx)
    {
        /// Decoding performed here
        ...
    }
}

...

这种方法适用于包含原始编码视频流的文件输入,但对于UDP多播RTSP流,它无法通过对av_open_input_file()执行的任何错误检查。请告知...

共有1个答案

宗波涛
2023-03-14

事实证明,打开多播UDP RTSP流可以通过以下方式执行:

AVFormatContext* ctxt = avformat_alloc_context();

AVDictionary* options = NULL;
av_dict_set(&options, "rtsp_transport", "udp_multicast", 0);
avformat_open_input(
    &ctxt,
    urlString,
    NULL,
    &options
);

...

avformat_free_context(ctxt);

以这种方式使用avformat\u open\u input()而不是av\u open\u input\u file()会产生所需的行为。我猜想,av\u open\u input\u file()要么已经被弃用,要么从未打算以这种方式使用,很可能是后者;)

 类似资料:
  • 如上所述,我使用FFmpeg(命令行)通过UDP传输网络摄像头。在客户端,我使用Java OpenCV,即捕获行<代码>视频捕获。打开(“udp://xx.xx.xx.xx:xx) 。如果我将流作为mpegts(ffmpeg-f mpegts)发送,我可以显示流,但是;如果我把它作为rawvideo(ffmpeg-f rawvideo)发送,我不能。 是否有要设置的参数(如CvType)?

  • RTSP视频可以在Android MediaPlayer中播放吗?如果是,怎么做?我得到的服务器死亡错误(100,0)这是我的编码部分包com的错误。实例样本媒体; 这是我的Logcat结果,我得到的结果是07-09 12:17:05.484:E/MediaPlayer(3990):error(1,-2147483648)07-09 12:17:05.484:W/System。err(3990):

  • 我正在开发一个应用程序,我使用了谷歌的ExoPlayer,它工作起来很有魅力,现在我想在我的应用程序中添加RTSP支持,但使用ExoPlayer我无法播放,请任何人都可以帮我,如果有人有其他选择,请与我分享。 日志 E/ExoPlayerImplInternal:源错误。网蝴蝶电视。rtmp_客户端。RtmpClient$RtmpIOException at net。蝴蝶电视。rtmp_客户端。R

  • 我正在尝试用PHP接收UDP多播流。receive命令从不获取任何内容,而是一直等待。 我可以使用VLC播放器观看流,以便在我的机器上访问流。非常感谢有关如何使用PHP执行此操作的任何帮助。 这是我的密码。 //创建新套接字 //我不确定这个命令。我想我必须设置此选项才能开始接收数据包。 //接收数据

  • 我在使用udp\U多播传输方法时遇到问题,该方法使用ffmpeg或ffplay作为网络摄像头的客户端。 TCP传输工作原理: UDP运输工程: 多播传输不工作: 选择udp_multicast时的错误消息如下: 使用-v调试运行:观察UDP多播信息是否出现在SDP中,即使为此运行选择的传输是单播的。单播或多播的SDP内容不变。 这是使用udp_multicast时相同的调试部分。SDP与前面提到的