媒体播放器
本文主要介绍媒体播放器的使用场景。
- v6.4.0 版本开始支持使用 QNMediaPlayer 媒体播放器
- 支持播放格式:mp4、flv、mov、mp3、wav、opus、flac、ogg、aac 等格式
- 支持将播放音视频流发布到房间内
- 解决房间内,因为硬件回音消除,导致媒体播放音量被抑制的问题
使用方式如下:
创建 QNMediaPlayer
SDK 可以通过 QNRTC.createMediaPlayer 来创建 QNMediaPlayer 对象
QNMediaPlayer mediaPlayer = QNRTC.createMediaPlayer();
mMediaPlayer.setMediaPlayerListener(new QNMediaPlayerListener());
其中,QNMediaPlayerListener 为媒体播放器回调监听类,回调方法定义如下:
/**
* 播放器状态改变时触发
*
* @param state 播放器状态
*/
void onPlayerStateChanged(QNPlayerState state);
/**
* 播放器事件改变时触发
*
* @param event 播放器事件
* @param info 事件信息,如错误码等
*/
void onPlayerEvent(QNPlayerEvent event, QNPlayerEventInfo info);
/**
* 播放进度更新时触发
*
* @param position 当前的播放进度,单位 ms
*/
void onPlayerPositionChanged(long position);
媒体播放器的错误码可参考播放器相关错误码
开始播放
需要配置播放器的数据源
参考代码如下:
QNMediaSource source = new QNMediaSource("xxx.mp4");
int ret = mediaPlayer.play(source);
if (ret != QNErrorCode.SUCCESS) {
Log.e(TAG, "play error : " + ret);
}
停止播放
参考代码如下:
int ret = mediaPlayer.stop();
if (ret != QNErrorCode.SUCCESS) {
Log.e(TAG, "stop error : " + ret);
}
暂停播放
参考代码如下:
int ret = mediaPlayer.pause();
if (ret != QNErrorCode.SUCCESS) {
Log.e(TAG, "pause error : " + ret);
}
恢复播放
参考代码如下:
int ret = mediaPlayer.resume();
if (ret != QNErrorCode.SUCCESS) {
Log.e(TAG, "resume error : " + ret);
}
改变播放位置
参考代码如下:
int ret = mediaPlayer.seekTo(2000);
if (ret != QNErrorCode.SUCCESS) {
Log.e(TAG, "seekTo error : " + ret);
}
设置循环播放次数
可通过 QNMediaPlayer.setLoopCount 接口进行循环次数的设置,未设置的情况下,默认播放一次,若设置了指定循环次数,则将在默认播放一次的基础上,再循环播放指定次数。
参考代码如下:
mediaPlayer.setLoopCount(2); // 一共将会播放三次
设置视频渲染视图
可通过 QNMediaPlayer.setView 接口进行视频画面渲染视图的设置,设置后,若存在有效的视频数据,画面将会在视图上进行显示。
参考代码如下:
mediaPlayer.setView(new QNSurfaceView());
获取媒体时长
参考代码如下:
// 获取点播文件总时间
int duration = mediaPlayer.getDuration();
获取媒体音频 Track
若想要将媒体发布到房间内,可通过 QNMediaPlayer.getMediaPlayerAudioTrack 方法获取到对应的媒体音频 Track,再通过 QNRTCClient.publish 等接口实现最终的发布。
参考代码如下:
// 获取 audioTrack
QNCustomAudioTrack audioTrack = mediaPlayer.getMediaPlayerAudioTrack();
// 发布到房间内
rtcClient.publish(audioTrack);
获取媒体视频 Track
若想要将媒体发布到房间内,可通过 QNMediaPlayer.getMediaPlayerVideoTrack 方法获取到对应的媒体视频 Track,再通过 QNRTCClient.publish 等接口实现最终的发布。
参考代码如下:
// 获取 videoTrack
QNCustomVideoTrack videoTrack = mediaPlayer.getMediaPlayerVideoTrack();
// 发布到房间内
rtcClient.publish(videoTrack);
获取当前播放状态
可通过 QNMediaPlayer.getCurrentPlayerState 接口获取当前的播放状态。
示例代码如下:
QNPlayerState state = mediaPlayer.getCurrentPlayerState();
获取当前的播放位置
可通过 QNMediaPlayer.getCurrentPosition 接口获取当前的播放位置,返回位置单位为 ms。
示例代码如下:
int currentPos = mediaPlayer.getCurrentPosition();
错误码
API 返回的错误码和通过 QNMediaPlayerListener 的 onPlayerEvent
QNPlayerEventInfo 回调拿到异步处理过程中的错误码,可查看具体错误码含义
/**
* 播放器打开媒体文件失败
*/
public static final int ERROR_PLAYER_OPEN_FILE_FAILED = 50001;
/**
* 媒体播放器解码失败
*/
public static final int ERROR_PLAYER_DECODER_FAILED = 50002;
/**
* 媒体播放器 seek 失败
*/
public static final int ERROR_PLAYER_SEEK_FAILED = 50003;
/**
* 非法媒体播放器状态
*/
public static final int ERROR_PLAYER_INVALID_STATE = 50004;