2019-09-27 使用live555 做rtspclient

RtspClientTask负责管理rtspclient,每个rtspclient都会创建新的线程,rtspclient 使用live555开源库。
取流后需要简单封装数据,h264需提取sps 和 pps 给解码器使用,最好是将sps pps I帧 封装在一起送给解码器。按照如下格式00 00 00 01+ sps+00 00 00 01 +pps+00 00 00 01 + i帧+ 00 00 00 01 +p帧,Sps 和 pps 只需传入一次就行(后续无变动)。
h265需提取vps,sps,pps,按照如下格式00 00 00 01+vps+00 00 00 01+sps+00 00 00 01+pps+00 00 00 01+i帧+00 00 00 01 + p帧。
Vps sps pps 均是rtspclient 发送describe请求后,rtspserver回复的sdp中带的。

代码比较简单 主要在这个回调中 实现自己的封装媒体流方式 DummySink::afterGettingFrame

最好是等I帧过来后,再获取vps sps pps,有些解码器容错能力并不是很强,这样封装更好点。

vps sps pps通过live555 如下接口获取
SPropRecord* sPropRecords[3];
unsigned numSPropRecords[3];
sPropRecords[0] = parseSPropParameterSets(fSubsession.fmtp_spropvps(), numSPropRecords[0]);
sPropRecords[1] = parseSPropParameterSets(fSubsession.fmtp_spropsps(), numSPropRecords[1]);
sPropRecords[2] = parseSPropParameterSets(fSubsession.fmtp_sproppps(), numSPropRecords[2]);
264中I帧用如下方式判断
(fReceiveBuffer[0] & 0x1F) == 5
265中i帧用如下方式判断
((fReceiveBuffer[0] & 0x7E) >> 1) == 19
详细可以看下标准协议 。

实际测试下来看大华摄像头h265回复的sdp中带了vps。Hik和宇视的sdp中都未带vps。有点奇怪,正在分析中。

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

推荐阅读更多精彩内容

  • 本例需求:使用H264, H265实现视频数据的编码并录制开始200帧存为文件. 原理:比如做直播功能,需要将客户...
    小东邪啊阅读 25,221评论 9 30
  • 一、H264的NAL单元详解1、VCL只关心编码部分,重点在于编码算法以及在特定硬件平台的实现 (1)SODB 是...
    Magic11阅读 1,834评论 0 2
  • 需求 本文主要将含有编码的H.264,H.265视频流文件解码为原始视频数据,解码后即可渲染到屏幕或用作其他用途....
    小东邪啊阅读 12,596评论 9 27
  • 需求 iOS中编码视频数据,一般情况而言一个项目仅需要一个编码器,不过有时特殊需求可能需要两个编码器同时工作.本例...
    小东邪啊阅读 6,319评论 2 8
  • 刘用年少的时候想当一名侠客,后来也这么做了。 因为没有钱买一把好刀,刘用只好把家里的砍柴刀挂在了腰间,他清楚的记得...
    秦约取阅读 671评论 7 27