mobile CCTV,mobile surveillance,police body worn cameras

标题: 音视频获取与命令下发 [打印本页]

author: WhatToLearn    time: 2020-7-31 18:51
标题: 音视频获取与命令下发
关于MFCDemo。我们需要对音视频数据需要再次进行处理,音视频数据怎么获取?
下发一些自定义命令,让安全帽播放特定的语音,该怎么做?
头一次做项目,希望能解答的详细一点

author: hardfire    time: 2020-7-31 20:34
这部分代码开源了,您下载编译先跑起来。
CUSDK for windows client, open source(32bit only),
https://github.com/besovideo/bvcusdk.git
author: WhatToLearn    time: 2020-7-31 22:17
hardfire post on2020-7-31 20:34
这部分代码开源了,您下载编译先跑起来。
CUSDK for windows client, open source(32bit only),
https:// ...

代码已经跑起来了,跟下发命令和音视频获取的部分在哪?代码看了快一周了,我只是稍微看懂了界面相关的部分,然后改了一下。
author: hardfire    time: 2020-8-1 09:44
下发命令估计没有。
但获取视频的肯定有啊,因为你能把视频显示出来啊。
你可以用设备模拟器当实际的设备用,如果你手边没有实际设备的话。
设备模拟器:
用安卓录传+公网对讲软件MCP APP(按公安部一所GA/T 947-2015单警视音频执法记录仪规范标准编写)来仿真实际4G图传设备(4G智能安全帽、4G执法记录仪、布控球、车载监控NVR/DVR、无人机HDMI 4G图传等)进行系统测试(录像-实时图传-公网对讲-定位轨迹-抓拍上传,并融合了公网对讲-警用微信-警讯发布,双向视频通话等功能),提供包含所有软件(服务器、客户端、SDK、用户手册、工具软件、固件等)的开放下载的网盘地址,熟悉平台操作,自建服务器平台等,全部开放免费下载使用:
http://www.besovideo.com/news/44.html
用手机浏览器直接下载:http://up.besovideo.com:7780/MCP.apk
MCP=MPU(执法仪947规范录传-编码+推流)+MCU(取流+解码,即手机客户端功能)+公网对讲PoC(双向视频对讲)+警用微信(警用多媒体通信,警讯发布文字-图片-文件-定位)

MCP APP使得您的安卓设备(手机)既可做4G摄像头发射视频图像供客户端浏览,亦可做客户端去浏览其它设备的实时视频,还兼有对讲机+类微信IM即时聊天+信息发布的功能

author: WhatToLearn    time: 2020-8-15 21:43
hardfire post on2020-8-1 09:44
下发命令估计没有。
但获取视频的肯定有啊,因为你能把视频显示出来啊。
你可以用设备模拟器当实际的设备 ...

您好,音视频流的处理是不是都封装在ManagedLayer.dll里了?我看例程里视频显示都是直接调用已经写好的方法。项目现在的需求是要对音视频做二次处理,该怎样做?
author: hardfire    time: 2020-8-16 18:33
有解码后的YUV BUFFER
author: WhatToLearn    time: 2020-8-17 23:52
hardfire post on2020-8-16 18:33
有解码后的YUV BUFFER

