directshow是什么_showpoint

directshow是什么_showpoint1.DirectShow介绍DirectShow是一个windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,同时支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。DirectShow整合了其它的DirectX技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。DirectShow大大简化了媒体回放、格式转换和采集工作。但与此同时,它也为用户自定义的解决方…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1. DirectShow介绍

    DirectShow是一个windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,同时支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。DirectShow整合了其它的DirectX技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。

    DirectShow大大简化了媒体回放、格式转换和采集工作。但与此同时,它也为用户自定义的解决方案提供了底层流控制框架,从而使用户可以自行创建支持新的文件格式或其它用途的DirectShow组件。

    以下是几个使用DirectShow编写的典型应用:

DVD播放器

视频编辑应用

AVI到ASF转换器

MP3播放器

数字视频采集

    DirectShow是建立在组件对象模型(COM)上的,因此当你编写DirectShow应用时,你必须具备COM客户端程序编写的知识。对于大部分的应用,你不需要实现自己的COM对象,DirectShow提供了大部分你需要的DirectShow组件,但是假如你需要编写自己的DirectShow组件,你还需要具备编写COM组件的知识。

1.1. DirectShow支持的格式

    DirectShow是一个开放的框架,因此只要有合适的filter来分析和解码,它可以支持任何格式。DirectShow默认支持以下的文件类型和压缩格式:
    注:打*号的需要Windows Media Format SDK支持
    文件类型:

      Windows Media Audio (WMA)*
      Windows Media Video (WMV)*
      Advanced Systems Format (ASF)*
      Motion Picture Experts Group (MPEG)
      Audio-Video Interleaved (AVI)
      QuickTime (version 2 and lower)
      WAV
      AIFF
      AU
      SND
      MIDI

    压缩格式:

      Windows Media Video*
      ISO MPEG-4 video version 1.0*
      Microsoft MPEG-4 version 3*
      Sipro Labs ACELP*
      Windows Media Audio*
      MPEG Audio Layer-3 (MP3) (decompression only)
      Digital Video (DV)
      MPEG-1 (decompression only)
      MJPEG
      Cinepak

    微软自己没有提供MPEG2解码器,一些可用的DirectShow MPEG2硬件或软件解码器是由第三方提供的。

1.2. 常见问题集(摘录)

1.2.1. 一般问题

    *DirectShow支持哪些操作系统?
      DirectShow支持Windows9X、Windows2000、Windows Me和Windows XP。
   
    *使用DirectShow需要多少COM知识?
      应用程序开发者只需要基本的COM组件知识:实例化COM组件、调用接口、管理接口的引用计数。Filter开发者则需要更多。
     
    *有与DirectShow兼容的硬件列表(HCL)吗?
      没有。如果硬件兼容DirectShow,DirectShow会使用它们,如果没有兼容的硬件,DirectShow使用GDI绘制视频,以及使用WaveOut系列多媒体API来播放音频。
     
    *可以使用哪些语言来编写DirectShow应用?
      DirectShow主要为C/C++开发设计。Visual Basic只能使用其中的很小一部分。可以通过MS JScript或VB Script来支持基于脚本的DVD和TV应用。也可能用Delphi来编写,但SDK文档不提供这方面的内容。
     
    *DirectShow会通过托管代码实现吗?
      目前还没有这个计划。DirectX SDK提供了有限的使用音视频回放类的托管回放功能,你可以使用COM interop创建托管代码的DirectShow客户端应用,但是因为性能上的原因,不推荐创建运行在CLR上的filter。

    *DirectShow开发需要什么样的编译器?
      任何能够产生COM对象的编译器都可以。
     
    *DirectShow和DirectX的其它组件的关系
      DirectShow和DirectX的其它组件在内部进行联系。DirectShow在硬件的支持下使用DirectSound和DirectDraw。Video Renderer和Overlay Mixer使用DirectDraw 3和DirectDraw5表面(surfaces)。Video Mixing Renderer 7(只支持WINXP)使用DirectDraw7表面。Video Mixing Renderer 9使用最新的(目前是Directx9)Direct3D API函数。即便是某个应用程序包含了DirectX其它组件,你也不必使用其它组件的API去编写它。参考SDK的例子:Texture3D Sample。
     
    *DirectShow与ActiveMovie的关系?
      ActiveMovie是DirectShow原来的名称,现已不再使用,但是一部分API仍保留了”AM”的前缀,比如AM_MEDIA_TYPE和IAMVideoAccelerator。
     
    *DirectShow是限于多媒体应用吗?
      DirectShow默认包含的组件主要是为音视频流设计的,但是,DirectShow框架已经成功地用于其它数据流的解决方案中。
     
    *GraphEdit工具有源码吗?GraphEdit.exe是否可再发布?
      没有源码,不可再发布。
     
    *DMO可以代替DirectShow filter吗?
      在编写编码器、解码器、效果器应用时,鼓励用DMO代替DirectShow filter。在其它的应用中,使用DirectShow filter可能会比较合适。     

