当前位置: 首页 > news >正文

音视频入门基础:MPEG2-TS专题(25)——通过FFmpeg命令使用UDP发送TS流

一、通过FFmpeg命令使用UDP发送TS流

通过以下FFmpeg命令可以将一个mp4文件转换为ts封装,并基于UDP发送(推流):

ffmpeg.exe -re -i input.mp4 -vcodec copy -acodec copy -f mpegts udp://127.0.0.1:1234

其中:

“input.mp4”为输入(转换前)的媒体文件。

参数“-c:v copy -c:a copy”用于保持视频和音频的编码格式不变,只复制音视频流而不对其重新进行编解码。

“1234”为接收端需要创建的UDP服务器的端口号,推流端使用UDP将TS流发送到该端口。

二、接收端播放

通过命令:ffplay -protocol_whitelist "file,udp,rtp" -i udp://127.0.0.1:1234 可以播放上述生成的基于UDP的TS流:

三、Wireshark抓包

通过Wireshark可以抓取上述生成的基于UDP的TS流。显示过滤器输入“udp.port == 1234 && !icmp”,使得Wireshark只显示UDP协议的目的主机端口为“1234”的数据包列表,并把ICMP协议排除掉。这样界面就能只显示上述生成的基于UDP的TS流数据包了:

选中其中一个UDP数据包,可以查看其Data。可以看到每个UDP数据包都包含了值为0x47的同步字节,同步字节之间的间隔长度为188字节,所以接收端的播放器可以根据这点判断其是TS流(具体可以参考:《音视频入门基础:MPEG2-TS专题(5)——FFmpeg源码中,判断某文件是否为TS文件的实现》):

由于我们已经知道了上述是通过UDP将TS流发送到“1234”端口。所以右键点击一个UDP包,选择“Decode As...”,再选择“MP2T”,这样在Wireshark中就解析成TS包(transport packet)了:

点击上图中的“确定”按钮,可以看到UDP包被成功解析为TS包了:

四、使用UDP发送TS流的缺点

使用UDP确实可以发送TS流,并进行网络传输。但这种方式的缺点是:不支持在接收端对数据包重新排序。所以更好的方式是通过RTP协议对TS包进行封装,即通过RTP传输TS流。

http://www.dtcms.com/a/100621.html

相关文章:

  • 深度学习之丢弃法
  • 音视频 ColorSpace色彩空间详解
  • JS数组复制方法及注意事项
  • [BJDCTF2020]Mark loves cat [git泄露][变量覆盖漏洞]
  • Java单列集合[Collection]
  • 【Vue3知识】Vue3集成富文本编辑器TinyMCE
  • Croe 11.0建模入门笔记:1.2 快捷键
  • C++的四种类型转换
  • 走进 detect.tflite:树莓派目标检测背后的核心模型详解
  • rust学习笔记21-闭包
  • 多人协同进行qt应用程序开发应该注意什么2?
  • H5S USC 宇视LiteAPI协议支持
  • C#从入门到精通(4)
  • CPU飙高系统反应慢怎么排查?
  • AI赋能职教革新:生成式人工智能(GAI)认证重构技能人才培养新范式
  • 告别枯燥工作,走向自动化
  • 人形机器人行业研究
  • 1304-习题1_4-课后习题-高等数学
  • Cesium知识总结(一)
  • 洛谷P3128 [USACO15DEC] Max Flow P
  • RUST学习笔记1:Rust开发环境搭建(Winodws11 x64)
  • QSettings用法实战(相机配置文件的写入和读取)
  • 第三届全国技能大赛广西选拔赛 《软件测试》项目样题
  • C语言深度解析:从零到系统级开发的完整指南
  • SpringBoot3+EasyExcel通过WriteHandler动态实现表头重命名
  • DAY 31 leetcode 142--链表.环形链表
  • java容器
  • 如何在不同的分辨率均能显示出清晰的字体?
  • 创作领域“<em >足</em><em>球</em><em>彩</em><em>票</em><em>计</em><em>划
  • 设计模式分类与定义(高软55)