媒体播放器
本文主要介绍媒体播放器的使用场景。
- v6.4.0 版本开始支持使用 QNMediaPlayer 媒体播放器
- 支持播放格式:mp4、flv、m3u8、wav、flac、opus、mp3、aif、m4s 等格式
- 支持将播放音视频流发布到房间内
- 解决房间内,因为硬件回音消除,导致媒体播放音量被抑制的问题
使用方式如下:
创建 QNMediaPlayer
SDK 可以通过 QNRTC.createMediaPlayer 来创建 QNMediaPlayer 对象
QNMediaPlayer *mediaPlayer = [QNRTC createMediaPlayer];
mediaPlayer.delegate = self;
其中,QNMediaPlayerDelegate 为媒体播放器回调代理,回调方法定义如下:
/**
* 状态发生变化的回调
*
* @param state 播放状态
* @see QNPlayerState
*
* @since v6.4.0
*/
- (void)mediaPlayer:(QNMediaPlayer *)player didPlayerStateChanged:(QNPlayerState)state;
/** 事件变化的回调
*
* @param event 播放事件
* @see QNPlayerEvent
* @param info 事件携带的信息
* @see QNPlayerEventInfo
*
* @since v6.4.0
*/
- (void)mediaPlayer:(QNMediaPlayer *)player didPlayerEvent:(QNPlayerEvent)event eventInfo:(QNPlayerEventInfo *)info;
/**
* 播放进度变化的回调
*
* @param position 播放进度,回调频率 1s 一次,单位(ms)
*
* @since v6.4.0
*/
- (void)mediaPlayer:(QNMediaPlayer *)player didPlayerPositionChanged:(NSUInteger)position;
媒体播放器的错误码可参考播放器相关错误码
开始播放
需要配置播放器的数据源
参考代码如下:
QNMediaSource *source = [[QNMediaSource alloc] init];
source.url = @"http://xxx.mp4";
int ret = mediaPlayer play:source];
if (ret != 0) {
NSLog(@"play error:%d", ret);
}
停止播放
参考代码如下:
int ret = [mediaPlayer stop];
if (ret != 0) {
NSLog(@"stop error:%d", ret);
}
暂停播放
参考代码如下:
int ret = [mediaPlayer pause];
if (ret != 0) {
NSLog(@"pause error:%d", ret);
}
恢复播放
参考代码如下:
int ret = [mediaPlayer resume];
if (ret != 0) {
NSLog(@"resume error:%d", ret);
}
seek
参考代码如下:
int ret = [mediaPlayer seek:2000];
if (ret != 0) {
NSLog(@"seek error:%d", ret);
}
getDuration
参考代码如下:
// 获取点播文件总时间
int duration = [mediaPlayer getDuration];
getMediaPlayerAudioTrack
参考代码如下:
// 获取 audioTrack
QNCustomAudioTrack* audioTrack = [mediaPlayer getMediaPlayerAudioTrack];
// 发布到房间内
NSMutableArray* publishTracks = [[NSMutableArray alloc] init];
[publishTracks addObject:audioTrack];
[self.rtcClient publish:publishTracks];
getMediaPlayerVideoTrack
参考代码如下:
// 获取 videoTrack
QNCustomVideoTrack* videoTrack = [mediaPlayer getMediaPlayerVideoTrack];
// 发布到房间内
NSMutableArray* publishTracks = [[NSMutableArray alloc] init];
[publishTracks addObject:videoTrack];
[self.rtcClient publish:publishTracks];
错误码
API 返回的错误码和通过 QNMediaPlayerDelegate 的 didPlayerEvent
QNPlayerEventInfo 回调拿到异步处理过程中的错误码,可查看具体错误码含义
typedef NS_ENUM(NSInteger, QNMediaPlayerReasonCode) {
/*!
* @abstract 打开文件失败
*/
QNMediaPlayerOpenFileFailed = 50001,
/*!
* @abstract 解码失败
*/
QNMediaPlayerDecoderFailed = 50002,
/*!
* @abstract seek 失败
*/
QNMediaPlayerSeekFailed = 50003,
/*!
* @abstract 无效的播放状态
*/
QNMediaPlayerInvalidState = 50004
};
示例代码
媒体播放器场景的示例代码可参考 API-Examples-iOS
文档反馈
(如有产品使用问题,请 提交工单)