码迷,mamicode.com
首页 > 其他好文 > 详细

流媒体转发的遇到的一些问题

时间:2017-08-07 16:49:51      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:ase   clean   ...   .com   base   result   bsp   htm   html   

在windows下开发流媒体转发,遇到了不少问题,汇总一把

 

1.第一个是有时候会莫名其妙的卡死,检查了不少代码,也没发现问题,

不过发现一个现象,printf()打印的终端,没显示最近的日志,按enter,会出来很多日志,在网上找了好久

http://www.cnblogs.com/jwk000/p/6194525.html

发现这兄弟和我遇见的情况一致,可能是打印缓冲区满了导致的,也有可能其他原因(大神知道的可以告诉我),最后在接收到心跳的时候加了system(“cls”),就没出现过,可能windows真的不适合服务器开发

 

2.使用close关闭boost的socket的时候奔溃

boost::asio::ip::tcp::socket socket(io_service); 
boost::asio::socket_base::linger option(true, 0);
socket.set_option(option);
....
socket.close();

这个是多线程问题,这边关闭,另一边却不知道,还在操作,所以崩溃

socket.shutdown(tcp::socket::shutdown_both);    

shutdown就不会,官方注释也是这样推荐的

 

3.udp接收到的数据不能正常正常解析

不停调试发现是udp socket的缓存区的大小设置太小,要找的适合自己程序的值

    int nRecvBuf = 1024 * 1920 * 1090;
    //int nRecvBuf = 1024*1024*100;
    int iResult = setsockopt(NodeRecSocket, SOL_SOCKET, SO_RCVBUF, (const char*)&nRecvBuf, sizeof(int));
    if (SOCKET_ERROR == iResult)
    {
        LOG_ERROR << "setsockopt error " << WSAGetLastError();
        WSACleanup();
        return;
    }

 

4.sleep(1)的实际休眠时间,在传递数据的时候,为了保证数据的有序,使用了sleep(1),循环一次不明显,循环多次视频明显延迟很多,所以查了一下sleep(1)

不查不知道,一查吓一跳,sleep(1)的实际时间取决于 系统时间精度,cpu核个数,CPU分配的时间片,以及线程调度的时候上下文切换,等等一系列因素,有的电脑测出来休眠了10毫秒,简直无法忍受,有的测出来0.6-0.8ms

目前没有好的办法,我只用sleep(0),让渡出去,让系统决定时间

 

5.以前的流媒体转发设计是,使用了一个线程,重复做如下工作

  a.读取视频流udp数据

  b.解析udp数据

  c.向所有请求的远端转发udp数据

  d.重复a-c;

这样的设计出现一个很大的问题就是

延时的积累,因为b,c都是耗时操作,而且要耗时操作执行完才能读取下一次的数据,这个时候可能udp的缓存区已经积累的大量的数据,而且udp每次只能读一个包

有时候延时很严重,延时一分钟两分钟,直至最后卡死

 

所以我改写了流程

1.新建一个数组存放udp数据,数组的每个元素存放一个udp包,数组的长度依据期望的延时来设置,

视频大小 分辨率 建议码率
480P 720X480 1800Kbps
720P 1280X720 3500Kbps
1080P 1920X1080 8500Kbps

我最大的延时忍受值是5秒,传输的视频是1920*1080   也就是5*8500Kbps=41KB    每个元素存放1024byte数据,所以就是40个元素,(考虑到特殊情况I帧比较多的时候)我放大了一点60个元素

2.新建两个线程,一个专门读取udp传输过来数据,放入数组,记录读取下标。另一个转发数据,记录转发下标(加锁,防止读写冲突)

如果读取udp传输过来数据的位置马上追上了转发数据的位置,那说明已经延时5秒,直接丢弃前五秒的数据,把转发数据的位置移到读取传输数据的前一个位置

 

流媒体转发的遇到的一些问题

标签:ase   clean   ...   .com   base   result   bsp   htm   html   

原文地址:http://www.cnblogs.com/baldermurphy/p/7156618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!