实时音视频

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

    媒体播放器

    最近更新时间: 2024-08-23 17:56:20

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

    • 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 返回的错误码和通过 QNMediaPlayerListeneronPlayerEvent 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;
    
    以上内容是否对您有帮助?
  • Qvm free helper
    Close