mobile CCTV,mobile surveillance,police body worn cameras

 forgetPW
 registerNow
search
Owner: meige
打印 prevThread nextThread

适配BVCSP.h接口出现问题

[copyURL]

11

主题

157

帖子

533

积分

advMem

Rank: 4

积分
533
61#
 Owner| poston 2019-6-20 11:38 | 显示全部楼层
yumengtao post on2019-6-20 09:12
请问 您在初始化 BVCSP库的时候启用的是TCP还是UDP,如果是UDP的话请改成TCP试一试。

登录时,是打开TCP sessionParam.iCmdProtoType = BVCU_PROTOTYPE_TCP;
reply agree Against

使用道具 report

11

主题

157

帖子

533

积分

advMem

Rank: 4

积分
533
62#
 Owner| poston 2019-6-20 15:03 | 显示全部楼层
实时图传功能,我们这边是一帧一帧的H265数据和aac数据,请问怎样赋值szMyselfAudio 和szMyselfVideo参数。
reply agree Against

使用道具 report

11

主题

157

帖子

533

积分

advMem

Rank: 4

积分
533
63#
 Owner| poston 2019-6-20 21:16 | 显示全部楼层
yumengtao post on2019-6-20 20:22
参数固定的话就直接写死在代码里。在onDialogCmd中填写。

1.一帧一帧的数据,每帧数据大小都不一样,onDialogCmd只会找一次,
2.onDialogCmd中填写固定参数后,向通道里写视频数据返回-65521,切换只传音频,向通道写入音频数据成功了,但是pc端声音是杂音。
reply agree Against

使用道具 report

11

主题

157

帖子

533

积分

advMem

Rank: 4

积分
533
64#
 Owner| poston 2019-6-20 21:17 | 显示全部楼层
meige post on2019-6-20 21:16
1.一帧一帧的数据,每帧数据大小都不一样,onDialogCmd只会找一次,
2.onDialogCmd中填写固定参数后,向 ...

bool init_AVParam(BVCSP_DialogParam *pParam,int iAVStreamDir)
    {

        /*audio send*/
            if(iAVStreamDir==5 || iAVStreamDir==4){
                    LOGD(" init_AVParam ----1");
                pParam->szMyselfAudio.codec = SAVCODEC_ID_AAC;
                LOGD(" init_AVParam ----2");
            pParam->szMyselfAudio.eSampleFormat = SAV_SAMPLE_FMT_S16;
            LOGD(" init_AVParam ----3");
            pParam->szMyselfAudio.iBitrate = 16000;
            LOGD(" init_AVParam ----4");
            pParam->szMyselfAudio.iChannelCount = 2;
            LOGD(" init_AVParam ----5");
            pParam->szMyselfAudio.iSampleRate = 16000;
            LOGD(" init_AVParam ----6");
            pParam->szMyselfAudio.pExtraData = reinterpret_cast<char*>(getMGBvcsp()->audioData);
            LOGD(" init_AVParam ----7");
            pParam->szMyselfAudio.iExtraDataSize = audioSize;
            }
        /*audio send*/

        /*video send*/
            if(iAVStreamDir==5 || iAVStreamDir==1){
            LOGD(" init_AVParam ----8");
//            pParam->szMyselfVideo.codec = SAVCODEC_ID_HEVC;
            LOGD(" init_AVParam ----9");
            pParam->szMyselfVideo.iHeight = 720;
            LOGD(" init_AVParam ----10");
            pParam->szMyselfVideo.iWidth = 1280;
            LOGD(" init_AVParam ----11");
            pParam->szMyselfVideo.iExtraDataSize = videoSize;
            LOGD(" init_AVParam ----12");
            pParam->szMyselfVideo.pExtraData = reinterpret_cast<char*>(getMGBvcsp()->videoData);
            }
        /*video send*/

        /*audio receive*/
        //默认
            LOGD(" init_AVParam ----13");
        pParam->szTargetAudio.codec = SAVCODEC_ID_G726;
        LOGD(" init_AVParam ----14");
        pParam->szTargetAudio.eSampleFormat = SAV_SAMPLE_FMT_FLTP;
        LOGD(" init_AVParam ----15");
        pParam->szTargetAudio.iBitrate = 16000;
        LOGD(" init_AVParam ----16");
        pParam->szTargetAudio.iChannelCount = 1;
        LOGD(" init_AVParam ----17");
        pParam->szTargetAudio.iSampleRate = 8000;
        LOGD(" init_AVParam ----18");
        /*audio receive*/
        return true;
    }
