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

发布于:2025-04-03 ⋅ 阅读:(15) ⋅ 点赞:(0)

=================================================================

音视频入门基础:MPEG2-TS专题系列文章:

音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载

音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

音视频入门基础:MPEG2-TS专题(4)——使用工具分析MPEG2-TS传输流

音视频入门基础:MPEG2-TS专题(5)——FFmpeg源码中,判断某文件是否为TS文件的实现

音视频入门基础:MPEG2-TS专题(6)——FFmpeg源码中,获取MPEG2-TS传输流每个transport packet长度的实现

音视频入门基础:MPEG2-TS专题(7)——FFmpeg源码中,读取出一个transport packet数据的实现

音视频入门基础:MPEG2-TS专题(8)——TS Header中的适配域

音视频入门基础:MPEG2-TS专题(9)——FFmpeg源码中,解码TS Header的实现

音视频入门基础:MPEG2-TS专题(10)——PSI、SI简介

音视频入门基础:MPEG2-TS专题(11)—— TS中的Section

音视频入门基础:MPEG2-TS专题(12)—— FFmpeg源码中,把各个transport packet组合成一个Section的实现

音视频入门基础:MPEG2-TS专题(13)——FFmpeg源码中,解析Section Header的实现

音视频入门基础:MPEG2-TS专题(14)——PAT简介

音视频入门基础:MPEG2-TS专题(15)——FFmpeg源码中,解析Program association section的实现

音视频入门基础:MPEG2-TS专题(16)——PMT简介

音视频入门基础:MPEG2-TS专题(17)——FFmpeg源码中,解析TS program map section的实现

音视频入门基础:MPEG2-TS专题(18)——PES流简介

音视频入门基础:MPEG2-TS专题(19)——FFmpeg源码中,解析TS流中的PES流的实现

音视频入门基础:MPEG2-TS专题(20)——ES流简介

音视频入门基础:MPEG2-TS专题(21)——FFmpeg源码中,获取TS流的视频信息的实现

音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现

音视频入门基础:MPEG2-TS专题(23)——通过FFprobe显示TS流每个packet的信息

音视频入门基础:MPEG2-TS专题(24)——FFmpeg源码中,显示TS流每个packet的pts、dts的实现

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

音视频入门基础:MPEG2-TS专题(26)——通过FFmpeg命令使用RTP发送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流,详情见:《音视频入门基础:MPEG2-TS专题(26)——通过FFmpeg命令使用RTP发送TS流》。


网站公告

今日签到

点亮在社区的每一天
去签到