AMR全称Adaptive Multi-Rate,自适应多速率编码,主要用于移动设备的音频,压缩比比较大,但相对其他的压缩格式质量比较差,由于多用于人声,通话,效果还是很不错的。其具体的文件格式可以参考其他文章或RFC3267 RTP Payload Format for AMR and AMR-WB
AMR文件多用于NOKIA手机,其特点是由于采用了自适应多速率编码,使得文件的尽寸变得很小,是WAV文件的1/10甚至更小。因此,如果程序中能够使用AMR文件代替WAV文件,在部署的时候就会占用更小的存储空间。当然,得在音频质量和文件大小两个因素上进行权衡。
AMR文件不是Windows Mobile必须支持的文件格式,因此,要想在程序中对其进行解码播放有一定的困难。不过,由于AMR文件的广泛应用,大部分Windows Mobile手机的OEM厂商在出厂时都会选择第三方的解码器内置于手机当中,从而能够对其进行解码。因此,编程序来播放AMR文件是可行的。
我们在手机上双击AMR格式的音频文件,可以发现Windows Media Player可以对其播放,那至少可以说明手机中已经包含了相应的解码器,因此,拿出对付多媒体文件最便捷的工具——DirectShow。
声明三个接口指针
IGraphBuilder* m_pGraph;
IMediaControl* m_pControl;
IMediaEvent* m_pEvent;
获取接口地址
HRESULT hr= CoInitialize(NULL);
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&m_pGraph);
hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl);
hr = m_pGraph->QueryInterface(IID_IMediaEvent, (void **)&m_pEvent);
渲染文件至输出设备,播放语音
hr = m_pGraph->RenderFile(_T("\\存储卡\\7001102.amr"), NULL);
if (SUCCEEDED(hr))
{
hr = m_pControl->Run();
if (SUCCEEDED(hr))
{
long evCode;
m_pEvent->WaitForCompletion(INFINITE, &evCode);
m_pControl->Stop();
}
}
释放接口实例
if (m_pControl)
{
m_pControl->Release();
m_pControl=NULL;
}
if (m_pEvent)
{
m_pEvent->Release();
m_pEvent=NULL;
}
if (m_pGraph)
{
m_pGraph->Release();
m_pGraph=NULL;
}
CoUninitialize();
别忘了头文件和库文件:#include "dshow.h",strmiids.lib
以上程序略去了对失败的处理部分,使用时可自行加上,另外,有些手机中带的解码器具有版权保护,虽然媒体播放器可以调用这些Filter播放AMR文件,但其他程序则无法调用,因此,本文提供的方法就不再适用了,请读者根据自己的需求考虑别的方案。
分享到:
相关推荐
总的来说,使用DirectShow播放视频涉及到构建和管理过滤图,选择合适的解码滤镜,以及实现播放控制和事件处理。虽然DirectShow的学习曲线相对陡峭,但其灵活性和强大的功能使得它成为开发专业级多媒体应用的理想选择...
本篇文章将深入探讨如何利用DirectShow播放视频文件,通过命令行实现,以及如何从代码指定文件路径。 首先,我们要理解DirectShow的基本工作原理。DirectShow基于组件对象模型(COM)设计,它提供了许多预定义的...
这个"Directshow播放文件封装类---VideoPlayGraph(evr).zip"资源包含两个核心文件:VideoPlayGraph.cpp和VideoPlayGraph.h,它们很可能定义了一个C++类,用于简化使用DirectShow播放多媒体文件的过程。 在...
本篇将详细讲解如何使用`VC++ 2015`通过`DirectShow`来播放如AVI、WMA、MP4等常见视频格式。 `DirectShow`是微软公司推出的一个多媒体框架,它构建于`DirectX`之上,主要用于处理视频和音频流。`DirectShow`提供了...
本范例主要关注如何使用DirectShow来播放网络上的HTTP流媒体文件。 在DirectShow中,播放网络媒体文件的过程涉及以下几个核心概念: 1. **过滤器**:DirectShow的核心是过滤器(Filter),它们负责特定的媒体处理...
在本项目中,我们关注的是如何使用DirectShow从AVI文件中提取所有帧并将其保存为BMP图像文件。AVI(Audio Video Interleave)是一种常见的视频格式,而BMP则是Windows操作系统中的位图图像格式。 首先,要实现这个...
程序的界面是WPF做的,本程序通过将WinForm的Panel嵌入到WPF界面中,实现了用DirectShow.net开发技术播放视频的功能。比较简单,基本就是一个框架,另外,运行的时候需要DirectShow.net的lib。其中WinForm控件嵌入...
DirectShow广泛支持多种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等,使得多媒体文件的播放变得简单。同时,它集成了DirectDraw和DirectSound的技术,不仅支持DVD播放,还能进行视频的非线性编辑以及与数据摄像...
自己用C#写的DirectShow接口实现的媒体播放器,实现了播放、暂停、停止、快进、快退、播放列表、打开文件、将文件夹内所有媒体文件加入播放列表、音量控制、拖动进度条等功能。支持*.mpg;*.avi;*.flv;*.wma;*.mov;*....
通过这些头文件和库文件,开发者可以构建自己的DirectShow应用程序,实现如视频播放、视频捕获、音频处理等功能。同时,这些文件也适用于对DirectShow进行深入研究,理解其内部工作原理,以及如何优化和扩展其功能。...
标题“directshow 获取本地摄像头播放”涉及到的是使用DirectShow API来访问和播放本地计算机上的摄像头视频流。DirectShow是微软开发的一个多媒体框架,用于处理音视频数据,它提供了丰富的功能,包括捕获、编辑、...
在这个项目中,我们将探讨如何利用DirectShow结合MFC(Microsoft Foundation Classes)库来创建一个既能够播放视频文件,又可以捕获并播放摄像头视频的程序。 首先,了解DirectShow的基本概念至关重要。DirectShow...
本资源“商业编程-源码-使用DirectShow播放Mpeg等媒体类型.zip”提供了一套示例代码,帮助开发者理解如何使用DirectShow来播放Mpeg和其他媒体格式。 首先,DirectShow是DirectX的一部分,它包含了一系列的接口和类...
DirectShow Filter 编写是Windows平台上进行多媒体处理和流媒体播放的重要技术。在这个例程中,我们将探讨如何从文件直接读取数据,而非一次性将整个文件加载到内存中,这通常被称为异步读取。这个过程涉及到对...
在这个"基于DirectShow wav2mp3"的主题中,我们将探讨如何使用DirectShow库将.wav格式的音频文件转换为.mp3格式,以及转换过程中的参数选择和其他可能的转换方式。 1. **DirectShow基础知识**: - DirectShow是一...
在本场景下,我们讨论的是如何使用DirectShow在C#环境下播放MP3音频文件。DirectShow是Microsoft提供的一个组件,它整合了Windows Media Technologies,为开发者提供了高级别的媒体播放功能。 首先,你需要在你的C#...
基于微软的DirectShow.dll的二次开发 1.自动识别连接的摄像头跟麦克风且可以对...4.添加了视频和音频的压缩功能(酌情使用) 这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
DirectShow是微软提供的一种强大的API,用于构建高质量的媒体处理应用程序,包括视频采集、播放、编辑等。本篇文章将深入探讨如何在C#中使用DirectShow以及涉及到的COM(组件对象模型)知识。 首先,我们需要理解...
可以播放本地视频文件,也可以播放ftp上面的视频文件(wmv不支持,原因没找到)ftp://hztm:123456@192.168.1.140/3.avi。 网上找的大部分是只能播放解码回调avi格式的视频,这个找了很多资料,然后问了一些朋友才修改...
总的来说,通过这个项目,开发者不仅可以学习如何使用DirectShow播放AVI视频,还可以掌握如何进行屏幕截图和文件操作,以及理解VC项目结构和DirectShow的滤镜图(Filter Graph)构建。这对于想要在VC环境下开发...