mobile CCTV,mobile surveillance,police body worn cameras

标题: 视频流通过网络转发 [打印本页]

author: fsx92    time: 2016-2-22 16:41
标题: 视频流通过网络转发
查看了SDK的文档以及DEMO,并且自己写了代码实现。发现对于PU的音视频流,只能调用SDK里的API进行存储和在界面播放。能不能直接获取视频流,然后利用网络TCP转发出去呢?有提供这样的接口吗,或者其他实现的方法?
author: fanghj90    time: 2016-2-23 10:38
SDK 接口可以实现的。调用BVCU_Dialog_Open()接口时,填写BVCU_DialogParam结构体的afterRecv()回调。afterRecv()会在收到音视频帧时回调给你。
如果不需要SDK内部解码播放,可以将BVCU_DialogControlParam.BVCU_DialogControlParam_Render.hWnd = NULL
author: fsx92    time: 2016-2-23 15:20
我已通过回调函数afterRecv()中的结构体参数SAV_Packet.pData获得了视频流数据,并且转发到网络上。但是接收端不能正确播放这些视频流数据,请问收到的视频流是什么编码格式,是否需要解码后再传送。
author: fanghj90    time: 2016-2-23 16:00
SAV_Packet.pData的编码格式在pCodec.eCodecID值中,SAV_Packet.pData为视频、音频 的帧数据,可以根据pCodec信息解码播放的。如果需要传输,还要看你们的数据传输协议,例如RTP协议,对数据进行分片,打包,传输...
author: fsx92    time: 2016-2-24 13:46
我查看了pCodec.eCodecID的值为H.264格式,请问是标准的H.264封装吗?我收到数据后通过UDP转发出去,然后使用VLC播放器不能正常播放。我使用VLC播放器播放单独的H.264文件是可以播放的。我使用UDP方式转发TS流也是可以在VLC播放器中正常播放的。
author: fsx92    time: 2016-2-24 13:46
fanghj90 发表于 2016-2-23 16:00
SAV_Packet.pData的编码格式在pCodec.eCodecID值中,SAV_Packet.pData为视频、音频 的帧数据,可以根据pCod ...

我查看了pCodec.eCodecID的值为H.264格式,请问是标准的H.264封装吗?我收到数据后通过UDP转发出去,然后使用VLC播放器不能正常播放。我使用VLC播放器播放单独的H.264文件是可以播放的。我使用UDP方式转发TS流也是可以在VLC播放器中正常播放的。
author: besovideo    time: 2016-2-24 15:12
是标准H.264
author: fanghj90    time: 2016-2-24 15:20
fsx92 发表于 2016-2-24 13:46
我查看了pCodec.eCodecID的值为H.264格式,请问是标准的H.264封装吗?我收到数据后通过UDP转发出去,然后 ...

是标准的h.264封装。您保存到.h264文件中,试试能不能播放,但流中不一定有 sps 和 pps, 因为pCodec.pExtraData中有 sps和pps帧
author: fanghj90    time: 2016-2-24 15:26
fsx92 发表于 2016-2-24 13:46
我查看了pCodec.eCodecID的值为H.264格式,请问是标准的H.264封装吗?我收到数据后通过UDP转发出去,然后 ...

在每个关键帧发送前,发送下pCodec.pExtraData(H264帧)试试能不能播放, 部分设备因为SDP中上报了sps\pps,将流中sps、pps帧就去掉了。
author: fsx92    time: 2016-2-25 11:46
fanghj90 发表于 2016-2-24 15:26
在每个关键帧发送前,发送下pCodec.pExtraData(H264帧)试试能不能播放, 部分设备因为SDP中上报了sps\p ...

我已经尝试过你说的方法,在关键帧前面加pCodec.pExtraData,存入文件等都不能播放。同时还测试了在每包数据前加0x00 0x00 0x00 0x01也不能播放。请问你们对SDK中afterRecv()接收到的数据做过类似的测试吗?需要对数据如何处理才能正常播放呢?
author: fanghj90    time: 2016-2-25 11:54
fsx92 发表于 2016-2-25 11:46
我已经尝试过你说的方法,在关键帧前面加pCodec.pExtraData,存入文件等都不能播放。同时还测试了在每包 ...

