为什么发出去的2833 RTP流不能收号

简介: 为什么发出去的2833 RTP流不能收号

对前段时间解决的收号问题做个复盘。


我开发的媒体服务器部署在某省,为电话用户提供媒体服务。前段时间我们现场交付同事联系我,有某总机电话,无法进行收号。


于是先请现场的同事进行了媒体抓包,我通过媒体包分析媒体包,发现DTMF部分的数据都传输过去了。


061e03ee0013435eaa72249d58dd4f65.png


但有两个RTP的HEADER地方不太一样。一个是DTMF发送的按键的第一个RTP流中的Marker,一个是DTMF发送按键时,它的Timestamp是不变的。


eb93e339e47c47bc88fb3b5d042e70f8.png

a4a271821da9496eb49fae24fc9d9903.png

eed6e242180042ceb03ee4a5bb08edef.png


于是进行排除法进行修改.


先是将Timestamp的发送算法就行了修改,发送DTMF时,同一个DTMF,Timestamp不变。 在公司测试okay后,在现场进行了升级。经过拨测总机还是收不到号。然后我就注意到了Marker。


然后继续修改MS,当DTMF发送第一个RTP包时,将Mark设置为True,后面设置为False。再次升级验证后,收号正常了。


后来我又查了下RFC 2833的规范说明。


Marker为True,表示DTMF的起始位。


Marker bit: The RTP marker bit indicates the beginning of a new    event.


f2607e153fd44aec912191b4b946125b.png

相关文章
|
4月前
|
Web App开发
ZLMediaKit webrtc RTP包接受与重传
ZLMediaKit webrtc RTP包接受与重传
|
6月前
14.6 Socket 应用结构体传输
当在套接字编程中传输结构体时,可以将结构体序列化为字符串(即把结构体的所有成员打包成一个字符串),然后将字符串通过套接字传输到对端,接收方可以将字符串解析为结构体,然后使用其中的成员数据。这种方法通常被称为序列化(Serialization)和反序列化(Deserialization),本章中我们可以采用将一个结构体序列化为一个纯字符串,然后将该字符串通过套接字传输给对端,当对端收到后只需要将字节序强制转换为对等的结构体指针即可实现对该结构的解析。
26 0
14.6 Socket 应用结构体传输
|
6月前
|
网络协议 索引
HTTP/2 协议(帧、消息、流简单的抓包分析)
HTTP/2 协议(帧、消息、流简单的抓包分析)
110 0
|
7月前
|
定位技术 开发工具 Windows
如何在RTSP/RTMP直播过程中加入SEI扩展数据发送和接收解析
在直播系统中,除了直播音视频之外,有时候还想从主播端发布文本信息等,这些信息可以不通过视频传输通道发送给用户播放端,但如果传输的数据想和视频保持精准同步,那最好的办法就是这些信息和视频数据打包在一起传输,并通过h264 sei方式就可以把数据放入h264 Access Unit中传输。
183 0
udp发送广播消息
import socket if __name__ == '__main__': # 创建udpsocket udp_socket = socket.socket(socket.AF_INET, socket.
1445 0
|
网络协议 C++
C++流的streambuf详解及TCP流的实现
streambuf是C++流(iostream)与流实体(文件、标准输入输出等)交互的桥梁,文件流和字符串流是C++标准库已经提供了的,现在我的目标是实现一个使用TCP协议通信的socket流...
4110 0