logo
当前页

媒体播放器

2024-07-27

功能简介

媒体播放器组件提供播放音视频媒体文件的能力,并且支持将播放的媒体文件的音画数据推流出去。

应用场景

  • 播放测试音频 :可以使用媒体播放器播放测试音频,验证音频播放设备是否工作正常。
  • 播放背景音乐 :使用媒体播放器播放音乐并混在流中推送出去,让远端听到背景音乐。
  • 播放视频文件 :结合自定义视频采集将媒体资源的视频数据推送出去,远端可拉流观看。

支持格式

媒体播放器默认支持格式为:MP3、MP4、FLV、WAV、AAC、M3U8、FLAC。如需支持其它格式,请联系 ZEGO 技术支持。

支持协议

支持 HTTP 和 HTTPS 协议。

示例源码下载

请参考 下载示例源码 获取源码。

相关源码请查看 “/page/Topics/MediaPlayer/” 下的文件 MediaPlayer.ets。

前提条件

在使用媒体播放器之前,请确保:

使用步骤

1 创建媒体播放器

调用 ZegoExpressEngine 的 createMediaPlayer 接口以创建媒体播放器实例。一个媒体播放器实例只能播放一个音视频,引擎同一时间最多支持创建 4 个播放器实例,以达到同时播放多个媒体资源的效果。若当前已存在 4 个播放器实例,再次调用创建播放器接口将返回 null

let player = this.ZegoExpressInstance.createMediaPlayer();

2(可选)为播放器设置事件回调

调用媒体播放器的 on 接口为播放器设置事件回调,以接收“播放器播放状态改变”、“播放器网络状态更新”、“播放器播放进度改变”等通知。

player.on('onMediaPlayerStateUpdate', (state: ZegoMediaPlayerState, errorCode: number) =>{
    this.logInfo('onMediaPlayerStateUpdate. state: ' + state + ",  errorCode: " + errorCode);
})

3 加载媒体资源

调用媒体播放器的 loadResource 指定要播放的媒体资源,可以是本地资源的绝对路径,也可以是网络资源的 URL,如 http://your.domain.com/your-movie.mp4。 用户可通过传入回调参数的方式获取加载文件的结果。

// 加载资源,可传本地资源的绝对路径或者网络资源的 URL
this.currentPlayer.loadResource(dstResource).then((result: ZegoMediaPlayerLoadResourceResult) => {
    if(result.errorCode == 0 && this.currentPlayer)
    {
        // get total progress
        this.maxPlayProgress = this.currentPlayer.getTotalDuration();
        this.currentAudioTrackIndex = this.currentPlayer.getAudioTrackCount();
    }
})

4 播放控制

播放状态控制

在调用 loadResource 加载文件成功后,可调用 startpause resume stop 来启停播放。一旦播放器的内部状态改变,onMediaPlayerStateUpdate 回调将会被触发。

开发者也可通过调用 getCurrentState 随时获取播放器的当前状态。

如果 enableRepeat 设置为 “true”,则播放器会在播放完文件后自动重播。

// 控制重复播放
this.currentPlayer.enableRepeat(true);

播放进度控制

播放文件的进度会通过 onMediaPlayerPlayingProgress 接口回调,默认触发回调的间隔是 1000 ms,可通过 setProgressInterval 更改此间隔。

开发者也可通过 getCurrentProgress 来获取当前播放进度。

通过 seekTo 接口可以调整播放进度进度。

this.currentPlayer.seekTo(value).then((result:ZegoMediaPlayerSeekToResult) =>{
    if(result.errorCode == 0)
    {
        hilog.info(0x0000, LogTag, 'SeekTo finished');
    }
    else
    {
        hilog.error(0x0000, LogTag, 'SeekTo failed');
    }
})

播放速度控制

加载资源完成后,用户可以调用 setPlaySpeed 接口来设置播放器当前的播放速度。

// 设置 2 倍速播放,播放速度范围为 0.5 ~ 4.0,默认为 1.0
this.currentPlayer.setPlaySpeed(2);

播放器音频控制

通过 getPlayVolume setPlayVolume 接口获取和控制播放音量。

通过 getPublishVolume setPublishVolume 接口获取和控制推流音量。

调用 enableAux 接口可以将文件的声音混入正在推的流中。

调用 muteLocal 接口可以使本地静默播放但能正常将声音混入流。

// 获取播放器当前播放音量
let playVolume = this.currentPlayer.getPlayVolume();

// 设置播放器音量为原先的一半
this.currentPlayer.setPlayVolume(playVolume/2)

// 获取播放器当前推流音量
let publishVolume = this.currentPlayer.getPublishVolume();

// 设置播放器推流音量
this.currentPlayer.setPublishVolume(80.0);

// 开启将资源的声音混入正在推的流中
this.currentPlayer.enableAux(true)

// 开启本地静默播放
this.currentPlayer.muteLocal(true)

播放器视频控制

说明

本节操作仅适用于音视频场景,纯音频场景下无需设置。

当播放视频资源时,调用 setPlayerView 接口来设置视频的显示视图。

// 设置播放器视图
let view = new ZegoView();
view.view = 'view_id'
this.currentPlayer.setPlayerView(view)

5 销毁媒体播放器

使用完媒体播放器后,需要及时调用 destroyMediaPlayer 接口销毁播放器实例变量,释放占用的资源。

// 销毁媒体播放器
this.ZegoExpressInstance.destroyMediaPlayer(this.currentPlayer);
this.currentPlayer = null

常见问题

  1. 如何在播放中途切换播放资源?

    先调用播放器的 stop 接口,然后重新调用 loadResource 接口加载新资源。

Previous

混流

Next

音效文件播放器