傲瑞组件开发手册(05) -- 语音视频播放组件 MPlayer
在多媒体系统中,一般都会涉及到语音数据、视频数据的播放问题,比如播放采集到的麦克风数据、摄像头数据,或播放wav文件等。
MPlayer 是傲瑞实用组件之一,可用于播放声音数据、视频图像数据。
一.MPlayer 简介
当前版本的MPlayer组件支持:
(1)播放声音:直接播放PCM声音数据,播放WAV文件。播放时,可指定扬声器索引、声音数据的采样率、采样深度、声道数。
(2)播放图像:该功能暂不支持。
二.MPlayer 结构
对于使用者而言,MPlayer组件中的主要类的结构图如下所示:
(1)IAudioPlayer是声音播放器。
(2)我们可以通过调用PlayerFactory的CreateAudioPlayer方法来创建声音播放器实例。
(3)得到播放器实例后,使用声音数据调用其Play方法,就会播放传入的数据;不再使用播放器时,调用其Dispose方法将其释放。
三.使用接口详细定义
1.各播放器接口
/// <summary> /// 声音播放器。用于播放PCM声音数据。 /// </summary> public interface IAudioPlayer :IDisposable { /// <summary> /// 将声音数据放到播放队列中,进行播放。 /// </summary> /// <param name="audioData">声音数据</param> void Play(byte[] audioData); /// <summary> /// 清除缓冲区中尚未播放的数据。 /// </summary> void Clear(); }
要特别提醒的是:
(1)声音播放器IAudioPlayer内部使用了缓存队列,缓存的大小可在创建时进行设置。如果缓存中的数据尚未播放完,此时调用Play传入的数据将会在后面排队。
(2)如果调用Play传入的数据的量大于缓存中剩下的空间,则会自动丢弃缓存中最老的数据。
(3)调用Clear方法,可以立即情况缓存中尚未播放的数据。
2.播放器工厂
/// <summary> /// 播放器工厂。 /// </summary> public static class PlayerFactory { /// <summary> /// 创建声音播放器。用于播放PCM声音数据。默认采样位数:16,默认缓存大小:10秒。 /// </summary> /// <param name="speakerIndex">使用的扬声器设备的索引。</param> /// <param name="sampleRate">声音数据的采样率。</param> /// <param name="channelCount">声道数。</param> public static IAudioPlayer CreateAudioPlayer(int speakerIndex, int sampleRate, int channelCount);
/// <summary> /// 创建声音播放器。用于播放PCM声音数据。 /// </summary> /// <param name="speakerIndex">使用的扬声器设备的索引。</param> /// <param name="sampleRate">声音数据的采样率。</param> /// <param name="channelCount">声道数。</param> /// <param name="bitsNumber">声音数据的采样位数。一般为16。</param> /// <param name="bufferSizeInSecs">缓冲区的大小:最多存储几秒钟的声音数据。默认值为10秒。</param> public static IAudioPlayer CreateAudioPlayer(int speakerIndex, int sampleRate, int channelCount, int bitsNumber, int bufferSizeInSecs);
/// <summary> /// 解析WAV文件。 /// </summary> public static AudioInformation ParseWaveFile(string filePath); }
(1)在创建声音播放器时,我们必须要清楚接下来所播放的声音数据的性质:采样率、采样位数、声道数。
(2)关于CreateAudioPlayer方法的bufferSizeInSecs参数的取值:
如果是播放实时采集的数据(比如实时的聊天系统),则bufferSizeInSecs设为2~5秒即可。
如果是播放从文件中(如WAV文件)提取出来的大块声音数据,则bufferSizeInSecs就设置为比要播放的声音时长大1秒即可。
(3)ParseWaveFile方法用于解析WAV文件,在该方法的支持下,我们就很容易使用IAudioPlayer来播放wav文件了。
四.MPlayer Demo
下面是一个最简单的使用MPlayer组件的Demo,这个demo演示了两个功能:(1)使用MCapture采集麦克风的声音,然后使用MPlayer播放出来;(2)播放wav声音文件。
Demo 运行的截图如下所示:
MPlayer Demo 源码:Oraycn.MPlayerDemo.rar
注:如果采集麦克风并播放,没有听到声音,则可能原因是:
(1)麦克风或扬声器的index设置的不正确。
(2)检查麦克风设备的音量是否调为0了?
-----------------------------------------------------------------------------------------------------------------------------------------------
Q Q:168757008