求助关于VC++开发,如何读取电视卡输入数据?

zjl3638656 2006-07-20 04:33:46
如何读取电视卡输入的如:频道,视频,音频等等的数据。如果用API怎么解决,有没有一些些好的控件或者函数,希望各位不吝赐教!谢谢~~
...全文
430 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjl3638656 2006-07-28
  • 打赏
  • 举报
回复
sxslyy(孤松傲雪) 的这片文章对我帮助挺大的,现在正在看directshow的内容,还有好多东西不懂,以后还要多多叨扰大家了~
xiaomatian 2006-07-25
  • 打赏
  • 举报
回复
记得VFW做视频采集比较简单,楼主可以去找找 VFW方面的资料看看
zjl3638656 2006-07-24
  • 打赏
  • 举报
回复
汗~
sxslyy 2006-07-24
  • 打赏
  • 举报
回复
DirectShow应用——支持电视接收
作者:出处:论坛责任编辑: 方舟 [ 2004-06-04 12:04 ]现在市面上的很多视频捕捉卡都带有电视接收功能(以下简称TV),比如ATI TV Wonder等
--------------------------------------------------------------------------------



  现在市面上的很多视频捕捉卡都带有电视接收功能(以下简称TV),比如ATI TV Wonder等。能够在电脑上接收电视(注意:本文提及的电视均指模拟电视),并且把电视节目保存到文件,这是件多么美妙的事情!所以,我们有必要来探讨一下这个问题。关于如何编写视频捕捉程序,笔者以前的一篇文章(《DirectShow应用——视频捕捉WDM Vs VFW》),已经作了较为详尽的介绍。本文的侧重点,在于介绍如何使用视频捕捉卡的TV功能。



  大家先来看一下,带有TV功能的Capture Filter Graph,实物参考图如下:



(点击放大)

  其中,橙色的Filter为Capture Filter,它前面有两个Crossbar用以切换输入端子(一张典型的捕捉卡有三个输入端子:AV端子、S-Video端子和TV端子),ATI TV Tuner即为本文要重点介绍的带有TV接收功能的Filter。TV Tuner的属性页如下:



  通过这个属性页界面,我们就可以选择频道来观看电视了!

  大家可能觉得,直接将TV Tuner的属性页暴露给用户,这种做法太不专业了!是的,下面我们就来看一下如何用程序来实现TV的上述控制功能。

  先来看一下Filter Graph的创建。大多数情况下,我们使用IGraphBuilder接口来实现。但对于视频捕捉应用,推荐使用ICaptureGraphBuilder2接口,它将大大简化我们的工作。我们可以通过接口方法ICaptureGraphBuilder2::SetFiltergraph设置我们已经创建的Filter Graph,然后,让ICaptureGraphBuilder2来完成其他繁琐的工作,比如加入Crossbar Filter、加入TV Tuner Filter、连接Capture Filter的各个Output pin等。而这些工作,都将随着ICaptureGraphBuilder2::RenderStream的调用自动完成,参考如下:

// Video:
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,
pCaptureFilter, NULL, NULL);
// Audio:
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Audio,
pCaptureFilter, NULL, NULL);

  Filter Graph创建完成后,我们接着需要通过Crossbar Filter的IAMCrossbar接口,来选择TV作为我们的输入端子(具体做法,参见SDK例子AmCap中实现的CCrossbar类)。再然后,我们就可以通过TV Tuner的一个接口去实现TV的控制功能,这个接口就是IAMTVTuner了。获得这个接口的方法不是找到这个Filter,然后调用QueryInterface,而是要用到ICaptureGraphBuilder2的另一个方法:FindInterface。参考如下:

IAMTVTuner *pTuner = NULL;
hr = pBuild->FindInterface(
&LOOK_UPSTREAM_ONLY, // Look upstream from pCap.
NULL, // No particular media type.
pCap, // Pointer to the capture filter.
IID_IAMTVTuner, (void**)&pTuner);
if (SUCCEEDED(hr))
{
// Use pTuner ...
pTuner->Release();
}

  关于模拟电视的一些常识,以及IAMTVTuner的各个接口方法的使用细节,请参考DirectX的帮助文档。笔者这里只介绍常用的几个接口方法,如下:

IAMTuner::put_CountryCode,设置电视接收的国家代码(中国是86);
IAMTuner::put_Mode,设置接收器是电视模式还是调频电台等模式;
IAMTVTuner::put_InputType,设置电视是天线输入还是有线电视输入;
IAMTVTuner::get_TVFormat,得到电视的制式是PAL、NTSC、SECAM;
IAMTVTuner::AutoTune,进行自动频道搜索。

  好了,大概介绍完了。使用这个Filter Graph,我们可以观看电视,也可以将电视捕捉下来生成文件保存。很容易吧?!其实这些都是DirectShow的功劳!
dzq138 2006-07-21
  • 打赏
  • 举报
回复
//连接设备驱动
BOOL CVideoCapture::ConnectToDriver(SHORT DriverIndex)
{
BOOL bRet = FALSE;
CAPTUREPARMS CapParms = {0};


if(DriverIndex>=MAX_VFW_DEVICES)
{

goto RET;
}


if (m_hWndCap==NULL||m_DriverIndex[DriverIndex]==-1)
goto RET;
capCaptureAbort(m_hWndCap);

if(!capDriverConnect(m_hWndCap, m_DriverIndex[DriverIndex]))
goto RET;


capCaptureGetSetup(m_hWndCap,&CapParms,sizeof(CapParms));
CapParms.vKeyAbort=0;
CapParms.fAbortLeftMouse = FALSE;
CapParms.fAbortRightMouse = FALSE;
CapParms.fYield = TRUE;
CapParms.fCaptureAudio=FALSE;
CapParms.wPercentDropForError = 100;
capCaptureSetSetup(m_hWndCap,&CapParms,sizeof(CapParms));
bRet=TRUE;
RET:

return bRet;
}
dzq138 2006-07-21
  • 打赏
  • 举报
回复
capCaptureGetSetup和capCaptureSetSetup宏得将捕获帧

G.729标准,视频压缩采用H.26
b971049 2006-07-21
  • 打赏
  • 举报
回复
mark
zjl3638656 2006-07-21
  • 打赏
  • 举报
回复
还有那个驱动索引DriverIndex到哪里去找,句柄m_hWndCap是怎么得到的,各位大大们千万不要因为太简单懒得动笔,小弟真心求教,谢谢拉~~
zjl3638656 2006-07-21
  • 打赏
  • 举报
回复
谢谢dzq138(钟添)大大的回复,由于在这方面比较菜,还有好多没有搞懂,希望能得到更多的帮助,连接设备驱动后用capCaptureSetSetup获取从电视卡输入的数据,怎么分辨出哪些是频道数据,哪些是视频数据呢?如果需要调台如何控制?



希望各位大大们能多多赐教,问题解决,另开贴加分!谢谢~~

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