plv player sdk doc
载入中...
搜索中...
未找到
功能使用

  • 功能使用
    • SDK 名词含义及功能说明
    • SDK 全局函数
    • SDK 防录制功能
    • SDK 下载器
    • SDK 播放器
    • SDK 注意事项

本文档提供了使用 C++SDK 的操作步骤及代码示例,通过本文您可以快速了解如何使用 SDK 提供的功能。您也可以通过 Demo 中的示例进行了解和自有业务开发。

SDK 名词含义及功能说明

  • 参见 **plv-player-def.h**

SDK 全局函数

  1. 设置日志,日志过滤项。
  2. 设置观众信息(用于后台数据追踪)。
  3. 设置相关参数(硬解开关,网络请求类型等)。
  4. 初始化(userid, key)。
  5. 退出析构。
std::count << "the sdk version:" << PLVGetSdkVersion() << std::endl;
// 设置日志信息,路径须使用utf8
PLVSetSdkLogMessageCallback(true,[](LOG_FILTER_TYPE, const char*, void*){}, nullptr);
int ret = PLVSetSdkLogFile("C:/log/sdk.log");
std::count << "the log file result:" << ret << std::endl;
// 设置 viewer 信息,用于定位播放质量问题,在线播放下可以通过后台来查看,建议调用此接口设置信息
// 最新 vrm12/vrm13 下必须设置,否则播放会报错
std::string viewerId = "业务id";// 唯一值
std::string viewerName = "业务nick";
std::string viewerAvatar= "业务Avatar";
PLVSetSdkViewerInfo(viewerId.c_str(), viewerName.c_str(), viewerAvatar.c_str());
//初始化SDK,建议不要传入secretKey与appSecret,相关信息由业务服务器获取后传给客户端
PLVAccountInfo accountInfo;
accountInfo.userId = "xxxx";
ret = PLVInitSdkLibrary(&accountInfo);
std::cout << "init sdk result:" << ret << std::endl;
//释放SDK
//以下为播放相关全局设置,详见文档信息
PLVSetSdkSeed("xxxxxxx");
//以下为下载相关全局设置,详见文档信息
// 获取错误描述
auto desc = PLVGetSdkErrorDescription(ret);
std::cout<< "the error info: << desc << std::endl;
PLAYERSDK_API int PLAYERSDK_CALL PLVSetSdkKeepLastFrame(bool enable)
设置是否播放结束保持在最后一帧画面上.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetSdkLogLevel(LOG_FILTER_TYPE level)
设置 SDK 的日志过滤等级.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetSdkSeed(const char *seed)
设置解密 seed.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetSdkLogMessageCallback(bool enable, OnLogMessageHandler handler, void *data)
设置日志信息回调.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetSdkRetryAttempts(int attempts, int milliseconds, int millisecondsMax)
设置下载的重试次数, 每次重试的间隔时间会递增. 默认是无限重试(-1).
PLAYERSDK_API void PLAYERSDK_CALL PLVReleaseSdkLibrary(void)
析构 SDK, 停止使用后要调用此接口.
PLAYERSDK_API int PLAYERSDK_CALL PLVInitSdkLibrary(const PLVAccountInfo *info)
初始化 SDK , 在使用 SDK 前一定要调用此接口.
PLAYERSDK_API const char *PLAYERSDK_CALL PLVGetSdkVersion(void)
获取 SDK 版本号.
PLAYERSDK_API const char *PLAYERSDK_CALL PLVGetSdkErrorDescription(int err)
根据错误码获取错误描述.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetSdkVideoOutputDevice(VIDEO_OUTPUT_DEVICE type, const char *context=NULL)
设置视频输出驱动类型.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetSdkLocalRememberPlay(bool enable)
本地记忆续播放功能.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetSdkLogFile(const char *fileName)
设置 SDK 的日志文件位置, 文件名带路径.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetSdkHwdecEnable(bool enable)
设置是否使用硬件加速.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetSdkViewerInfo(const char *viewerId, const char *viewerName, const char *viewerAvatar, const char *viewerExtraInfo1=NULL, const char *viewerExtraInfo2=NULL, const char *viewerExtraInfo3=NULL)
设置 qos 的信息追踪, 建议设置.
@ VIDEO_OUTPUT_GPU
LOG_FILTER_TYPE
@ LOG_FILTER_INFO
const char * userId
主帐号的userId, 请向 SDK 供应商获取.

SDK 防录制功能

