ffmpeg rtp发送video和audio并播放

这篇具有很好参考价值的文章主要介绍了ffmpeg rtp发送video和audio并播放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

发送h264 video

ffmpeg -re -stream_loop -1 -i h264.mp4 -vcodec h264 -f rtp rtp://127.0.0.1:5006

SDP: # 这个信息默认会输出到terminal
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat LIBAVFORMAT_VERSION
m=video 5006 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1


Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))

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

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

ffplay后直接跟rtp://127.0.0.1:5006的url播放是不可以的。

发送aac audio

ffmpeg -re -stream_loop -1 -i aac.mp4 -acodec aac -f rtp rtp://127.0.0.1:5008

SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat LIBAVFORMAT_VERSION
m=audio 5008 RTP/AVP 97
b=AS:128
a=rtpmap:97 MPEG4-GENERIC/44100/2
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=121056E500


Stream mapping:
  Stream #0:0 -> #0:0 (aac (native) -> aac (native))

播放:

ffmpeg -re -stream_loop -1 -i aac.mp4 -acodec aac -f rtp rtp://127.0.0.1:5008 > a.sdp
ffplay -protocol_whitelist "file,rtp,udp" -i a.sdp

合并播放

根据前面audio和video输出的sdp信息,创建video.sdp文件,两路rtp独立发送,一路播放也可以。sdp内容如下:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
m=video 5006 RTP/AVP 96
b=AS:200
a=rtpmap:96 MP4V-ES/90000
m=audio 5008 RTP/AVP 97
b=AS:128
a=rtpmap:97 MPEG4-GENERIC/44100/2
a=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
  • 如果出现这段error,修改端口就可以正常播放

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

所以是:

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

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

ffplay -protocol_whitelist "file,rtp,udp" v.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 aac.mp4 -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

rtp_mpegts是一种基于RTP协议的MPEG-2传输流(MPEG-2 Transport Stream)的封装格式。它将MPEG-2传输流封装成RTP数据包,以便在IP网络上进行传输。

所以通过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

rtp不支持两路流

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 h264.mp4 -i aac.mp4 -acodec copy -vcodec copy -f rtp rtp://172.0.0.1:1234

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

都会报错:文章来源地址https://www.toymoban.com/news/detail-672432.html

[rtp @ 0x5618af7603c0] Only one stream supported in the RTP muxer
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:1 -- 
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (copy)
    Last message repeated 1 times

到了这里,关于ffmpeg rtp发送video和audio并播放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【HTML】音视频标签(audio、video、embed)

    我们通常用audio标签来向页面中引入一个外部的音频文件。 音视频文件引入时,默认情况下不允许用户自己控制播放停止。 属性 controls controls指定是否允许用户控制播放。 这个属性不是通过值来判断的,而是通过有没有,有这个属性就是允许,没有就是不允许。 autoplay aut

    2023年04月13日
    浏览(51)
  • html5 video/audio 监听事件属性及方法

       

    2024年02月15日
    浏览(62)
  • 【温故而知新】HTML5的Video/Audio

    HTML5是HTML的最新版本,它引入了许多新的元素和功能,以适应现代网页开发的需求。以下是HTML5的一些主要特点: 新增语义元素 :HTML5引入了许多新的语义元素,如 header、footer、article、section 等,这些元素有助于提高网页的结构化和可访问性。 媒体支持 :HTML5引入了 audio 和

    2024年01月21日
    浏览(149)
  • 【rtp-benchmarks】读取本地文件基于uvgRtp实现多线程发送

    D:XTRANSsoupuvg-rtp-devrtp-benchmarksutilutil.cc

    2024年02月08日
    浏览(33)
  • Android Audio播放流程详解

    本文涉及的所有代码都是AOSP源码 Class Name Description AudioTrack Audio子系统对外提供的API类,用于音频数据的播放 AudioPolicyService Audio子系统的策略控制中心,控制设备的选择或者切换,以及音量控制 AudioFlinger Audio子系统的工作引擎,管理输入输出的音频流,音频数据的混音,以及

    2023年04月08日
    浏览(45)
  • 【论文阅读】EMO: Emote Portrait Alive - Generating Expressive Portrait Videos with Audio2Video Diffusi

    在弱条件下使用音视频扩散模型生成富有表现力的肖像视频(音频+图像=动态视频) paper:[2402.17485] EMO: Emote Portrait Alive -- Generating Expressive Portrait Videos with Audio2Video Diffusion Model under Weak Conditions (arxiv.org) code:喜闻乐见没开源 通过关注音频Prompt和面部动作之间的动态和关系来解

    2024年04月13日
    浏览(50)
  • Android Audio实战——音频播放(十)

            Android SDK 提供了3套音频播放的API,分别是:MediaPlayer,SoundPool,AudioTrack。简单来说,MediaPlayer 更加适合在后台长时间播放本地音乐文件或者在线的流式资源。SoundPool 则适合播放比较短的音频片段,比如游戏声音、按键声、铃声片段等等,它可以同时播放多个音频

    2024年02月15日
    浏览(46)
  • FFmpeg命令行进行UDP、RTP推流(H264、TS),使用ffplay\VLC接收验证

            使用行FFmpeg命令进行UDP、RTP推流(H264、TS),ffplay接收我们在开发网络程序时经常用到UDP或RTP来发送和接收流媒体,而开发程序完毕需要搭建一个环境测试,这时候可能你需要一个推流端或接收端。对于推流端,我们可以借助FFmpeg工具轻松完成该功能,只需要敲一

    2024年02月05日
    浏览(45)
  • Audio API 实现音频播放器

    市面上实现音频播放器的库有很多,比如wavesurfer.js、howler.js等等,但是都不支持大音频文件处理,100多M的文件就有可能导致程序崩溃。总之和我目前的需求不太符合,所以打算自己实现一个音频播放器,这样不管什么需求 在技术上都可控。下面我们简单介绍下 wavesurferJs 、

    2024年02月10日
    浏览(46)
  • audio音频不能自动播放的解决方法

    由于浏览器限制的原因,不允许自动播放audio音频,尝试网上的方法后也没有进展(如果有解决方法,欢迎评论~) 一、首先创建 audio 标签 二、因为在页面刷新后需要先执行动画,动画完成后才去播放音乐,所以在执行 mounted 函数时,先加载音乐源 三、在动画完成后,进

    2024年02月11日
    浏览(114)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包