javacv接收rtp报Protocol not on whitelist 'file'!

使用ffmpeg或ffplay接收rtp数据流时,会报以下错:
Protocol ‘rtp’ not on whitelist ‘file,crypto’!
这是因为使用rtp需要udp和rtp协议的支持,但是默认协议只有file。在命令行上,我们可以直接配置参数解决这个问题:

ffplay -protocol_whitelist file,udp,rtp test.sdp

但是,直接使用javacv需要怎样配置?
FFmpegFrameGrabber是在start()后才创建AVFormatContext,所以,若start()后调用接口配置protocol_whitelist,该配置也无法生效,依然还会报错!

grabber.getFormatContext().protocol_whitelist(new BytePointer("file,udp,rtp"))

看了start()源码,发现avformat_open_input()前,会使用av_dict_set()添加我们的配置信息。这样就可以解决问题了。
在我们调用start()前,配置一下属性就可以:

FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(src);
grabber.setOption("protocol_whitelist", "file,udp,rtp");
grabber.start();

另外,附上命令行调试rtp的常用命令:
推送rtp数据流:

ffmpeg -re -i 20191225095006.mp4 -f rtp rtp://localhost:6666

注意,需要先通过上面命令,导出一份sdp文件(可以使用重定位)。这个文件给播放器使用。

播放rtp数据流:

ffplay -protocol_whitelist file,udp,rtp test.sdp

test.sdp就是ffmpeg导出的sdp文件。

转存rtp数据流:

ffmpeg -protocol_whitelist file,udp,rtp -i test.sdp test.mp4

其实跟推流命令一样,只是推送到文件,输入是rtp数据流的sdp描述文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值