本文介绍如何调用媒体播放器相关的 API 播放本地或在线媒体资源,或将媒体资源分享给声网频道内的远端用户观看或收听。
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。有关详细信息,请参考实现视频通话或实现视频直播。
参考如下步骤,在你的项目中实现媒体播放功能:
初始化 RtcEngine
后,创建一个 IMediaPlayer
对象,并调用 registerPlayerObserver
方法注册播放观测器。
engine = RtcEngine.create(config);
...
mediaPlayer = engine.createMediaPlayer();
mediaPlayer.registerPlayerObserver(this);
实现媒体播放器观测器的回调。
@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);
}
渲染本地媒体播放视图。
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);
加入频道前,设置媒体播放器 ID,发布媒体播放器的音视频,将媒体资源分享给声网频道内的远端用户。
private ChannelMediaOptions options = new ChannelMediaOptions();
...
options.publishMediaPlayerId = mediaPlayer.getMediaPlayerId();
options.publishMediaPlayerAudioTrack = true;
options.publishMediaPlayerVideoTrack = true;
int res = engine.joinChannel(accessToken, channelId, 0, options);
打开本地或在线媒体文件。
mediaPlayer.open(url, 0);
播放媒体文件。
onPlayerStateChanged
回调报告播放状态为 PLAYER_STATE_OPEN_COMPLETED
后再调用 play
方法播放媒体文件。 mediaPlayer.play();
当用户离开频道时,停止播放、销毁媒体播放器、取消注册播放观测器,并销毁分配的资源。
mediaPlayer.stop();
mediaPlayer.destroy();
mediaPlayer.unRegisterPlayerObserver(this);
本节介绍本文中使用方法的更多信息以及相关页面的链接。
声网在 GitHub 上提供了一个开源的示例项目。