媒体播放器

  • Android

更新时间不可用

了解实时互动 RTC 在不同平台上的媒体播放器方式,包括接入流程、关键配置和平台差异。

前提条件

本文介绍如何调用媒体播放器相关的 API 播放本地或在线媒体资源,或将媒体资源分享给声网频道内的远端用户。在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。有关详细信息,请参考实现音视频互动。

实现方法

参考如下步骤,在你的项目中使用媒体播放器:

  1. 初始化 RtcEngine 后,创建一个 IMediaPlayer 对象,并调用 registerPlayerObserver 方法注册播放观测器。

    Java
    engine = RtcEngine.create(config);
    
    ...
    // 创建媒体播放器对象
    mediaPlayer = engine.createMediaPlayer();
    // 注册播放观测器
    mediaPlayer.registerPlayerObserver(this);
  2. 实现媒体播放器观测器的回调。根据你的需求,你可以通过 onPlayerStateChanged 回调来观测播放器的状态,通过 onPositionChanged 回调来获取当前媒体文件的播放进度,通过 onPlayerEvent 来获取播放器事件。

    Java
    @Override
    // 报告播放器的状态
    public void onPlayerStateChanged(io.agora.mediaplayer.Constants.MediaPlayerState mediaPlayerState, io.agora.mediaplayer.Constants.MediaPlayerError mediaPlayerError) {
        Log.e(TAG, "onPlayerStateChanged mediaPlayerState " + mediaPlayerState);
        Log.e(TAG, "onPlayerStateChanged mediaPlayerError " + mediaPlayerError);
        if (mediaPlayerState.equals(PLAYER_STATE_OPEN_COMPLETED)) {
            setMediaPlayerViewEnable(true);
        } else if (mediaPlayerState.equals(PLAYER_STATE_IDLE) || mediaPlayerState.equals(PLAYER_STATE_PLAYBACK_COMPLETED) ) {
            setMediaPlayerViewEnable(false);
        }
    }
    
    @Override
    // 报告当前播放进度
    public void onPositionChanged(long position) {
        Log.e(TAG, "onPositionChanged position " + position);
        if (playerDuration > 0) {
            final int result = (int) ((float) position / (float) playerDuration * 100);
            handler.post(new Runnable() {
                @Override
                public void run() {
                    progressBar.setProgress(Long.valueOf(result).intValue());
                }
            });
        }
    }
    
    @Override
    // 报告播放器事件
    public void onPlayerEvent(io.agora.mediaplayer.Constants.MediaPlayerEvent mediaPlayerEvent) {
        Log.e(TAG, " onPlayerEvent mediaPlayerEvent " + mediaPlayerEvent);
    }
  3. 调用 setupLocalVideo 方法渲染本地媒体播放视图。

    Java
    VideoCanvas videoCanvas = new VideoCanvas(surfaceView, Constants.RENDER_MODE_HIDDEN, Constants.VIDEO_MIRROR_MODE_AUTO,
    Constants.VIDEO_SOURCE_MEDIA_PLAYER,  mediaPlayer.getMediaPlayerId(), 0);
    engine.setupLocalVideo(videoCanvas);
  4. 调用 joinChannel 加入频道时,通过 options 参数设置媒体播放器 ID、发布媒体播放器的音视频、将媒体资源分享给声网频道内的远端用户。

    Java
    private ChannelMediaOptions options = new ChannelMediaOptions();
    
    ...
    
    options.publishMediaPlayerId = mediaPlayer.getMediaPlayerId();
    options.publishMediaPlayerAudioTrack = true;
    options.publishMediaPlayerVideoTrack = true;
    
    int res = engine.joinChannel(accessToken, channelId, 0, options);
  5. 调用 open 打开本地或在线媒体文件。

    Java
    mediaPlayer.open(url, 0);
  6. 调用 play 播放媒体文件。

    注意

    请在收到 onPlayerStateChanged 回调报告播放状态为 PLAYER_STATE_OPEN_COMPLETED 后再调用 play 方法播放媒体文件。

    Java
    mediaPlayer.play();
  7. 当用户离开频道时,调用 stop 停止播放、调用 unRegisterPlayerObserver 取消注册播放观测器、调用 destroy 销毁媒体播放器并释放已分配的资源。

    Java
    mediaPlayer.stop();
    mediaPlayer.unRegisterPlayerObserver(this);
    mediaPlayer.destroy();

参考信息

示例项目

声网提供了开源的示例项目供你参考,你可以前往下载或查看其中的源代码。

支持的格式

声网的媒体播放器支持下列格式及协议:

视频编码格式

  • H.263、H.264、H.265、MPEG4、MPEG2、RMVB、Theora、VP3、VP8、AVS、WMV

音频编码格式

  • WAV、MP2、MP3、AAC、OPUS、FLAC、Vorbis、AMR-NB、AMR-WB、WMA v1、WMA v2

容器格式

  • WAV、FLAC、OGG、MOV、ASF、FLV、MP3、MP4、MPEG-TS、Matroska (MKV)、AVI、ASS、CONCAT、DTS、AVS

支持的协议

  • HTTP、HTTPS、RTMP、HLS、RTP、RTSP

API 参考