gpt4 book ai didi

c - RTP 数据包的套接字问题

转载 作者:行者123 更新时间:2023-11-30 18:07:45 26 4
gpt4 key购买 nike

我正在尝试用 C 语言构建一个 RTP 数据包度量分析器,但最终遇到了一个奇怪的问题,我正在削减实现细节以便于公开:

由于 RTP 数据包包含在 UDP 中,因此我的套接字使用以下参数进行初始化:

sock_domain = AF_INET;
sock_type = SOCK_DGRAM;
sock_proto = IPPROTO_UDP;

并与这些参数绑定(bind):

socket_addr.sin_family = AF_INET;
socket_addr.sin_port = 10000; // My server is streaming on 10000
socket_addr.sin_addr.s_addr = INADDR_ANY;

并加入多播组:

mgroup_req.imr_multiaddr.s_addr = inet_addr("224.1.0.1"); // Multicast group of the stream
mgroup_req.imr_interface.s_addr = INADDR_ANY;

将我接收的多播组设置为:

mgroup_addr.sin_family = socket_addr.sin_family;
mgroup_addr.sin_port = socket_addr.sin_port;
mgroup_addr.sin_addr.s_addr = mgroup_req.imr_multiaddr.s_addr;

使用recvfrom函数接收数据包:

errcode = recvfrom(sockfd, &recvbuff, IPMAXSIZE, 0, (struct sockaddr *)&mgroup_addr, &mgroup_addr_len)

出了点问题,虽然我可以接收发送到多播组224.1.0.1的标准UDP数据包,但第一次没有收到RTP数据包,但再次发送它们就成功了。

场景 1:

我发送n个UDP数据包:它们被正确接收

场景 2:

我发送n个RTP数据包:什么也没发生

我再次发送相同的n个RTP数据包:它们被正确接收

无论n个数据包的数量是多少......很奇怪,但却是事实。

编辑:在分析器端,我运行一个嗅探器,它显示两个数据包突发,因此消息到达分析器端,这不是与发送方相关的问题。

问题:

RTP 场景和 UDP 场景的代码完全相同(读取:相同的可执行文件)。我做错了什么?

旁注:

RTP 管理库或高级 RTP 库建议是禁忌,因为我需要分析指标,所以我必须在这个抽象级别上工作。

此外,网络指标分析器也是禁忌,我必须使用自己的代码来执行此操作。

提前致谢。

最佳答案

我不认为您需要将 mcast 组地址再次命名为 receivefrom 地址,因为您已经加入了该组。从其他地方接收数据包真的是一个问题吗?我只想使用recv()。

关于c - RTP 数据包的套接字问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4275746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com