做过海康视频卡视频采集的朋友,请进来指点一下

时间:2022-01-26 03:23:20
HANDLE ChannelHandle[24];

void __fastcall TFormVideo::FormCreate(TObject *Sender)
{
    int iTotalDSPs = InitDSPs();  //卡初始化
    if(iTotalDSPs  <= 0)
    {
        ShowMessage("视频压缩卡初始化失败!");
        return;
    }
    for(int i=0; i<iTotalDSPs; i++)  //打开通道
        ChannelHandle[i] = ChannelOpen(i);
    for(int i=0; i<iTotalDSPs; i++)  //流类型设置为只采集视频
SetStreamType(ChannelHandle[i],1);

    SetEncoderPictureFormat(ChannelHandle[0], ENC_DCIF_FORMAT);  //设置编码方式(这里只设了第一个通道,默认设置为DCIF)

//下面一段是从VC例子上找的,不太清楚
//    SetupNotifyThreshold(ChannelHandle[0], 3);
//    unsigned int MsgDataReady = RegisterWindowMessage("data ready");
//    RegisterMessageNotifyHandle(Handle,MsgDataReady);
//    SetOverlayColorKey(RGB(10, 10, 10));

    TRect rc;
    rc = Panel1->ClientRect;
    StartVideoPreview(ChannelHandle[0],Panel1->Handle,&rc,false,vdfYUV422Planar,25);
}

我第一次做视频采集,之前完全没有一点概念。以上都是直接从海康网站上下了个SDK,然后摸索着做的,但图像就是出不来。海康的DEMO程序能正确显示图像,所以硬件肯定没问题的。

对了,卡初始化,打开通道,StartVideoPreview等函数执行时返回0(即执行正确),Panel1颜色设置为0xFFFFFFFF

最好能提供给我一点例子代码,这里先谢过了!

13 个解决方案

#1


我用控件能够采集摄像头的视频
海康的没做过,不懂
帮挺一下

#2


以前做过品尼高电视卡的视频采集,全部使用WINDOWS函数就能够支持了!!

你要用SDK来做二次开发?这个就复杂多了!!

#3


初始化
int i, j; 

Init_Video = InitDSPs()
For (i = 0; i<(GetTotalDSPs() - 1);i++)
{
    ChannelHandle(i) = ChannelOpen(i)
    j = SetVideoStandard(ChannelHandle(i), &H2)
    j = SetEncoderPictureFormat(ChannelHandle(i), &H0)
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False
ChannelValue = 0

#4


只用过控件或是api

#5


heart119(越陷越深)

初始化
int i, j; 

Init_Video = InitDSPs(); 
For (i = 0; i<(GetTotalDSPs() - 1);i++)  //不能GetTotalDSPs()-1吧,通常一张卡只初始化一个DSP,你这样写该循环一次也没执行。
{
    ChannelHandle(i) = ChannelOpen(i)  //ChannelHandle[i]
    j = SetVideoStandard(ChannelHandle(i), &H2)  //H2在哪赋值的?
    j = SetEncoderPictureFormat(ChannelHandle(i), &H0)  //H0又是哪冒出来的?
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False  //VideoFlag哪冒出来的?干么用
ChannelValue = 0  //同上

能贴完整点吗,再则,感觉你这个也太随便了,ChannelHandle(i)显然不对。这样的回答有何意义

#6


我做过视频的二次开发
主要是先初始化卡
然后定义一个矩形,把视频流放到矩形上显示

#7


我以前也做过品尼高的,同意楼上的

#8


if(InitDSPs() <= 0){
//afxDump<<"error:can not init DSPs\n";
ShowMessage("can not init DSPs\n");
}

for(int i = 0; i < GetTotalDSPs(); i++) {
ChannelHandle[i] = ChannelOpen(i);
SetupNotifyThreshold(ChannelHandle[i], 3);
gFileHandle[i] = -1;
}
方法和楼上说的一样啊。先初始化板卡,然后,定义一个矩形区域显示视频流。

#9


我也是这样写的啊:
    if(InitDSPs() <= 0)  //卡初始化
    {
        ShowMessage("视频压缩卡初始化失败!");
        return;
    }
    for(int i = 0; i < GetTotalDSPs(); i++)
    {
ChannelHandle[i] = ChannelOpen(i);  //打开所有可使用的通道
SetEncoderPictureFormat(ChannelHandle[0], ENC_DCIF_FORMAT);
SetupNotifyThreshold(ChannelHandle[i], 3);  
    }
    TRect rc;  
    rc = Panel1->ClientRect;  //定义矩形区域,即为Panel1的全部
    StartVideoPreview(ChannelHandle[0],Panel1->Handle,&rc,false,vdfYUV422Planar,25);  //开始视频预览

但图像就是出不来,而它的DEMO程序图像能出来。请帮我诊断一下上面的代码

#10


能把你们做过的发一个给我么?万分感谢!!!!!!!
hu_zb49@163.com

#11


你还需要调用它的另外一个函数
设置显示模式
有两种模式
另外还要看它对显示器的分辨率有没有要求

#12


g_MRgnID = -1 ;          //初始化
    t_bFull = true ;
    sapiDeviceInit(1) ;
    int ret = sapiDisplayCreate();
    if(ret<0)
    {
    ShowMessage("显示,模式不对!");
    return;
    }
    if(ret==0)
    {
m_bOverlay = true;
    }
    if(ret==1)
{
m_bOverlay = false;
}
    isPAL = sapiIsPal(0) ;

    RECT Rcm, Rc ;  //显示
    GetWindowRect(Panel1->Handle, &Rcm) ;
    Rc.left = 2 ;
    Rc.top = 2 ;
    Rc.right=Rcm.right - Rcm.left - 2 ;
    Rc.bottom=Rcm.bottom - Rcm.top - 2 ;

    sapiSetVideoPreviewSource(0, COMPOSITE1);
    if(m_bOverlay)
         g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, OVERLAYNOBUF) ;
    else
         g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, PRIMARYNOBUF) ;
         
    iSRgnID = sapiCreateSubDispRgnInMainRgn(g_MRgnID, &Rc) ;
    sapiStartPreview(0, 0, g_MRgnID, iSRgnID, isPAL) ;