afterRecv()接口做过测试的,同时有客户通过该接口,使用他们自己的解码器做解码播放。您的服务器地址和设备是什么? 我们登录上去,测试下该接口数据。
author: fsx92    time: 2016-3-23 14:36
通过Session向服务器发送BVCU_SUBMETHOD_PU_LIST命令后,从_BVCU_Command的回调函数函数void (*OnEvent)(BVCU_HSession hSession, BVCU_Command* pCommand, int iEventCode, void* pParam)收到异步消息。然后从BVCU_CmdMsgContent获取信息,BVCU_CmdMsgContent.iDataCount的值为7,而我的实际设备个数为14。同时BVCU_CmdMsgContent.pNext为NULL。
求解。。。
author: fanghj90    time: 2016-3-23 14:44
fsx92 发表于 2016-3-23 14:36
通过Session向服务器发送BVCU_SUBMETHOD_PU_LIST命令后,从_BVCU_Command的回调函数函数void (*OnEvent)(BV ...

您好,命令的回复可能是分段的,BVCU_Event_SessionCmd.iPercent 表示命令完成进度。BVCU_SUBMETHOD_PU_LIST命令设备多时可能会多次回调void (*OnEvent)(), 可以参考BVCU SDK MFC Demo里的命令回调处理。

author: fanghj90    time: 2016-3-23 14:48
fsx92 发表于 2016-3-23 14:36
通过Session向服务器发送BVCU_SUBMETHOD_PU_LIST命令后,从_BVCU_Command的回调函数函数void (*OnEvent)(BV ...

目前只有BVCU_SUBMETHOD_PU_LIST可能会由于回复数据大,服务器分段发送,客户端会多次回调通知。你测试下,看看是不是 多次回复了
author: fsx92    time: 2016-3-23 15:52
fanghj90 发表于 2016-3-23 14:48
目前只有BVCU_SUBMETHOD_PU_LIST可能会由于回复数据大,服务器分段发送,客户端会多次回调通知。你测试下 ...

经过测试,iPercent的值不论在数据正常或异常的情况下,都为99。但确实发现了,数据是分两批发过来的,每批7个终端。请问我怎么区分数据只有一批还是多批?
2016-03-23 15:44:34[INFO] -> Pu Count: 7 > Has Next: false > Percent: 99
2016-03-23 15:44:34[INFO] -> Send Message To Unisky Server:
<?xml version="1.0" encoding="UTF-8"?>
<Push>
    <Pu id="PU_21120895" name="????4G??-S1" status="0"/>
    <Pu id="PU_21122794" name="????4G??-S1" status="0"/>
    <Pu id="PU_21124028" name="????4G??-S1" status="0"/>
    <Pu id="PU_21122676" name="????4G??-S1" status="1"/>
    <Pu id="PU_21121634" name="????4G??-S1" status="0"/>
    <Pu id="PU_21124057" name="????4G??-S1" status="0"/>
    <Pu id="PU_21123986" name="????4G??-S1" status="0"/>
</Push>

2016-03-23 15:44:34[INFO] -> Pu Count: 7 > Has Next: false > Percent: 99
2016-03-23 15:44:34[INFO] -> Send Message To Unisky Server:
<?xml version="1.0" encoding="UTF-8"?>
<Push>
    <Pu id="PU_21124061" name="????4G??-S1" status="0"/>
    <Pu id="PU_21123969" name="????4G??-S1" status="0"/>
    <Pu id="PU_21122786" name="????4G??-S1" status="0"/>
    <Pu id="PU_21122498" name="????4G??-S1" status="0"/>
    <Pu id="PU_21120279" name="????4G??-S1" status="0"/>
    <Pu id="PU_21120314" name="????4G??-S1" status="0"/>
    <Pu id="PU_21123742" name="?????4G??-S1" status="0"/>
</Push>
author: fanghj90    time: 2016-3-23 16:08
fsx92 发表于 2016-3-23 15:52
经过测试,iPercent的值不论在数据正常或异常的情况下,都为99。但确实发现了,数据是分两批发过来的,每 ...

不会一直99的,最后会有一个100的回调,数据负载长度为0。




欢迎光临 mobile CCTV,mobile surveillance,police body worn cameras (http://bbs.besovideo.com:8067/) Powered by Discuz! X3.2