您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VC > 正文
DirectShow应用——支持数码摄像机
[文章信息]
作者:
时间:2004-02-06
出处:hqtech
责任编辑:方舟
[文章导读]
如何将DV数码摄像机拍在磁带上的视频内容,转成媒体文件,乃至刻成光盘,是个值得探讨的问题
advertisement
热点推荐
· 11.10软件精选 FW实用设计
· IE最新安全漏洞补救几大措施
· M牛的网络生活之下载篇
· Norton Ghost 9.0全新体验
· InstallShield简明使用教程之前言
[正文]
天极IT资讯短信服务 电脑小技巧
资费:包月5元
手机:
介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。


  DV数码摄像机(以下简称DV机),随着人民生活水平的不断提高,正逐步进入百姓家庭中。如何将拍在磁带上的视频内容,转成媒体文件,乃至刻成光盘,是个值得探讨的问题,也是一件很有意思的问题。还好,因为我们选择了DirectShow,这一切看起来是那么的简单!

  DV机通过1394接口与电脑相连(如果你的电脑没有1394接口的话,需要装一张1394转接卡);支持即插即用。使用DirectShow的一个工具软件GraphEdit,我们可以在“Video Capture Sources”目录下看到一个名为“Microsoft DV Camera and VCR”的Filter,即代表我们的DV机。微软提供的DV相关的Filter还有DV Splitter、DV Video Decoder、DV Video Encoder、DV Muxer等。DV数据,视频采用帧内压缩,音频仍然为PCM格式,采用交叉的方式来存储;PAL制的图像大小为720x576,单帧为144000字节,NTSC制的图像大小为720x480,单帧为120000字节;所以DV数据保存为文件,文件还是很大的。

  一般DV数据可以直接保存到AVI文件中。有两种格式,一种格式(Type-1)仍然将音视频按DV原有的交叉格式保存,另一种格式(Type-2)将DV数据的音视频分开后再保存(这种格式视频部分其实仍然带有音频的冗余数据)。两种格式各有优缺点:Type-1可以节省CPU使用时间,适合实时捕捉的场合;而Type-2保持了对VFW的向后兼容性。

  接下去,我们来看一下如何来创建我们的DV应用程序。第一步,如何通过程序去控制DV机?DV机可以有两种工作模式,一种是摄像模式,一种是回放模式。我们这里说的“控制”,主要是指如何控制DV机对磁带的一系列操作(如播放、暂停、快进、快退、停止等)。答案很简单,主要是通过DV Filter上的IAMExtTransport接口来实现的。(需要提醒一下的是,创建DV Filter,必须通过系统枚举器枚举视频捕捉设备来完成;如何枚举系统设备,请参考DirectX帮助文档,这里不再赘述。)下面是获得这个接口的参考代码:

HRESULT hr;
IBaseFilter *pDVCam; // Pointer to the capture filter.
IAMExtTransport *pTransport;
// Create an instance of the capture filter (not shown).
hr = pDVCam->QueryInterface(IID_IAMExtTransport, (void **)&pTransport);

  获得这个接口后,我们就可以通过其接口方法put_Mode来实现对DV机播放的控制了。相应地,通过get_Mode也可以得到当前DV机的状态,如下:

LONG State;
hr = MyDevCap.pTransport->get_Mode(&State);
if (SUCCEEDED(hr))
{
switch (State)
{
case ED_MODE_PLAY: // playing
break;
case ED_MODE_STOP: // stopped
break;
case ED_MODE_FREEZE: // paused
break;
}
}

  除了IAMExtTransport接口外,还有其他两个控制接口:IAMExtDevice接口,可以获得DV机当前的工作模式,参考如下:

IAMExtDevice *pDevice;
hr = pDVCam->QueryInterface(IID_IAMExtDevice, (void **)&pDevice);
LONG lDeviceType = 0;
pDevice->GetCapability(ED_DEVCAP_DEVICE_TYPE, &lDeviceType, 0);
if (lDeviceType == ED_DEVTYPE_VCR)
{
// Device is a VCR. Enable all VCR functions.
}
else
{
// Device is a camera.
// Enable record and record-pause; disable other functions.
}

  IAMTimecodeReader接口,可以获得每一个DV帧的时间戳。

  第二步,我们就来看一下DV的各种实际应用场合。如下图:



  我们可以将DV Filter输出的DV数据直接以Type-1的方式保存为AVI文件。如上图所示,MSDV即为DV Filter,后面紧跟着接了一个Smart Tee Filter,将一路DV流分成了两路;这样,我们在写文件的同时又能够预览,一举两得。以上的Filter Graph结构,是在视频捕捉场合最常用的。当然,我们也可以将DV数据解码后再保存,如下图:



  其中,Infinite Pin Tee Filter的功能类似于Smart Tee,是SDK中提供的一个带有源码的Filter;两者的区别主要在于它们对输出数据的时间戳处理上不同。上面我们讲了两种从DV机上抓取数据的应用,那么,能不能将我们电脑上的媒体文件写到DV机的磁带上呢?答案是肯定的。请看如下参考图:



  这里假设我们的AVI文件包含的视频格式是DV。(如果不是DV格式,我们需要用DV Video Encoder将视频压缩成DV格式后,再往下连接。)我们还用到了DV Mux Filter,将音频和视频流交互打包成标准的DV帧,然后送到DV Filter进行录像。

  好了,讲到这,大家对DV的应用编程应该有所了解了吧?!更多的细节,还要参考DirectX的帮助文档,以及SDK中一个叫DVApp的例子,研究一下吧,可以加深理解哦!



·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载


发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • DirectShow应用——支持DVD播放
  • COM编程技术基础概述之七
  • COM编程技术基础概述之六
  • COM编程技术基础概述之五
  • COM编程技术基础之四
  • VIA驱动问题导致DVD刻录失败
  • [配置推荐]学生型闪龙配置
  • 11.10软件精选 FW实用设计
  • 精英主板全面迈进P5时代
  • 详解11月三大硬件杀手游戏及四大凶器
  • 选硬盘 用好希捷互动存储专家
  • NDS十大最受期待游戏
  • 中国星际个人联赛第6轮综述
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索