BSDSocket接收视频数据总结

最近项目上使用Socket接收单边机传送过来的h264裸流,这个小小的需求结果得花非常多的时间测试其稳定性。以下是在开发过程中解决的一点心得。

  1. 信号
    使用bsd sockets得需要注意处理SIGPIPE信号,这是一个不可恢复的系统信号,如果不做处理程序会直接crash。而我们需要给用户一个友好的提示

  2. 自定义协议
    h264数据是一个连续的IO流,所以双方都需定义一个协议指导客户端如果接收数据。协议包含frame的大小, i/p 的标记位等等业务相关信息。
    在实际测试途中,协议头并没有如愿接收正确的数据。比如期望的结果是 01 07 09 10, 但是客户端收到的是 01 00 00 00 ,后面的数据都被置0了, 造成接收帧数据的时候对齐错误。
    最后的解决办法就是尽量精简协议头长度,只保留帧长度等关键信息。另外,在获取帧数据的时候查找 h264 00 00 00 01 的分隔符。尽量保证数据的稳定性。

  3. 超时
    使用socket一个不稳定的地方就是,如果单边机出现一些不可预测是耗时操作影响发送速度,recv会长时间的阻塞。这时就留下一个难题,是设置足够长的时间等待还是规定时间关闭连接。给方便权衡之下选择使用默认超时。给socket一个‘复活’的机会

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,149评论 6 13
  • iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 cocoa AsyncSocket库,用它...
    Ethan_Struggle阅读 2,277评论 2 12
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,987评论 1 13
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,092评论 0 8
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,134评论 6 174