文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ffmpeg rtp发送video和audio并播放

2023-08-30 14:47

关注

发送h264 video

ffmpeg -re -stream_loop -1 -i h264.mp4 -vcodec h264 -f rtp rtp://127.0.0.1:5006SDP:v=0o=- 0 0 IN IP4 127.0.0.1s=No Namec=IN IP4 127.0.0.1t=0 0a=tool:libavformat LIBAVFORMAT_VERSIONm=video 5006 RTP/AVP 96a=rtpmap:96 H264/90000a=fmtp:96 packetization-mode=1Stream mapping:  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))

执行这条命令,如上SDP端,会生成SDP信息输出,单独播放很简单,复制前面的sdp信息到a.sdp(也可以直接在命令后跟> v.sdp符号生成v.sdp文件),然后就可以用命令直接播放,其中Stream mapping可以确定指定codec参数是经过重新编码的。

ffmpeg -re -stream_loop -1 -i h264.mp4 -vcodec h264 -f rtp rtp://127.0.0.1:5006 > v.sdpffplay -protocol_whitelist "file,rtp,udp" -i v.sdp

发送aac audio

ffmpeg -re -stream_loop -1 -i aac.mp4 -acodec aac -f rtp rtp://127.0.0.1:5008SDP:v=0o=- 0 0 IN IP4 127.0.0.1s=No Namec=IN IP4 127.0.0.1t=0 0a=tool:libavformat LIBAVFORMAT_VERSIONm=audio 5008 RTP/AVP 97b=AS:128a=rtpmap:97 MPEG4-GENERIC/44100/2a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=121056E500Stream mapping:  Stream #0:0 -> #0:0 (aac (native) -> aac (native))

合并播放

根据前面audio和video输出的sdp信息,创建video.sdp文件,内容如下:

v=0o=- 0 0 IN IP4 127.0.0.1s=No Namec=IN IP4 127.0.0.1t=0 0m=video 5006 RTP/AVP 96b=AS:200a=rtpmap:96 MP4V-ES/90000m=audio 5008 RTP/AVP 97b=AS:128a=rtpmap:97 MPEG4-GENERIC/44100/2a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=121056E500

播放命令:

ffplay -protocol_whitelist "file,rtp,udp" -i video.sdp -sync ext

-sync type:set audio-video sync. type (type=audio/video/ext),AV同步支持三个参数,前面的这个分离流发送,用ext做同步效果好一些,播放经过一段时间后,av同步比较好,能明显的听出来用ext同步,audio会被拉伸。

[udp @ 0x7fbfe8009260] bind failed: Address already in useB f=0/0   video.sdp: Invalid data found when processing input

ffmpeg rtp发送ts流

发送video

ffmpeg -re -stream_loop -1 -i h264.ts -vcodec h264 -rtpflags h264_mode0 -f rtp rtp://172.0.0.1:1234

报错:

[rtp @ 0x55cccc59c0f0] NAL size 2256 > 1460, try -slice-max-size 1460

去掉-rtpflags h264_mode0就好了,-vcodec 指定为copy也是可以的。

所以是:

ffmpeg -re -stream_loop -1 -i h264.ts -vcodec h264 -f rtp rtp://172.0.0.1:1234

这里源文件是ts,也输出了sdp信息,但是指定对应的sdp播放失败。

发送audio

ffmpeg -re -stream_loop -1 -i aac.ts -acodec copy -rtpflags latm -f rtp rtp://172.0.0.1:1235

如果没有参数-rtpflags latm,会报错:AAC with no global headers is currently not supported.,不要这个参数,实际acodec后面跟aac重新编码后就没问题了。

但是和前面一样,源文件是ts,指定对应的sdp播放失败。

AAC as an RTP payload

工作正常:

ffmpeg -re -i file.aac -c:a aac -f rtp rtp://127.0.0.1:8000

AAC with no global headers is currently not supported:

ffmpeg -re -i file.aac -c:a copy -f rtp rtp://127.0.0.1:8000

这个用了copy,应该是acc的frame可能不是adts,在指定codec为aac后重编码后的aac是adts格式,video也是一样的,这个需要看代码确定一下。

https://www.reddit.com/r/ffmpeg/comments/mq6jzv/aac_as_an_rtp_payload/

使用rtp_mpegts

Pro-MPEG Code of Practice #3 Release 2 FEC protocol.

The Pro-MPEG CoP#3 FEC is a 2D parity-check forward error correction mechanism for MPEG-2 Transport Streams sent over RTP.

Pro-MPEG-CoP#3:此协议必须与rtp_mpegts muxer和rtp协议一起使用,用于通过RTP发送的MPEG-2。

所以通过rtp_mpegts可以直接发送包含video和audio的ts流,也可以用来单独发送:

 ffmpeg -re -stream_loop -1 -i test.ts -vcodec copy -acodec copy -f rtp_mpegts rtp://239.0.0.1:5656

经过rtp_mpegts发送的流不需要指定sdp,ffplay直接跟url就可以播放,这里用了组播地址,用127.0.0.1也是可以的:

ffplay -protocol_whitelist "file,rtp,udp" rtp://239.0.0.1:5656

不支持

ffmpeg不支持两路流输入,下面这两种写法都不支持:

ffmpeg -re -stream_loop -1 -i aac.mp4 -i h264.mp4 -acodec copy -vcodec copy -f rtp rtp://172.0.0.1:1234

独立video和audio流作为输入不可以。

ffmpeg -re -stream_loop -1 -i test.mp4 -acodec copy -vcodec copy -f rtp rtp://172.0.0.1:1234

mp4文件中包含两路流也是不行的。

会报错:

[rtp @ 0x55e7023aa210] Only one stream supported in the RTP muxerCould not write header for output file #0 (incorrect codec parameters ?): Invalid argumentError initializing output stream 0:1 --

来源地址:https://blog.csdn.net/hongszh/article/details/132503681

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