天天看点

记一次 ffmpeg 接收rtsp异常

     1. 问题描述

     客户端使用ffmpeg 获取一个rtsp地址时,出现 连接过程完成, 但是收不到流的情况。使用vlc 正常。

     抓包对比, 发现如下情况:

记一次 ffmpeg 接收rtsp异常

      服务器 DESCRIBE 信息: 服务器指定 流使用端口9400。

记一次 ffmpeg 接收rtsp异常

       客户端 SETUP 信息: 使用的非9400 的 随机端口

记一次 ffmpeg 接收rtsp异常

        服务器回复如上。

        PLAY交互也显示正常。

        但是 , 服务器发送流使用端口却是65535

记一次 ffmpeg 接收rtsp异常

2.  问题修改

     修改ffmpeg可以解决这个问题, 让 ffmpeg使用指定的端口9400:

     Rtsp.c -> ff_rtsp_make_setup_request()  

记一次 ffmpeg 接收rtsp异常

3. 通过搜索试验发现, ffmpeg 通过指定 传输方式也可以解决。

av_dict_set(&in_opts, "rtsp_transport",  "tcp", 0);