媒体播放器组件提供播放音视频媒体文件的能力,并且支持将播放的媒体文件的音画数据推流出去。
可以使用媒体播放器播放测试音频,验证音频播放设备是否工作正常。
使用媒体播放器播放音乐,媒体播放器支持将播放出来的音频推流出去,让远端听到背景音乐。
主唱使用媒体播放器播放 MV 或其它类型歌曲,主唱随音乐唱歌,通过简单的配置就能让观众欣赏主唱 K 歌。结合媒体次要信息,还可以实现歌词同步显示。
媒体播放器支持 MP3、MP4、FLV、WAV、AAC、M3U8 等格式文件。除了支持播放本地媒体文件,媒体播放器还支持 HTTP/HTTPS 和 RTMP 流媒体协议,在线播放这些格式的文件。
媒体播放器默认支持格式为:MP3、MP4、FLV、WAV、AAC。如需支持其它格式,请联系 ZEGO 技术支持。
在 6.5.0 版本 (2021 年 10 月发布)之前的 SDK 默认不包含媒体播放器功能,可联系 ZEGO 技术支持提供。
媒体播放器业务状态流转如下图所示:
)
相关功能的 Demo 源码,请联系 ZEGO 技术支持获取。
为了使用媒体播放器组件,必须引入头文件 zego-api-mediaplayer.h。
播放器支持两种模式,纯本地播放及推流播放:
enum ZegoMediaPlayerType
{
ZegoMediaPlayerTypePlayer = 0, // 本地播放模式,不会将音频混入推流中,只有调用端可以听到播放的声音。
ZegoMediaPlayerTypeAux = 1 // 推流播放模式,会将音频混流推流中,调用端和拉流端都可以听到播放的声音。
};
调用示例:
MEDIAPLAYER::InitWithType(MEDIAPLAYER::ZegoMediaPlayerType::ZegoMediaPlayerTypePlayer);
可以使用下面接口修改播放器类型:
void SetPlayerType(const ZegoMediaPlayerType type);
获取播放器状态有两种途径,设置事件回调代理,及主动获取接口。
设置播放器事件回调,就可以接收到开始播放,结束播放,播放错误等事件回调。
void SetEventCallback(IZegoMediaPlayerEventCallback *callback);
回调代理协议为 IZegoMediaPlayerEventCallback:
class IZegoMediaPlayerEventCallback
{
public:
virtual void OnPlayStart(); // 播放开始
virtual void OnPlayError(const int errCode) = 0; // 播放错误
virtual void OnVideoBegin(); // 开始播放视频
virtual void OnAudioBegin(); // 开始播放音频
virtual void OnPlayEnd(); // 播放结束
virtual void OnSeekComplete(const int state, const long duration); // 完成快进到指定时刻
virtual void OnPlayPause(); // 播放暂停
virtual void OnPlayResume(); // 播放恢复
virtual void OnPlayStop(); // 播放结束
virtual void OnBufferBegin(); // 开始缓冲数据,播放暂停
virtual void OnBufferEnd(); // 缓冲结束,恢复播放
};
详见 api 文档说明。
long GetDuration(); // 获取整个文件的播放时长,单位为毫秒
long GetCurrentDuration(); // 获取当前播放的进度,单位为毫秒
void SetView(void *view); // 设置显示视频的 view
void Start(const char *path, const bool repeat); // 开始播放
void Stop(); // 停止播放
播放文件指定,可以是本地文件的路径,也可以是在线文件 url,比如 http://your.domain.com/your-movie.mp4;repeat 参数设置为 true 时,表示开启循环播放。
void Pause();// 暂停播放
void Resume(); // 恢复播放
void SeekTo(const long duration); // 设置指定的进度进行播放,单位为毫秒
void SetVolume(const int volume); // 设置音量,范围在0到200,默认值是60
如果资源类型支持多个音轨,可以使用以下接口获取音轨数量信息:
long GetAudioStreamCount();
选择音轨(音轨下标从 0 开始):
long SetAudioStream(const long streamIndex);
使用完播放器之后,需要及时调用 DestroyPlayer 释放该播放器占用的资源。
void DestroyPlayer(ZegoMediaPlayerIndex index);
注意: 必须先调用
DestroyPlayer释放播放器,再将player实例置空。
媒体播放器支持直接将播放得到的音频与麦克风音频混音,因此,应用层只需处理视频部分,就可以实现将媒体播放器的音视频推流出去。
如果播放的是视频文件,而且设置了播放器视频数据回调,就会以一定频率收到相应的数据回调。
// 设置视频数据回调
void SetVideoDataCallback(IZegoMediaPlayerVideoDataCallback *callback, ZegoMediaPlayerVideoPixelFormat format);
其中 ZegoVideoDataFormat 指定了视频数据的格式:
enum ZegoMediaPlayerVideoPixelFormat
{
ZegoMediaPlayerVideoPixelFormatUnknown = 0,
ZegoMediaPlayerVideoPixelFormatBGRA32 = 4,
ZegoMediaPlayerVideoPixelFormatRGBA32 = 5,
ZegoMediaPlayerVideoPixelFormatARGB32 = 6,
ZegoMediaPlayerVideoPixelFormatABGR32 = 7,
};
回调协议 IZegoMediaPlayerVideoDataCallback 定义为:
class IZegoMediaPlayerVideoDataCallback
{
public:
/**
视频帧数据回调,同步回调,不要在回调中处理数据或进行耗时操作
@param data 视频帧数据
@param len 视频帧数据长度
@param format 视频帧格式信息
*/
virtual void OnPlayVideoData(const char* data, int len, ZegoMediaPlayerVideoDataFormat& format) = 0;
};
外部视频采集接口主要包括 ZegoVideoCaptureFactory、ZegoVideoCaptureDevice ,及对应的组件设置接口 + SetVideoCaptureFactory(ZegoVideoCaptureFactory factory, int channelIndex);。应用层通过这些接口,就可以实现将媒体播放器得到视频帧送进 SDK 编码推流。
| 错误码 | 说明 |
|---|---|
| ErrorCode = -1 | 文件格式不支持 |
| ErrorCode = -2 | 配置文件获取失败,路径不存在 |
| ErrorCode = -3 | 文件无法解码 |
| ErrorCode = -4 | 文件中没有可播放的音视频流 |
| ErrorCode = -5 | 文件解析过程中出现错误 |
| ErrorCode = -6 | 文件播放过程中出现丢帧,视频解码性能不够。提示信息,不影响播放流程 |
| ErrorCode = -7 | 视频播放超时 |
Q1:播放器得到的音频混入推流后,采集音频数据回调 (
IZegoAudioRecordCallback void onAudioRecordCallback(byte[] data, int sampleRate, int channelCount, int bitDepth);) 包含播放器的音频吗?
答:包含。
Q2: 媒体播放器可以播放网络视频吗?
答:可以,支持播放 HTTP/HTTPS 和 RTMP 流媒体协议的 MP3、MP4、FLV、WAV、AAC、M3U8 等格式的网络资源。
Q3: 媒体播放器支持哪些格式的本地媒体文件?
答:支持播放 MP3、MP4、FLV、WAV、AAC、M3U8 等格式的本地媒体文件。
Q4:使用播放器混音后,还能使用原有的混音接口吗?
答:播放器混音推流并不影响原有混音接口功能,二者可以同时并存

联系我们
文档反馈