// 注意通知回调都是子线程,如果更新 ui 及操作 api 都需要 post 到主线程
class Player{
private:
PLVPlayer mediaPlayer = nullptr;
public:
Player((void*)window){
// 创建播放器
mediaPlayer = PLVPlayerCreate(window);
// 设置播放器的播放状态通知
PLVPlayerSetStateHandler(mediaPlayer, [](const char* vid, int state, void* data) {
// 播放器的状态,state 参见 PLAYER_MEDIA_STATE
// PostMessage();
}, userdata);
// 设置视频的属性回调通知
PLVPlayerSetPropertyHandler(mediaPlayer, [](const char* vid, int property, int format, const char* value, void* data) {
// 播放器的属性值
// PostMessage();
}, userdata);
// 设置码率清晰度变化通知 (只有输入的码率不存在,自动降值才会触发此通知)
PLVPlayerSetRateChangeHandler(mediaPlayer, [](const char* vid, int inputBitRate, int realBitRate, void* data) {
// 真实的清晰度,比如目标清晰度为超清,但不存在此清晰度,会自动降值为 realBitRate
// PostMessage();
}, userdata);
// 设置播放器播放进度回调通知
PLVPlayerSetProgressHandler(mediaPlayer, [](const char* vid, int millisecond, void* data) {
// 播放位置
// PostMessage();
}, userdata);
// 设置扬声器设备有热插拔的变动通知
PLVPlayerSetAudioDeviceHandler(mediaPlayer, [](int audioDeviceCount, void* data) {
// 扬声器设备变动,此为设备热插拔变动通知,可以 post 到主线程再调用 ReloadAudio();
// PostMessage();
}, userdata);
}
~Player(void){
PLVPlayerDestroy(mediaPlayer);
mediaPlayer = nullptr;
}
// 设置跑马灯
int SetOSD(bool enable, const PLVOsdConfigInfo* config){
return PLVPlayerSetOSDConfig(mediaPlayer, enable, config);
}
int GetOSD(PLVOsdConfigInfo& config){
return PLVPlayerGetOSDConfig(config);
}
// 设置 LOGO text
int SetLogo(bool enable, const PLVLogoTextInfo* config);
int GetLogo(PLVLogoTextInfo& config);
// 设置缓存,可以不设置,播放器会有默认值
int SetCache(bool enable, int maxCacheBytes, int maxCacheSeconds);
int GetCache(int* maxCacheBytes, int* maxCacheSeconds);
// 播放前要先设置 vid
int SetInfo(const char* vid, const char* path, int rate);
// 播放,token 外部获取,seekMillisecond 为要跳转到播放位置,sync 由于会先请求 vid 的信息,会有 http 请求,如果网络好请使用 true 同步,否则可以用 false
int Play(const char* token, int seekMillisecond, bool autoDownRate, bool playWithToken, bool sync);
// 本地播放
int PlayLocal(int seekMillisecond, bool autoDownRate);
// 本地加载,不播放
int LoadLocal(int seekMillisecond, bool autoDownRate);
int Pause(bool pause);
int Stop(void);
int SetMute(bool mute);
// 跳转,由于视频文件都是经过后台编码过,关键帧会被优化,跳转会不准确。可以对比 mp4 与 m3u8,差别会比较大,mp4 拖动很准,m3u8 跳动很大。
int SetSeek(int millisecond);
// 跳转到结束,由于 m3u8 跳转不准,有需要跳转到尾部的请使用此接口
int SeekToEnd(void);
int SetVolume(int volume);
// 声音增益,最大可到 1000
int SetVolumeMax(int volume);
// 倍数播放
int SetSpeed(double speed);
// 截图,注意使用 utf8
int Screenshot(const char* filename);
// 扬声器热插拔相关
int GetAudioDeviceCount();
int GetAudioDeviceInfo(int index, char deviceId[PLV_MAX_DEVICE_ID_LENGTH], char deviceName[PLV_MAX_DEVICE_ID_LENGTH]);
int GetCurrentAudioDevice(char deviceId[PLV_MAX_DEVICE_ID_LENGTH]);
int SetCurrentAudioDevice(const char deviceId[PLV_MAX_DEVICE_ID_LENGTH]);
};