#13


解决了,把Pannel1的背景色改成255,0,255就OK了,靠,把我累个半死!
谢谢各位!

#1


我用控件能够采集摄像头的视频
海康的没做过,不懂
帮挺一下

#2


以前做过品尼高电视卡的视频采集,全部使用WINDOWS函数就能够支持了!!

你要用SDK来做二次开发?这个就复杂多了!!

#3


初始化
int i, j; 

Init_Video = InitDSPs()
For (i = 0; i<(GetTotalDSPs() - 1);i++)
{
    ChannelHandle(i) = ChannelOpen(i)
    j = SetVideoStandard(ChannelHandle(i), &H2)
    j = SetEncoderPictureFormat(ChannelHandle(i), &H0)
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False
ChannelValue = 0

#4


只用过控件或是api

#5


heart119(越陷越深)

初始化
int i, j; 

Init_Video = InitDSPs(); 
For (i = 0; i<(GetTotalDSPs() - 1);i++)  //不能GetTotalDSPs()-1吧,通常一张卡只初始化一个DSP,你这样写该循环一次也没执行。
{
    ChannelHandle(i) = ChannelOpen(i)  //ChannelHandle[i]
    j = SetVideoStandard(ChannelHandle(i), &H2)  //H2在哪赋值的?
    j = SetEncoderPictureFormat(ChannelHandle(i), &H0)  //H0又是哪冒出来的?
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False  //VideoFlag哪冒出来的?干么用
ChannelValue = 0  //同上

能贴完整点吗,再则,感觉你这个也太随便了,ChannelHandle(i)显然不对。这样的回答有何意义

#6


我做过视频的二次开发
主要是先初始化卡
然后定义一个矩形,把视频流放到矩形上显示

#7


我以前也做过品尼高的,同意楼上的

#8


if(InitDSPs() <= 0){
//afxDump<<"error:can not init DSPs\n";
ShowMessage("can not init DSPs\n");
}

for(int i = 0; i < GetTotalDSPs(); i++) {
ChannelHandle[i] = ChannelOpen(i);
SetupNotifyThreshold(ChannelHandle[i], 3);
gFileHandle[i] = -1;
}
方法和楼上说的一样啊。先初始化板卡,然后,定义一个矩形区域显示视频流。

#9


我也是这样写的啊:
    if(InitDSPs() <= 0)  //卡初始化
    {
        ShowMessage("视频压缩卡初始化失败!");
        return;
    }
    for(int i = 0; i < GetTotalDSPs(); i++)
    {
ChannelHandle[i] = ChannelOpen(i);  //打开所有可使用的通道
SetEncoderPictureFormat(ChannelHandle[0], ENC_DCIF_FORMAT);
SetupNotifyThreshold(ChannelHandle[i], 3);  
    }
    TRect rc;  
    rc = Panel1->ClientRect;  //定义矩形区域,即为Panel1的全部
    StartVideoPreview(ChannelHandle[0],Panel1->Handle,&rc,false,vdfYUV422Planar,25);  //开始视频预览

但图像就是出不来,而它的DEMO程序图像能出来。请帮我诊断一下上面的代码

#10


能把你们做过的发一个给我么?万分感谢!!!!!!!
hu_zb49@163.com

#11


你还需要调用它的另外一个函数
设置显示模式
有两种模式
另外还要看它对显示器的分辨率有没有要求

#12


g_MRgnID = -1 ;          //初始化
    t_bFull = true ;
    sapiDeviceInit(1) ;
    int ret = sapiDisplayCreate();
    if(ret<0)
    {
    ShowMessage("显示,模式不对!");
    return;
    }
    if(ret==0)
    {
m_bOverlay = true;
    }
    if(ret==1)
{
m_bOverlay = false;
}
    isPAL = sapiIsPal(0) ;

    RECT Rcm, Rc ;  //显示
    GetWindowRect(Panel1->Handle, &Rcm) ;
    Rc.left = 2 ;
    Rc.top = 2 ;
    Rc.right=Rcm.right - Rcm.left - 2 ;
    Rc.bottom=Rcm.bottom - Rcm.top - 2 ;

    sapiSetVideoPreviewSource(0, COMPOSITE1);
    if(m_bOverlay)
         g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, OVERLAYNOBUF) ;
    else
         g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, PRIMARYNOBUF) ;
         
    iSRgnID = sapiCreateSubDispRgnInMainRgn(g_MRgnID, &Rc) ;
    sapiStartPreview(0, 0, g_MRgnID, iSRgnID, isPAL) ;

#13


解决了,把Pannel1的背景色改成255,0,255就OK了,靠,把我累个半死!
谢谢各位!