实时音视频

  • 实时音视频 > 使用指南 > iOS >媒体播放器

    媒体播放器

    最近更新时间: 2024-11-20 15:37:30

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

    • 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 返回的错误码和通过 QNMediaPlayerDelegatedidPlayerEvent QNPlayerEventInfo 回调拿到异步处理过程中的错误码,可查看具体错误码含义

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

    示例代码

    媒体播放器场景的示例代码可参考 API-Examples-iOS

    以上内容是否对您有帮助?
  • Qvm free helper
    Close