2024/10/17 14:17:33
媒体播放器
本文介绍如何调用媒体播放器相关的 API 播放本地或在线媒体资源,或将媒体资源分享给声网频道内的远端用户。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。有关详细信息,请参考实现音视频互动。
实现方法
参考如下步骤,在你的项目中使用媒体播放器:
-
初始化
RtcEngine
后,创建一个IMediaPlayer
对象,并调用registerPlayerObserver
方法注册播放观测器。Javaengine = RtcEngine.create(config);
...
// 创建媒体播放器对象
mediaPlayer = engine.createMediaPlayer();
// 注册播放观测器
mediaPlayer.registerPlayerObserver(this); -
实现媒体播放器观测器的回调。根据你的需求,你可以通过
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);
} -
调用
setupLocalVideo
方法渲染本地媒体播放视图。JavaVideoCanvas videoCanvas = new VideoCanvas(surfaceView, Constants.RENDER_MODE_HIDDEN, Constants.VIDEO_MIRROR_MODE_AUTO,
Constants.VIDEO_SOURCE_MEDIA_PLAYER, mediaPlayer.getMediaPlayerId(), 0);
engine.setupLocalVideo(videoCanvas); -
调用
joinChannel
加入频道时,通过options
参数设置媒体播放器 ID、发布媒体播放器的音视频、将媒体资源分享给声网频道内的远端用户。Javaprivate ChannelMediaOptions options = new ChannelMediaOptions();
...
options.publishMediaPlayerId = mediaPlayer.getMediaPlayerId();
options.publishMediaPlayerAudioTrack = true;
options.publishMediaPlayerVideoTrack = true;
int res = engine.joinChannel(accessToken, channelId, 0, options); -
调用
open
打开本地或在线媒体文件。JavamediaPlayer.open(url, 0);
-
调用
play
播放媒体文件。注意请在收到
onPlayerStateChanged
回调报告播放状态为PLAYER_STATE_OPEN_COMPLETED
后再调用play
方法播放媒体文件。JavamediaPlayer.play();
-
当用户离开频道时,调用
stop
停止播放、调用destroy
销毁媒体播放器、调用unRegisterPlayerObserver
取消注册播放观测器,并销毁分配的资源。JavamediaPlayer.stop();
mediaPlayer.destroy();
mediaPlayer.unRegisterPlayerObserver(this);
参考信息
示例项目
声网提供了开源的示例项目供你参考,你可以前往下载或查看其中的源代码。
支持的格式
声网的媒体播放器支持下列格式及协议:
视频编码格式
- 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、PM3、MP4、MPEG-TS、Matroska (MKV)、AVI、ASS、CONCAT、DTS、AVS
支持的协议
- HTTP、HTTPS、RTMP、HLS、RTP、RTSP