应用支持数码摄像机计划
发布时间:2021-09-06 02:13:53
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 = ransport-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;
其中包括2018年韩国仁川冬奥会、2022年卡塔尔足球世界杯、2020年夏奥会申办(东京和多哈)。这一切均表明亚洲在世界体坛正发挥着举足轻重的作用。他在委员会会议上发言时表示 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的例子,研究一下吧,可以加深理解哦!
查看本文来源
用什么方法可以治疗腹泻南通医院妇科哪好
昆明男科治疗哪家好
- 上一页:应用支持播放物业
- 下一页:应用支持电视接收覆盖