功能描述
媒体播放器组件(MediaPlayer Kit)是一款功能强大的播放器,支持播放本地或在线的媒体资源。通过该播放器,你可以本地播放媒体资源,或将媒体资源同步分享给 anyRTC 频道内的远端用户观看/收听。
使用须知
支持格式
- 目前支持的音频格式:MP3、WAV等
- 目前支持的视频格式:AVI、MP4、MKV、FLV等
支持协议
目前支持HTTP、RTMP 和 RTSP 协议的在线媒体流。
本地播放时
必须先创建 RTC 引擎然后使用 MediaPlayer Kit ,因为 MediaPlayer Kit 播放器与 RTC 的音频路由一致,这种方式避免了同时使用RTC 和MediaPlayer Kit 播放器声音路由问题。
分享到远端时
播放器的画面会抢占主播摄像头采集的画面。所以,如果你希望远端用户同时看到主播和播放器的画面,则需另起一个进程来采集主播的画面。
准备开发环境
前提条件
- Microsoft Visual Studio 2015 或以上版本
- 支持 Windows 7 或以上版本的 Windows 设备
- 必须结合RTC SDK 使用
创建项目
参考以下步骤创建一个 Windows 项目。
创建 Windows 项目
- 打开 Microsoft Visual Studio 并点击新建项目。
- 进入新建项目窗口,选择项目类型为 MFC 应用程序,输入项目名称,选择项目存储路径,并点击确认。
- 进入MFC 应用程序窗口,选择应用程序类型为基于对话框,并点击完成。
集成 MediaPlayer Kit
配置项目文件
- 前往Github,下载最新版 RTC SDK,然后解压。
- 将 sdk 文件夹复制到你的项目文件夹下。
集成步骤:参考实现视频直播。
必须初始化完 RTC 引擎之后在去使用 MediaPlayer Kit
实现方法
本地播放媒体资源
集成 RTC SDK 后,参考如下步骤实现本地播放功能。
初始化RTC引擎
- 初始化 IRtcEngine
初始化媒体播放器
- 调用
createArMediaPlayer方法创建IMediaPlayer实例。
如需同时播放不同的媒体资源,你可以创建多个实例。
- 调用
initialize方法初始化媒体播放器。
设置日志
日志文件包含媒体播放器组件运行时产生的所有日志。日志文件的默认输出地址为 C:/Users/{user_name}/AppData/Local/ar/{project_name}。调用以下方法可以对日志文件进行如下设置:
- 调用
IMediaPlayer类的setLogFile方法设置日志文件的输出地址。 - 调用
IMediaPlayer类的setLogFilter方法设置输出日志的过滤等级。
注册一个播放器观测器对象
- 实现
IMediaPlayerObserver接口,并实例化IMediaPlayerObserver对象。 - 调用
IMediaPlayer类的registerPlayerObserver方法注册一个播放器的观测器对象,监听以下播放事件:onPositionChanged,报告当前播放进度onPlayerStateChanged,报告播放状态改变onPlayerEvent,报告播放器事件onMetadata,报告媒体附属信息(metadata)的接收
通过监听这些事件,你可以更好地掌握播放过程,并使用自定义格式数据(媒体附属信息)。如果播放发生异常,你可以根据这些事件排查问题。
(可选)注册一个音频观测器对象
- 实现
IAudioFrameObserver接口,并实例化IAudioFrameObserver对象。 - 调用
IMediaPlayer类的registerAudioFrameObserver方法注册一个音频观测器对象,监听每帧音频帧的接收事件。获取到AudioPcmFrame后你可以对音频进行录制。
(可选)注册一个视频观测器对象
- 实现
IVideoFrameObserver接口,并实例化IVideoFrameObserver对象。 - 调用
IMediaPlayer类的registerVideoFrameObserver方法注册一个视频观测器对象,监听每帧视频帧的接收事件。获取到VideoFrame后你可以对视频进行录制和截图。
准备播放
-
调用
IMediaPlayer类的setView方法设置播放器的渲染视图。 -
调用
IMediaPlayer类的setRenderMode方法设置播放器视图的渲染模式。 -
调用
IMediaPlayer类的open方法打开媒体资源。媒体资源路径可以为网络路径或本地路径,支持绝对路径和相对路径。请收到
onPlayerStateChanged回调报告播放状态为PLAYER_STATE_OPEN_COMPLETED(2)后再进行下一步操作。 -
调用
IMediaPlayer类的play方法本地播放该媒体资源。
调节播放设置
调用 ArMediaPlayerKit 接口的其他方法,你可以实现如下播放设置:
- 暂停/恢复播放,调节播放进度和速度,调节本地播放音量等。
- 获取媒体资源总时长,获取播放进度,获取当前播放状态,获取该媒体资源中媒体流的个数和每个媒体流的详细信息。
结束播放
-
调用
IMediaPlayer类的stop方法停止播放。 -
调用
IMediaPlayer类的unregisterAuidoFrameObserver方法取消观测音频帧。如果你没有注册音频观测器,请略过此步。
-
调用
IMediaPlayer类的unregisterVideoFrameObserver方法取消观测视频帧。如果你没有注册视频观测器,请略过此步。
-
调用
IMediaPlayer类的unregisterPlayerObserver方法取消观测播放器事件。 -
调用
IMediaPlayer类的release方法释放IMediaPlayer资源。
示例代码
class CPlayerSimpleDemo : public CWnd, public ar::rtc::IMediaPlayerObserver {
public:
DECLARE_MESSAGE_MAP()
CPlayerSimpleDemo() : media_player_( nullptr )
{
}
~CPlayerSimpleDemo()
{
if ( media_player_ )
{
media_player_->Release();
media_player_ = nullptr;
}
}
// IMediaPlayerObserver
virtual void onPlayerStateChanged( const IMediaPlayer::PLAYER_STATE state,
const IMediaPlayer::PLAYER_ERROR ec ) override
{
switch ( state )
{
case IMediaPlayer::PLAYER_STATE_OPEN_COMPLETE:
media_player_->play();
break;
case IMediaPlayer::PLAYER_STATE_FAILED:
media_player_->stop();
break;
case IMediaPlayer::PLAYER_STATE_PLAYBACKCOMPLETED:
media_player_->stop();
break;
default:
break;
}
}
virtual void onPositionChanged( const int64_t position ) override
{
}
virtual void onMetaData( void* data, int length ) override
{
}
virtual void onPlayerEvent( const IMediaPlayer::PLAYER_EVENT event ) override
{
}
afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct )
{
if ( CWnd::OnCreate( lpCreateStruct ) == -1 )
return(-1);
media_player_ = createArMediaPlayer();
if ( media_player_ )
{
media_player_->registerPlayerObserver( this );
media_player_->setView( m_hWnd );
media_player_->open( "http://tb-video.bdstatic.com/tieba-smallvideo/68_20df3a646ab5357464cd819ea987763a.mp4" );
}
return(0);
}
private:
ar::rtc::IMediaPlayer* media_player_;
};
注意事项
使用播放器组件必须要先初始化 RTC SDK
API 文档
详见 API 文档