防录制功能的说明,必须 SDK 初始化之后才能使用,操作步骤及功能示例如下:

// 注意通知回调都是子线程,如果更新 ui 及操作 api 都需要 post 到主线程
class Record{
public:
Record(void){
// 软件录制通知或者破解注入通知
PLVSetDetectSoftwareRecordingHandler(true, [](SOFTWARE_RECORDING_NOTIFY_TYPE type, const char* softwares, void* data){
// 有插件注入通知,可能有软件在录制你的播放界面,可以在业务上做处理
// PostMessage
}, userdata);
// 硬件设备变动的回调通知, 此回调可以用于防止 HDMI 硬件录制, 业务侧可以根据回调类型进行播放器是否禁播操作
PLVSetDetectHardwareRecordingHandler(true, [](DEVICE_CHANGED_TYPE type, const char* device, void* data){
// HDMI 设备有变动,请根据 type 类型判断,可能是 HDMI 设备在录制你的屏幕
// PostMessage
}, userdata);
}
// 软件防录制
int SetPreventSoftwareRecording(void* window, bool enable){
return PLVSetPreventSoftwareRecording(window, enable);
}
int GetPreventSoftwareRecording(void* window, bool* enable){
return PLVGetPreventSoftwareRecording(window, enable);
}
};
PLAYERSDK_API int PLAYERSDK_CALL PLVSetDetectHardwareRecordingHandler(bool enable, OnDetectHardwareRecordingHandler handler, void *data)
设置设备插拔变动的回调通知.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetPreventSoftwareRecording(void *window, bool enable)
设置播放窗口的软件防录制, 用于防止屏幕录制或屏幕截图.
PLAYERSDK_API int PLAYERSDK_CALL PLVSetDetectSoftwareRecordingHandler(bool enable, OnDetectSoftwareRecordingHandler handler, void *data)
设置软件录制的回调通知.
PLAYERSDK_API int PLAYERSDK_CALL PLVGetPreventSoftwareRecording(void *window, bool *enable)
获取播放窗口是否开启软件防录制.
DEVICE_CHANGED_TYPE

SDK 下载器

视频下载的操作步骤及功能示例如下:

// 注意通知回调都是子线程,如果更新 ui 及操作 api 都需要 post 到主线程
class Download{
private:
PLVDownloadPtr downolader = nullptr;
public:
Download(void){
// 创建下载器
downolader = PLVDownloadCreate();
// 设置错误回调通知
PLVDownloadSetErrorHandler(downolader, [](const char* vid, int code, void* data) {
// 错误通知 code 为错误码
// PostMessage
}, userdata);
// 设置下载进度回调通知
PLVDownloadSetProgressHandler(downolader, [](const char* vid, long long receivedBytes, long long totalBytes, void* data) {
// 下载进度
// PostMessage
}, userdata);
// 设置下载结果回调通知
PLVDownloadSetResultHandler(downolader, [](const char* vid, int rate, int code, void* data) {
// 下载结果
// PostMessage
}, userdata);
}
~Download(void){
PLVDownloadDestroy(downolader);
downolader = nullptr;
}
// 设置下载信息,操作前必须先调用此接口
int SetInfo(const char* vid, const char* path, int rate){
return PLVDownloadSetInfo(downolader, vid, path, rate);
}
// 开始下载
// autoDownRate 是否自动降清晰度,false 如果没有这个清晰度则返回错误码
int Start(const char* token, bool autoDownRate){
return PLVDownloadStart(downolader, token, autoDownRate);
}
// 结束下载,退出线程
int Stop(void){
return PLVDownloadStop(downolader);
}
// 暂停下载,不退出线程,可以快速切换下载状态
int Pause(bool pause){
return PLVDownloadPause(downolader);
}
// 删除下载文件
int Delete(void){
return PLVDownloadDelete(downolader);
}
// 取消所有回调设置
int Reset(void){
return PLVDownloadResetHandler(downolader);
}
};
PLAYERSDK_API PLVDownloadPtr PLAYERSDK_CALL PLVDownloadCreate()
创建下载对象并返回对象指针. 在使用下载接口对象前, 必须先调用此接口创建对象.
PLAYERSDK_API int PLAYERSDK_CALL PLVDownloadDelete(PLVDownloadPtr download)
删除视频文件. 如果视频正在下载中时, 会中断下载, 并删除所有临时文件, 并退出线程.
void * PLVDownloadPtr
下载对象, 每一个下载任务对应一个下载对象, 可以创建多个下载对象.
PLAYERSDK_API int PLAYERSDK_CALL PLVDownloadResetHandler(PLVDownloadPtr download)
重置所有回调通知, 会请空所有的回调函数地址.
PLAYERSDK_API int PLAYERSDK_CALL PLVDownloadStart(PLVDownloadPtr download, const char *token, bool autoDownRate)
开始下载.
PLAYERSDK_API int PLAYERSDK_CALL PLVDownloadSetInfo(PLVDownloadPtr download, const char *vid, const char *path, int rate)
设置视频信息. 在调用下载前, 必须先设置视频的相关信息, 否则会报错.
PLAYERSDK_API int PLAYERSDK_CALL PLVDownloadSetErrorHandler(PLVDownloadPtr download, OnDownloadErrorHandler handler, void *data)
设置下载错误的回调通知.
PLAYERSDK_API int PLAYERSDK_CALL PLVDownloadPause(PLVDownloadPtr download, bool pause)
暂停下载, 此时线程进入休眠, 不会退出, 区别于停止下载. 再开始下载时会更快些.
PLAYERSDK_API int PLAYERSDK_CALL PLVDownloadSetResultHandler(PLVDownloadPtr download, OnDownloadResultHandler handler, void *data)
设置下载结果的回调通知.
PLAYERSDK_API int PLAYERSDK_CALL PLVDownloadStop(PLVDownloadPtr download)
停止下载, 此时线程会回收退出, 区别于暂停下载. 再开始下载时会慢些.
PLAYERSDK_API void PLAYERSDK_CALL PLVDownloadDestroy(PLVDownloadPtr download)
销毁下载对象. 不再使用创建的对象后, 必须调用此接口回收.
PLAYERSDK_API int PLAYERSDK_CALL PLVDownloadSetProgressHandler(PLVDownloadPtr download, OnDownloadProgressHandler handler, void *data)
设置下载进度的回调通知.