这是BVCU_DialogParam定义中的一行
BVCU_Result (*afterDecode)(BVCU_HDialog hDialog, SAVCodec_Context* pCodec, SAV_Frame* pFrame);
我在调用BVCU_Dialog_Open的地方,添加一行
dlgParam.afterDecode = afterDecode;
然后在BVCU_Result CMLibBVCU::afterDecode(BVCU_HDialog hDialog, SAVCodec_Context* pCodec,SAV_Frame* pFrame)
{
}
内部直接写对pFrame的处理过程是不是就可以了?此时*(*pFrame).ppData[0]是不是就是解码后的音视频数据?
author: fanghj90    time: 2020-8-18 10:14
WhatToLearn post on2020-8-17 23:52
这是BVCU_DialogParam定义中的一行
BVCU_Result (*afterDecode)(BVCU_HDialog hDialog, SAVCodec_Contex ...

http://bbs.besovideo.com:8067/fo ... tid=1293&page=2
author: WhatToLearn    time: 2020-8-22 20:01
每个通道的数据应该是按行顺序存储的吧,我引用的应该没错吧
BVCU_Result CMLibBVCU::afterDecode(BVCU_HDialog hDialog, SAVCodec_Context* pCodec, SAV_Frame* pFrame)
{
    //YUV转BGR,openCV默认BGR
    unsigned char Y, U, V;
    Mat frame(1080, 1920, CV_8UC3);
    for (int i = 0; i < 1080; i++)
        for (int j = 0; j < 1920; j++)
        {
            Y= *((*pFrame).ppData[0] + 1920 * i + j);
            U= *((*pFrame).ppData[1] + 960 * (i / 2) + (j / 2));
            V= *((*pFrame).ppData[2] + 960 * (i / 2) + (j / 2));
            frame.at<Vec3b>(i, j)[0] = unsigned char(1.164 * Y + 2.017 * U - 276.8);
            frame.at<Vec3b>(i, j)[1] = unsigned char(1.164 * Y - 0.392 * U - 0.823 * V + 135.6);
            frame.at<Vec3b>(i, j)[2] = unsigned char(1.164 * Y + 1.596 * V - 222.9);
        }
    imshow("camera", frame);
    waitKey(0);
    return BVCU_RESULT_S_OK;
}
author: WhatToLearn    time: 2020-9-17 20:51
pFrame里只有视频数据吗?音频数据在哪?
我运行时发现pframe->data[0],pframe->data[1],pframe->data[2]是视频的YUV数据,pframe->data[3]为NULL
author: besovideo    time: 2020-9-17 21:32
我印象中,视频帧跟音频帧是独立分离的,不是混在一起的。
author: WhatToLearn    time: 2020-9-19 18:04
我查看BVCU_DialogParam类创建的dlgParam对象,可以有3个函数指针,分别是afterRecv,afterDecode,afterRender,后两个的入参pFrame什么时候是音频数据?什么时候是视频数据?
音频数据要获取出来进行处理,怎么做?
author: besovideo    time: 2020-9-19 21:35
http://61.191.27.18:8081/doc.html
WEB SDK的文档和DEMO您都看过了吗?这个是最基础的,应该都有代码示例或者说明的。
其实,代码就是最好的文档。

author: WhatToLearn    time: 2020-9-23 18:59
besovideo post on2020-9-19 21:35
http://61.191.27.18:8081/doc.html
WEB SDK的文档和DEMO您都看过了吗?这个是最基础的,应该都有代码示例 ...

可是这不是Web端的文档吗?我现在用的代码是C++写的MFC程序,MFC程序获取音频应该可以做到吧,不需要再用Web吧
author: fanghj90    time: 2020-9-24 10:46
WhatToLearn post on2020-9-19 18:04
我查看BVCU_DialogParam类创建的dlgParam对象,可以有3个函数指针,分别是afterRecv,afterDecode,afterRend ...

您好,
afterRecv,afterDecode,afterRender回调的音频/视频类型,根据pCodec->eCodecID判断。
afterRecv收到的是编码后数据,
afterDecode收到的是原始数据(解码后的)
afterRender是渲染播放成功后回调的原始数据,同afterDecode,回调触发条件不同。
尽量不要在回调里处理数据,将数据拷贝到您的线程处理,否则耗时的视频数据处理,会影响底层库接收数据。
author: WhatToLearn    time: 2020-9-24 20:57
fanghj90 post on2020-9-24 10:46
您好,
afterRecv,afterDecode,afterRender回调的音频/视频类型,根据pCodec->eCodecID判断。
afterRec ...

线程还没有开,但有个问题,调试时发现pCodec->eCodecID一直是SAVCODEC_ID_H264。我在else里int i=1处打断点,程序不会跳到断点处。根据网上的资料,H264是只有视频数据没有音频数据的。这是什么情况?
开线程可以在Browse里面开吗?pFrame和pCodec是全局的吗?
BVCU_Result CMLibBVCU::afterDecode(BVCU_HDialog hDialog, SAVCodec_Context* pCodec, SAV_Frame* pFrame)
{
   
    static int count = 0;
    if (count >= 0)//用于丢帧,count>=n,每n+1帧丢n帧
    {
        count = 0;
        //thread t(AVDataAcquire, pCodec, pFrame);
        if ((*pCodec).eCodecID == SAVCODEC_ID_H264)
        {
            int height = (*pCodec).stVideoParam.iHeight, width = (*pCodec).stVideoParam.iWidth;
            int yStride = (*pFrame).iDataSize[0];
            //YUV420p
            Mat frame(height * 3 / 2, width, CV_8UC1);
            for (int i = 0; i < height; i++)
            {
                memcpy_s(frame.ptr(i), width, (*pFrame).ppData[0] + i * yStride, yStride);
            }
            for (int i = 0; i < height / 4; i++)
            {
                memcpy_s(frame.ptr(i + height), width, (*pFrame).ppData[1] + i * yStride, yStride);
            }
            for (int i = 0; i < height / 4; i++)
            {
                memcpy_s(frame.ptr(i + height * 5 / 4), width, (*pFrame).ppData[2] + i * yStride, yStride);
            }
            cvtColor(frame, frame, COLOR_YUV420p2RGB);
            imshow("camera", frame);
            waitKey(1);
        }
        else
        {
            int i = 1;
        }
    }
    else
    {
        count++;
    }
    return BVCU_RESULT_S_OK;
}




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