1.2.2. 程序编写问题

    *如何设置编译环境,需要哪些头文件和库?
      参考”设置编译环境”章节
     
    *GraphEdit列示了很多没有文档支持的filter,它们都是些什么?
      GraphEdit枚举了所有作为filter类型注册在系统中的filter,包括由第三方应用程序安装的filter,以及其它微软技术如Windows Media或NetMeeting安装的,另外,一些DirectShow filter被用来做硬编码或硬解码驱动的外壳。Microsoft H.263 Video Codec用于NetMeeting,不再被DirectShow支持。
   
    *如何知道DirectShow已经被安装?
      调用CoCreateInstance创建一个Filter Graph Manager实例,如果成功,表示DirectShow已经被安装,下面是一个例子:
         

 IGraphBuilder *pGraph;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
             NULL, CLSCTX_INPROC_SERVER,
             IID_IGraphBuilder, (void **) &pGraph);

    *如果不通过属性设置页来更改filter的设置?
      当然是通过filter提供的接口罗。如果没有提供,就没有办法啦
     
    *DirectShow能通知应用程序当前回放位置吗?
      不提供回调来通知位置,需要使用一个计时器定时调用IMediaSeeking::GetCurrentPosition方法来得到当前回放位置。
     
    *filter运行在哪个特权级别下?
      运行在Ring 3特权级别下,某些流控制驱动(如音视频采集驱动)运行在Ring 0特权级别下。
     
    *需要一个Kernel调试器吗?
      这依据具体的项目。安装DirectX调试运行时库(DirectX debug runtime library)意味着安装调试驱动(Debug driver)和其它核心组件(kernel mode component),因此如果你的应用程序在其中的某个组件中产生了一个调试断言(debug assert),你的机器就会自动重启除非你拥有一个kernal调试器。
     
    *DEFINE_GUID宏是怎么工作的?
      使用DEFINE_GUID宏可以让你通过包含同一个头文件来定义GUID值而不必使用extern关键词。比如,你的工程中有三个源文件:src1.cpp,src2.cpp,src3.cpp,它们都使用一个相同的GUID值,而为了保证一致性,这个GUID只能在你的工程中定义一次,这时,其它的源文件必须定义外部引用来使用它。用了DEFINE_GUID,你可以使用在所有源文件中包含同一个头文件,在头文件中这样定义GUID:

DEFINE_GUID(CLSID_MyObject,
         0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);

            这个例子中GUID为0,实际编程中请用Guidgen工具来产生一个GUID,在其中的一个源文件中,在你的头文件前包含initguid.h,如:

  // Src1.cpp
 #include 
 #include “MyGuids.h”
      
 // Src2.cpp
 #include “MyGuids.h” 

 // Src3.cpp
 #include “MyGuids.h”

在没有包含Initguid.h的地方,DEFINE_GUID宏创建外部引用来使用GUID值,在包含Initguid.h的地方,DEFINE_GUID重定义DEFINE_GUID宏以产生GUID的定义。
 如是没有在任何地方添加Initguid.h,你会得到一个链接错误:”unresolved external symbol.” ,如果同样的GUID包含Initguid.h两次,会得到编译错误”redefinition; multiple initialization.”要解决这些问题,请确认Initguid.h只包含一次。同样的,不要包含Initguid.h到预编译头文件中去,因为预编译头文件会被每个源文件包含。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182697.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 构建LAMP架构_lamp和lnmp区别

    构建LAMP架构_lamp和lnmp区别LAMP架构LAMP架构简介Apache简介编译安装Apache编译安装Mysql编译安装PHP编译安装phpMyadminLAMP架构简介LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词,具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP(或Perl、Python)网页编程语言。Apache简介ApacheHTTPServer是开源软件项目的杰出

  • 彻底理解vue的钩子函数,vue的生命周期理解,什么是vue的生命周期,钩子函数

    官方图(官方的图大家总是理解不了):使用vue框架,需要在合适的时机做合适的事情,了解了vue对象的生命周期和钩子函数,才能知道,哪些事情应该咋哪个函数里做。一、vue的生命周期的理解生命周期用人举例说明:生命周期就是一个人的一生,此处我需要说的没有人情一点(哈哈)。从人的出生,到成长,到工作,到死亡,就是人的一生,也叫一个人的生命周期。2….

  • base编码器_base100编码

    base编码器_base100编码Base64编码是一种基于64个可打印字符来表示二进制数据的方法。目前Base64已经成为网络上常见的传输8位二进制字节代码的编码方式之一。为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如:传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制。图片的二进制流的每个字节不可能全部是可…

  • java cloneable_java.lang.Cloneable的理解「建议收藏」

    java cloneable_java.lang.Cloneable的理解「建议收藏」以前也用过这个接口,那时是直接所有的东西都自己写了,也没发现问题。最近无意间发现这个接口的实现并不是想象中的那样,所以稍微研究了下,给大家分享一下。步骤:1、建立两个简单的POJO:Teacher和Student2、Teacher类实现了Cloneable接口,重写clone方法3、在main方法中建立teacher,然后clone,比较teacher和clone出来的teacherTeacher…

    2022年10月14日
  • Office2007版本详情

    Office2007版本详情1、各版本功能对比2、各版本下载地址2.1MicrosoftOfficeStandard2007MSDN中文标准版下载和激活2.1.1下载下载地址ed2k://|file|zh-hans_office_standard_2007_x86_cd_x12-18931.iso|528621568|8BC9FD5DB21A3A93E10EF151BE6EF229|/文件名zh-hans_office_standard_2007_x86_cd_x12-18931.i…

  • 对 FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP 的理解

    对 FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP 的理解为了看得更清晰,以下使用代称newtask:FLAG_ACTIVITY_NEW_TASKcleartop:FLAG_ACTIVITY_CLEAR_TOPsingletop:FLAG_ACTIVITY_SINGLE_TOP文章目录default单独singletop单独cleartopcleartop+singletopnewtask单独newtasknewtask+sin…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号