SDK 播放器

视频播放的操作步骤及功能示例如下:

// 注意通知回调都是子线程,如果更新 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]);
};
PLAYERSDK_API int PLAYERSDK_CALL PLVPlayerSetPropertyHandler(PLVPlayerPtr player, OnPlayerPropertyHandler handler, void *data)
设置播放属性值的回调通知.
PLAYERSDK_API PLVPlayerPtr PLAYERSDK_CALL PLVPlayerCreate(void *window)
创建播放对象并返回对象指针. 在使用播放接口对象前, 必须先调用此接口创建对象.
PLAYERSDK_API int PLAYERSDK_CALL PLVPlayerSetProgressHandler(PLVPlayerPtr player, OnPlayerProgressHandler handler, void *data)
设置播放进度的回调通知.
PLAYERSDK_API int PLAYERSDK_CALL PLVPlayerSetOSDConfig(PLVPlayerPtr player, bool enable, const PLVOsdConfigInfo *config)
设置跑马灯信息
PLAYERSDK_API int PLAYERSDK_CALL PLVPlayerGetOSDConfig(PLVPlayerPtr player, PLVOsdConfigInfo &config)
获取跑马灯信息.
PLAYERSDK_API void PLAYERSDK_CALL PLVPlayerDestroy(PLVPlayerPtr player)
销毁播放对象. 不再使用创建的对象后, 必须调用此接口回收.
PLAYERSDK_API int PLAYERSDK_CALL PLVPlayerSetStateHandler(PLVPlayerPtr player, OnPlayerStateHandler handler, void *data)
设置播放状态的回调通知.
PLAYERSDK_API int PLAYERSDK_CALL PLVPlayerSetAudioDeviceHandler(PLVPlayerPtr player, OnPlayerAudioDeviceHandler handler, void *data)
设置扬声器热插拔的回调通知.
PLAYERSDK_API int PLAYERSDK_CALL PLVPlayerSetRateChangeHandler(PLVPlayerPtr player, OnPlayerRateChangeHandler handler, void *data)
设置清晰度变化的回调通知. 只有输入清度为 VIDEO_RATE_AUTO 才会触发此回调.
const int PLV_MAX_DEVICE_ID_LENGTH

SDK 注意事项

  1. 所有接口与路径相关,都必须使用 utf8 编码。
  2. 所有回调通知,都不能在里面更新界面或者调用其它 api,更新界面必须 post 到 ui 线程,调用 api 必须在其它线程操作。