为什么udp流设置1316字节

当我们在用udp推流时经常会看到pkt_size=1316,如下:
ffmpeg -re -i westLife.mp4 -f mpegts udp://127.0.0.1:5000?pkt_size=1316
上述命令中pkt_size=1316是什么意思,它是指udp发送音视频流时,每个udp包所含有的有效负载的大小。
在代码中设置如下:
AVDictionary*dic = NULL;
av_dict_set(&dic, “pkt_size”, “1316”, 0); //Maximum UDP packet size

那么大小为什么是1316呢,以太网的MTU(Maximum Transmission Unit)通常是1500 bytes,因此,最好控制发送报文长度在1500 bytes以下,以TS over UDP场景为例,通常每个TS包大小为188 bytes,因此,每个UDP包中最大可包含TS包的数目为floor((1500 – 8 -20 )/ 188) = 7,即有效数据为188 * 7 = 1316bytes,8和20分别为UDP包头和IP包头的长度。

补充:
MTU(Maximum Transmission Unit)网络上传送的最大数据包大小。

MTU的单位是字节byte,主流网络是以太网(Ethernet)MTU是1500,以太网的相关网络设备MTU是1500。

MTU其实属于OSI参考模型第2层(数据链路层),目的是限定【MAC帧中数据部分(payload)的大小】的值,会影响到【第3层的整个IP封包的大小】,此大小包括IP数据包的包头;而最终IP数据包是要放进MAC帧。

28字节的大小,是 【IP包头的20字节】+ 【ICMP的包头8字节】。

1500 bytes (Ethernet mtu) – 20 byte (IP header) – 8 byte (ICMP header) = 1472 byte

ping -s 1472 -M do 192.168.100.79

如下:

PING 192.168.100.79 (192.168.100.79) 1472(1500) bytes of data.
1480 bytes from 192.168.100.79: icmp_seq=1 ttl=64 time=0.196 ms
1480 bytes from 192.168.100.79: icmp_seq=2 ttl=64 time=0.208 ms
^C
--- 192.168.100.79 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1032ms
rtt min/avg/max/mdev = 0.196/0.202/0.208/0.006 ms
ping -s 1473 -M do 192.168.100.79
PING 192.168.100.79 (192.168.100.79) 1473(1501) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 192.168.100.79 ping statistics ---
5 packets transmitted, 0 received, +5 errors, 100% packet loss, time 4099ms

在这里插入图片描述

ffmpeg是音视频必备,但即使从业数年,它似乎依然有无穷的秘密,感兴趣添加笔者微信:YQW1163720468,加入ffmpeg微信群讨论。但记得备注:ffmpeg爱好者

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本程序可以工作在三种模式: 服务器模式,用来监听本地端口,接收外部数据包,并且可以回复自定义数据; 客户端模式,用来连接服务器,发送自定义数据包,并接收远程回复数据; 转发器模式,用来监听本地端口,将接收到的数据包发送给指定的远程服务器,也可以在转发数据中插入自定义数据向双发发送; 支持发送ascii字符串数据,以及十六进制表示的原始字节,单次发送的字符数目没有限制;收到的数据会同时以这两种形式显示。 sokit TCP/UDP 数据包收发测试(调试)工具(Win32)是一款IP工具客户端应用,用户评价还是不错的。tcp数据包近日推出了1.3版本,修复了若干bug,提升了软件使用的畅性,加上美观的界面,sokit TCP/UDP 数据包收发测试(调试)工具(Win32)新版一定能给用户带来一个更好的体验。   支持收发日志文件。 支持快捷键操作。   支持中英文用户界面。 支持Windows XP/2000/2003/2008/Vista/7以及Linux系统。 sokit功能特色 1、服务器模式   用来监听本地端口,接收外部数据包,并且可以回复自定义数据 2、客户端模式   用来连接服务器,发送自定义数据包,并接收远程回复数据 3、转发器模式   用来监听本地端口,将接收到的数据包发送给指定的远程服务器,也可以在转发数据中插入自定义数据向双发发送 4、支持发送ascii字符串数据,以及十六进制表示的原始字节,单次发送的字符数目没有限制 5、收到的数据会同时以这两种形式显示 sokit数据输入格式   发送区的编辑框内的字符会按照ascii值发送(多字节字符按照UTF8编码),如果需要发送十六进制原始数据,请将相应数值的ascii表示放进方括号中。例如:[FF AB CD 12 12],实际发送时会过滤掉方括号本身,以及其中的空格字符。(使用两个连续的 [[ 表示 [ 字符本身) sokit使用方法   1、首先,下载并解压软件,双击“sokit.exe”进入软件主界面。   2、服务器,对网络设置设置,当前连接等进行设置,即可进行TCU/UDP侦听,以及发送数据。   3、转发器,可用于监听本地端口。   4、客户端,用于连接服务器。   5、记事板,能够查看相应的信息
您好,我是 ChitGPT,一个基于深度学习技术的自然语言生成 AI,能够进行对话和回答一些简单的问题。关于您所提到的问题,我可以为您提供一些指导和思路。 对于 Linux C 下 UDP 发送 16 进制字节的问题,您可以考虑使用以下步骤: 1. 定义需要发送的 16 进制字节,可以使用 unsigned char 数组或者字符串表示。 2. 创建一个 UDP Socket,可以使用 socket 函数进行创建,并设置好地址、端口等参数。 3. 使用 sendto 函数发送数据,注意需要将需要发送的字节转换为二进制数据进行发送。 4. 关闭Socket,释放资源。 具体代码实现可以参考下面的示例: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/socket.h> #define SERVER_PORT 6666 int main() { // 定义需要发送的 16 进制字节 unsigned char data[] = {0x12, 0x34, 0x56, 0x78}; // 创建一个 UDP Socket int sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("create socket fail"); exit(1); } // 设置服务器地址和端口 struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 发送数据 int ret = sendto(sockfd, (const char *)data, sizeof(data), 0, (const struct sockaddr *)&server_addr, sizeof(server_addr)); if (ret < 0) { perror("send data fail"); exit(1); } // 关闭Socket,释放资源 close(sockfd); return 0; } ``` 希望能够对您有所帮助。如果您还有其他问题,欢迎继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

、、、、南山小雨、、、、

分享对你有帮助,打赏一下吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值