基于RTPRTSP数据传输中的丢包现象...

基于RTPRTSP数据传输中的丢包现象...,第1张

如果是udp的话 发送方丢包可能性不大,可能是路由设备或者客户端接收逻辑垃圾 导致客户端丢码。但是rtp提供了tcp方式传输,如果你tcp方式发现也丢得话,那估计就是发送逻辑的问题。一般都是send的时候返回错误而没有判断造成的。建议使用多线程发送,将网络和其他逻辑分开,网络部分最好使用异步。我做过rtsp服务器,主要就是io线程不能干其他的,这样就能确保数据即时发送出去。当然如果tcp的话带宽限制你发送不了那么快可以适当的从数据源这里就丢一些非关键帧b或者p。这样就能有稍微好点的实时性。
最后一句话,开发rtsp之前要计算好带宽,连接数,码流大小这些数据。

海康威视视频流和复合流区别有以下几个方面,具体如下:

1服务器不同

海康威视视频流采用通用的RTSP服务器,如nginx、SRS或 Darwin Stream Server(原生版本),更有利于私有部署。

海康威视复合流采用通用的RTSP服务器,如nginx、SRS和 Darwin Stream Server(原生版本),更有利于私有部署。

2服务器不同

海康威视视频流支持H264的扩展SEI消息发送机制。

海康威视复合流支持H265的扩展SEI消息发送机制设定,换句话说,之前推送端支持的功能,都可以同步支持。

3获取数据方式不同

海康威视视频流通过采集端,获取原始的yuv/rgb数据,h264/h265编码打包成需要的格式,如按照rtmp或rtsp打包并发送数据;

海康威视复合流通过拉流端,通过rtsp或者rtmp协议,获取到数据,并进行音视频数据parser,然后,解码,解码后的原始数据。

1 RTSP连接的建立过程
RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话。
首先创建RTSP服务器(具体实现类是DynamicRTSPServer),在创建过程中,先建立Socket(ourSocket)在TCP的554 端口进行监听,然后把连接处理函数句柄(RTSPServer::incomingConnectionHandler)和socket句柄传给任务调度器(taskScheduler)。
任务调度器把socket句柄放入后面select调用中用到的socket句柄集(fReadSet)中,同时将socket句柄和 incomingConnectionHandler句柄关联起来。 接着,主程序开始进入任务调度器的主循环(doEventLoop),在主循环中调用系统函数select阻塞,等待网络连接。
当RTSP客户端输入( rtsp://19216801/1mpg)连接服务器时,select返回对应的scoket,进而根据前面保存的对应关系,可找到对应处理函数句柄,这里就是前面提到的incomingConnectionHandler了。在 incomingConnectionHandler中创建了RTSPClientSession,开始对这个客户端的会话进行处理。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10758604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存