写入的参数赋值
reply agree Against

使用道具 report

11

主题

157

帖子

533

积分

advMem

Rank: 4

积分
533
65#
 Owner| poston 2019-6-20 21:18 | 显示全部楼层
meige post on2019-6-20 21:17
bool init_AVParam(BVCSP_DialogParam *pParam,int iAVStreamDir)
    {

向通道里写数据的代码:
//        typedef struct _BVCSP_VideoCodec
        //        {
        //            SAVCodec_ID codec; // 编码方式 SAVCODEC_ID_H264、SAVCODEC_ID_H265
        //            int iWidth; // 视频图像宽度。单位像素
        //            int iHeight; // 视频图像高度。单位像素
        //            char* pExtraData; //sps/pps/vps等打包的h264/h265帧数据(含0x00000001头)
        //            int   iExtraDataSize;   // pExtraData数据长度
        //        } BVCSP_VideoCodec;
        static void* writeVideoData(void* arg) {
//                getMGBvcsp()->dialog_param->szMyselfVideo.codec=SAVCODEC_ID_H265;
//                getMGBvcsp()->dialog_param->szMyselfVideo.iWidth=1280;
//                getMGBvcsp()->dialog_param->szMyselfVideo.iHeight=720;
                int currentSize =0;
                BVCSP_Packet packet;
                memset(&packet, 0, sizeof(packet));
                while(getMGBvcsp()->isOpenSession){
                        if(currentSize!=getMGBvcsp()->videoSize){
//                                getMGBvcsp()->dialog_param->szMyselfVideo.pExtraData = reinterpret_cast<char*>(getMGBvcsp()->videoData);
//                                getMGBvcsp()->dialog_param->szMyselfVideo.iExtraDataSize = getMGBvcsp()->videoSize;
                                packet.iDataType = BVCSP_DATA_TYPE_VIDEO;
                                packet.iDataSize = getMGBvcsp()->videoSize;
                                packet.pData = getMGBvcsp()->videoData;
                                BVCU_Result result = BVCSP_Dialog_Write(getMGBvcsp()->bvhDialog, &packet);
                                LOGD("BVCSP_Dialog_Write writeVideoData,BVCU_Result=%d ,videoSize=%d", result,getMGBvcsp()->videoSize);
                                currentSize=getMGBvcsp()->videoSize;
                        }
                        usleep(10000);
                }
                pthread_exit (NULL);
                if (getMGBvcsp()->thr[0] != 0) {
                        pthread_join(getMGBvcsp()->thr[0], NULL);
                }
        }
        //    typedef struct _BVCSP_AudioCodec
        //    {
        //        SAVCodec_ID codec; // 编码方式 SAVCODEC_ID_G726、SAVCODEC_ID_AAC
        //        int  iBitrate; // 波特率 32000、16000
        //        int  iChannelCount; // 声道数 1
        //        int  iSampleRate; // 采样率 8000
        //        SAV_SampleFormat eSampleFormat; // 采样精度 SAV_SAMPLE_FMT_S16
        //        char* pExtraData; // config字段解出的二进制数据(AAC音频编码时config有意义)。
        //        int   iExtraDataSize; // pExtraData数据长度
        //    } BVCSP_AudioCodec;
        static void* writeAudioData(void* arg) {
//                getMGBvcsp()->dialog_param->szMyselfAudio.codec = SAVCODEC_ID_AAC;
//                getMGBvcsp()->dialog_param->szMyselfAudio.iBitrate = 16000;
//                getMGBvcsp()->dialog_param->szMyselfAudio.iChannelCount = 2;
//                getMGBvcsp()->dialog_param->szMyselfAudio.iSampleRate = 16000;
//                getMGBvcsp()->dialog_param->szMyselfAudio.eSampleFormat =
//                                SAV_SAMPLE_FMT_S16;
                int currentSize = 0;
                BVCSP_Packet packet;
                memset(&packet, 0, sizeof(packet));
                while (getMGBvcsp()->isOpenSession) {
                        if (currentSize != getMGBvcsp()->audioSize) {
//                                getMGBvcsp()->dialog_param->szMyselfAudio.pExtraData =
//                                                reinterpret_cast<char*>(getMGBvcsp()->audioData);
//                                getMGBvcsp()->dialog_param->szMyselfAudio.iExtraDataSize =
//                                                getMGBvcsp()->audioSize;
                                BVCSP_Packet packet;
                                memset(&packet, 0, sizeof(packet));
                                packet.iDataType = BVCSP_DATA_TYPE_AUDIO;
                                packet.iDataSize = getMGBvcsp()->audioSize;
                                packet.pData = getMGBvcsp()->audioData;
                                BVCU_Result result = BVCSP_Dialog_Write(getMGBvcsp()->bvhDialog, &packet);
                                LOGD("BVCSP_Dialog_Write writeAudioData,BVCU_Result=%d,audioSize=%d", result,getMGBvcsp()->audioSize);
                                currentSize=getMGBvcsp()->audioSize;
                        }
                        usleep(10000);
                }
                pthread_exit (NULL);
                if (getMGBvcsp()->thr[2] != 0) {
                        pthread_join(getMGBvcsp()->thr[2], NULL);
                }
        }
reply agree Against

使用道具 report

11

主题

157

帖子

533

积分

advMem

Rank: 4

积分
533
66#
 Owner| poston 2019-6-21 10:44 | 显示全部楼层
yumengtao post on2019-6-21 09:34
第一部:
sps pps是否正确

dnfi
这是一帧的数据:https://pan.baidu.com/s/1Wi7eGcB_GLmbhC4Ef7zr1g 提取码:dnfi
reply agree Against

使用道具 report

11

主题

157

帖子

533

积分

advMem

Rank: 4

积分
533
67#
 Owner| poston 2019-6-21 11:51 | 显示全部楼层
yumengtao post on2019-6-21 11:31
请问你在 pParam->szMyselfVideo.pExtraData 中传递是视频帧而不是 pps sps是吗?

是的,pParam->szMyselfVideo.pExtraData传的是视频一帧的数据。
reply agree Against

使用道具 report

11

主题

157

帖子

533

积分

advMem

Rank: 4

积分
533
68#
 Owner| poston 2019-6-21 15:03 | 显示全部楼层
https://pan.baidu.com/s/1Mvu1BHuIgtG4L6HMDqjb4g 提取码:4y7n  这个是第一帧数据
我们这边只有第一帧有pps sps vps,但是这帧好像没有视频帧,请问如何赋值pParam->szMyselfVideo.pExtraData参数值。
我这边赋值第一帧数据,写入通道报-65535
reply agree Against

使用道具 report

11

主题

157

帖子

533

积分

advMem

Rank: 4

积分
533
69#
 Owner| poston 2019-6-24 09:26 | 显示全部楼层
meige post on2019-6-21 15:03
https://pan.baidu.com/s/1Mvu1BHuIgtG4L6HMDqjb4g 提取码:4y7n  这个是第一帧数据
我们这边只有第一帧有 ...

问下pParam->szMyselfVideo.pExtraData集体传入怎样的数据?
写入视频通道的数据包BVCSP_Packet 要求怎样的数据?
我这边试了您给的demo,数据能写成功,但是pc端没有声音和视频显示。
reply agree Against

使用道具 report

11

主题

157

帖子

533

积分

advMem

Rank: 4

积分
533
70#
 Owner| poston 2019-6-24 09:59 | 显示全部楼层
xuwei post on2019-6-24 09:27
以0x00 0x00 0x00 0x01为header,分别为header+vps+header+sps+header pps,参照标准对应下填入的参数对 ...

codecID 确定填写为SAVCODEC_ID_H265或是SAVCODEC_ID_HEVC。
reply agree Against

使用道具 report

creditRule

QQ|wireless surveillance

GMT+8, 2024-5-10 05:10 , Processed in 0.069338 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

QuickReply backToTop BackToList