海康ehome协议分析(2):预览请求

2023-01-04 15:02:34 浏览数 (2)

实时点播

  • 1.信令
    • 开始点播
      • Platfrom=>>Device:
      • Device=>>Platform:
    • 停止点播
      • Platfrom=>>Device:
      • Device=>>Platfrom:
  • 2.视频流
  • 技术交流

1.信令

开始点播

Platfrom=>>Device:

代码语言:javascript复制
<?xml version="1.0" encoding="GB2312" ?>
<PPVSPMessage>
    <Version>2.5</Version>
    <Sequence>3566</Sequence>
    <CommandType>REQUEST</CommandType>
    <Method>MEDIA</Method>
    <Command>INVITESTREAM</Command>
    <Params>
    	<!-- 请求设备通道号-->
        <Channel>1</Channel>
        <!-- 请求设备码流类型:MAIN:主码流,SUB:子码流,THIRD:三码流-->
        <ChannelType>MAIN</ChannelType>
        <SinkIP>192.168.1.133</SinkIP>
        <SinkPort>8000</SinkPort>
    </Params>
</PPVSPMessage>

Device=>>Platform:

代码语言:javascript复制
<?xml version="1.0" encoding="GB2312"?>
<PPVSPMessage>
    <Version>2.0</Version>
    <Sequence>3566</Sequence>
    <CommandType>RESPONSE</CommandType>
    <WhichCommand>INVITESTREAM</WhichCommand>
    <!-- 当前请求流后状态码,200标示成功,其他见错误码-->
    <Status>200</Status>
    <Description>OK</Description>
    <Params>
        <!-- 当前请求流位置标示,类似ssrc-->
        <Session>679647373</Session>
    </Params>
</PPVSPMessage>

停止点播

Platfrom=>>Device:

代码语言:javascript复制
<?xml version="1.0" encoding="GB2312" ?>
<PPVSPMessage>
    <Version>2.5</Version>
    <Sequence>8068</Sequence>
    <CommandType>REQUEST</CommandType>
    <Method>MEDIA</Method>
    <Command>BYESTREAM</Command>
    <Params>
    	<!--与开始点播的Session一致 -->
        <Session>679647373</Session>
    </Params>

Device=>>Platfrom:

代码语言:javascript复制
<?xml version="1.0" encoding="GB2312"?>
<PPVSPMessage>
    <Version>2.0</Version>
    <Sequence>8068</Sequence>
    <CommandType>RESPONSE</CommandType>
    <WhichCommand>BYESTREAM</WhichCommand>
    <Status>200</Status>
    <Description>OK</Description>
    <Params>
    	<!--与开始点播的Session一致 -->
        <Session>679647373</Session>
    </Params>
</PPVSPMessage>

2.视频流

通过海康ehome协议通过TCP点播海康的摄像头,摄像头推送的流并非标准的PS流。 格式如下: 2400013980600000000000000a689ebc0d000001ba5e269c2ee401028f63feffff007d4909000001e000128c80092789a70bb9fffffffc000000010930000001e0001a8c0005fffffffffc00000001060109004e082468000003000180000001e000da8c0004fffffff80000000161e2727088000411c4469504636f3802c8118505f81b0b3171564e0668c371e18a3614cf05a24bcf006d9a6ad1ffc3efc7917c8cce99343b4e839750fefd8f32361ab3270444fbc90eb51586ad45d445f11ec996ea36aeab6446958282a9f687350a42463ed140d4465783237338b91d4c0dbebb8d3cc61e8092cd7124f6dd41c30f87771e399896cd633c0dfb6fcab16d472c25788870ee859f7eabce0c982024ca0eabdaaec2422ac14929c0002792538f0c0b7ed51d0ef09988ca548018530494fcdfd400000300b929180062c0

可以看到000001ba是PS流的头,而PS是荷载在RTP包中,那么我们来分析下PS头前面的字节:

24 00 01 39 80 60 00 00 00 00 00 00 0a 68 9e bc 0d

  • 24 00 前两个字节是‘$’,有点像tcp传输的rtsp协议;
  • 01 39 为RTP包的长度,这里为313;
  • 80 60 00 00 00 00 00 00 0a 68 9e bc为标准12位的RTP头,其中第3,4个字节是sequence号,这里是00 00 ,0a 68 9e bc为ssrc;
  • 0d,这里认为是RTP头与PS包的分隔符。

技术交流


后续将在非SDK对接的基础上深度剖析ehome协议,使大家监控上云更方便。 基友之家:ehome开源服务

0 人点赞