human: 如何处理七牛云的实时音视频媒体播放器

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > iOS >媒体播放器

#  媒体播放器

最近更新时间: 2024-08-16 17:43:23

本文主要介绍媒体播放器的使用场景。

>   * v6.4.0 版本开始支持使用
> [QNMediaPlayer](https://developer.qiniu.com/rtc/api/12775/QNMediaPlayer-iOS)
> 媒体播放器
>   * 支持播放格式：mp4、flv、m3u8、wav、flac、opus、mp3、aif、m4s 等格式
>   * 支持将播放音视频流发布到房间内
>   * 解决房间内，因为硬件回音消除，导致媒体播放音量被抑制的问题
>

使用方式如下：

# 创建 QNMediaPlayer

SDK 可以通过
[QNRTC.createMediaPlayer](https://developer.qiniu.com/rtc/api/8834/QNRTC-
iOS#createMediaPlayer) 来创建
[QNMediaPlayer](https://developer.qiniu.com/rtc/api/12775/QNMediaPlayer-iOS)
对象

    
    
    QNMediaPlayer *mediaPlayer = [QNRTC createMediaPlayer];
    mediaPlayer.delegate = self;
    

其中，[QNMediaPlayerDelegate](https://developer.qiniu.com/rtc/api/12780/QNMediaPlayerDelegate-
iOS) 为媒体播放器回调代理，回调方法定义如下：

    
    
    /**
     * 状态发生变化的回调
     *
     * @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;
    

媒体播放器的错误码可参考[播放器相关错误码](https://developer.qiniu.com/rtc/development_guidelines/10084/rtc-
error-code-iOS#8)

# 开始播放

需要配置播放器的数据源

参考代码如下：

    
    
        QNMediaSource *source = [[QNMediaSource alloc] init];
        source.url = @"http://xxx.mp4";
        int ret = mediaPlayer play:source];
        if (ret != 0) {
            NSLog(@"stop 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](https://developer.qiniu.com/rtc/api/12780/QNMediaPlayerDelegate-
iOS) 的 `didPlayerEvent`
[QNPlayerEventInfo](https://developer.qiniu.com/rtc/api/12779/QNPlayerEventInfo-
iOS) 回调拿到异步处理过程中的错误码，可查看具体错误码含义

    
    
    typedef NS_ENUM(NSInteger, QNMediaPlayerReasonCode) {
        /*!
         * @abstract 打开文件失败
         */
        QNMediaPlayerOpenFileFailed = 50001,
        /*!
         * @abstract 解码失败
         */
        QNMediaPlayerDecoderFailed = 50002,
        /*!
         * @abstract seek 失败
         */
        QNMediaPlayerSeekFailed = 50003,
        /*!
         * @abstract 无效的播放状态
         */
        QNMediaPlayerInvalidState = 50004
    };
    

# 示例代码

媒体播放器场景的示例代码可参考 [API-Examples-iOS](https://github.com/pili-engineering/QNRTC-
iOS/blob/master/QNRTC-API-Examples/Api-Examples-
iOS/Module/Other/MediaPlayer/MediaPlayerExample.m)

以上内容是否对您有帮助？