本文介绍PC应用端,点播播放器的使用流程。
使用流程
创建点播播放器。
配置播放器的渲染窗口及设置播放回调。
根据需求配置播放器的其他参数。例如:软硬解码偏好、视频画面模式等。
设置播放数据源。
按文件播放设备录像:调用QueryDeviceVodUrl接口,获取本地NVR设备或IPC设备的存储卡中,指定录像文件名的录像文件rtmp播放地址,并作为数据源设置给播放器。
按时间播放设备录像:调用QueryDeviceVodUrlByTime接口,获取本地NVR设备或IPC设备存储卡中,指定录像时间范围的录像文件rtmp播放地址,并作为数据源设置给播放器。
按文件播放云存录像:调用QueryRecordUrl接口查询云端录像文件的hls播放地址,并作为数据源设置给播放器。
开始播放。
暂停、恢复、seek操作。
停止播放。
销毁点播播放器。
使用示例
设备录像点播
// 创建并显示播放窗口
QPoint playerViewPos = ui->playerviewplaceholder->pos();
QSize playerViewSize = ui->playerviewplaceholder->size();
pLVGLWidget_ = new LVGLWidget(0, this);
pLVGLWidget_->resize(playerViewSize);
pLVGLWidget_->move(playerViewPos);
pLVGLWidget_->show();
// 创建并设置播放器
pLVVodPlayer_ = createLVVodPlayer();
pLVVodPlayer_->setWindow(pLVGLWidget_);
pLVVodPlayer_->setPlayerCallback(this, nullptr);
...
// 处理播放器回调
void VodPlayerWindow::onError(const LVPlayerError &error, void *pUserData) {
emit appendLog(QString::asprintf("player error: code=%d subCode=%d message=%s", error.code, error.subCode,
error.message.c_str()));
}
void VodPlayerWindow::onPlayerStateChange(LVPlayerState state, void *pUserData) {
emit appendLog(QString::asprintf("player state changed to %d", state));
}
void VodPlayerWindow::onRenderedFirstFrame(int elapsedTimeInMs, void *pUserData) {
emit appendLog(QString::asprintf("首帧出图耗时: %d ms", elapsedTimeInMs));
}
void VodPlayerWindow::onVideoSizeChanged(int width, int height, void *pUserData) {
emit appendLog(QString::asprintf("视频宽高变化:w=%d h=%d", width, height));
}
void VodPlayerWindow::onVodCompletion(void *pUserData) {
emit appendLog("播放结束");
}
void VodPlayerWindow::onStandardSeiInfoUpdate(const uint8_t *buffer, int length, long timeStamp, void *pUserData) {
emit appendLog(QString::asprintf("收到sei帧长度%d", length));
}
...
// 设置数据源,rtmp地址从云服务获取
pLVVodPlayer_->setDataSource("rtmp://xx.xx.xx.xx/vod/xxx", true, decryptIvBase64String, decryptKeyBase64String);
// 设置解码策略为硬解码优先
pLVVodPlayer_->setDecoderStrategy(LV_DECODER_STRATEGY_HARDWARE_FIRST);
// 设置画面模式为保持宽高
pLVVodPlayer_->setVideoScalingMode(LV_MEDIA_VIDEO_SCALING_MODE_FIT);
// 设置播放停止时画面保留最后一帧
pLVVodPlayer_->setPlayerStoppedDrawingMode(LV_PLAYER_STOPPED_DRAWING_MODE_ALWAYS_KEEP_LAST_FRAME);
...
// 开始播放
LVPlayerCode code = pLVVodPlayer_->start();
if (code == LV_PLAYER_SUCCESS) {
emit appendLog("开始播放成功");
} else {
emit appendLog("开始播放失败");
}
...
// 暂停
pLVVodPlayer_->pause();
...
// 恢复
pLVVodPlayer_->resume();
...
// 停止播放
LVPlayerCode code = pLVVodPlayer_->stop();
if (code == LV_PLAYER_SUCCESS) {
emit appendLog("停止播放成功");
} else {
emit appendLog("停止播放失败");
}
...
// 销毁播放器
destroyLVVodPlayer(&pLVVodPlayer_);
delete pLVGLWidget_;
云存录像点播
// 创建并显示播放窗口
QPoint playerViewPos = ui->playerviewplaceholder->pos();
QSize playerViewSize = ui->playerviewplaceholder->size();
pLVGLWidget_ = new LVGLWidget(0, this);
pLVGLWidget_->resize(playerViewSize);
pLVGLWidget_->move(playerViewPos);
pLVGLWidget_->show();
// 创建并设置播放器
pLVVodPlayer_ = createLVVodPlayer();
pLVVodPlayer_->setWindow(pLVGLWidget_);
pLVVodPlayer_->setPlayerCallback(this, nullptr);
...
// 处理播放器回调
void VodPlayerWindow::onError(const LVPlayerError &error, void *pUserData) {
emit appendLog(QString::asprintf("player error: code=%d subCode=%d message=%s", error.code, error.subCode,
error.message.c_str()));
}
void VodPlayerWindow::onPlayerStateChange(LVPlayerState state, void *pUserData) {
emit appendLog(QString::asprintf("player state changed to %d", state));
}
void VodPlayerWindow::onRenderedFirstFrame(int elapsedTimeInMs, void *pUserData) {
emit appendLog(QString::asprintf("首帧出图耗时: %d ms", elapsedTimeInMs));
}
void VodPlayerWindow::onVideoSizeChanged(int width, int height, void *pUserData) {
emit appendLog(QString::asprintf("视频宽高变化:w=%d h=%d", width, height));
}
void VodPlayerWindow::onVodCompletion(void *pUserData) {
emit appendLog("播放结束");
}
void VodPlayerWindow::onStandardSeiInfoUpdate(const uint8_t *buffer, int length, long timeStamp, void *pUserData) {
emit appendLog(QString::asprintf("收到sei帧长度%d", length));
}
...
// 设置数据源,rtmp地址从云服务获取
pLVVodPlayer_->setDataSource("https://xx.xx.xx.xx/hls/xxx.m3u8");
// 设置解码策略为硬解码优先
pLVVodPlayer_->setDecoderStrategy(LV_DECODER_STRATEGY_HARDWARE_FIRST);
// 设置画面模式为保持宽高
pLVVodPlayer_->setVideoScalingMode(LV_MEDIA_VIDEO_SCALING_MODE_FIT);
// 设置播放停止时画面保留最后一帧
pLVVodPlayer_->setPlayerStoppedDrawingMode(LV_PLAYER_STOPPED_DRAWING_MODE_ALWAYS_KEEP_LAST_FRAME);
...
// 开始播放
LVPlayerCode code = pLVVodPlayer_->start();
if (code == LV_PLAYER_SUCCESS) {
emit appendLog("开始播放成功");
} else {
emit appendLog("开始播放失败");
}
...
// 暂停
pLVVodPlayer_->pause();
...
// 恢复
pLVVodPlayer_->resume();
...
// 停止播放
LVPlayerCode code = pLVVodPlayer_->stop();
if (code == LV_PLAYER_SUCCESS) {
emit appendLog("停止播放成功");
} else {
emit appendLog("停止播放失败");
}
...
// 销毁播放器
destroyLVVodPlayer(&pLVVodPlayer_);
delete pLVGLWidget_;
文档内容是否对您有帮助?