Qt如何实现海康sdk本地播放
这篇文章主要讲解了“Qt如何实现海康sdk本地播放”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Qt如何实现海康sdk本地播放”吧!
成都创新互联公司服务紧随时代发展步伐,进行技术革新和技术进步,经过10多年的发展和积累,已经汇集了一批资深网站策划师、设计师、专业的网站实施团队以及高素质售后服务人员,并且完全形成了一套成熟的业务流程,能够完全依照客户要求对网站进行网站制作、网站设计、建设、维护、更新和改版,实现客户网站对外宣传展示的首要目的,并为客户企业品牌互联网化提供全面的解决方案。
一、前言
海康sdk中包含了MP4解码播放库,对应的API函数都是PlayM4开头的,顾名思义播放MP4,海康的视频默认可以保存成MP4文件,可以用通用的播放器来播放,这就是为啥前面好多篇文章讲到的各种内核录像存储都改成MP4来存储,vlc、mpv、ffmpeg等,最终录像存储都转换成MP4文件,看来大公司大厂做的也是保存成MP4文件,肯定是有他的道理,至于有多少道理,跟着他学者他这样处理就行,可以先不用问不用管,直接上手撸代码就对了,有些东西需要深究原理,而有些东西就没有必要太过于细致询问下去了,折腾下去陷入死胡同,好比知道1+1=2就行,至于为啥=2,交给专门的研究人员去研究就行。
海康sdk的MP4解码库,即支持自身的MP4文件,也支持常规的MP4文件,而且最新版本还支持AVI文件格式,随便试了本地的MP4文件,也都是支持的,如果需要拿到音视频数据,只需要调用PlayM4_SetDecCallBackMend设置下解码回调函数即可,比视频流的回调流程简单很多,少了设置回调处理函数一大堆处理,只需要解码转换成QImage即可。本地文件还需要增加一个文件结束回调,这样能知道什么时候文件播放完成了,发出对应的信号进行处理,可以调用PlayM4_SetFileEndCallback设置文件播放完毕回调函数,在FileEndCallback回调函数中,通过异步执行QMetaObject::invokeMethod停止函数来通知界面。
关于本地文件请注意以下几点:
文件方式播放下,不能调用PlayM4_CloseStream。
流播放下,不能调用PlayM4_CloseFile接口。
流开关接口和文件开关接口不能交叉使用。
二、功能特点
支持播放视频流和本地MP4文件。
支持句柄和回调两种模式。
多线程显示图像,不卡主界面。
自动重连网络摄像头。
可设置边框大小即偏移量和边框颜色。
可设置是否绘制OSD标签即标签文本或图片和标签位置。
可设置两种OSD位置和风格。
可设置是否保存到文件以及文件名。
可直接拖曳文件到haikangwidget控件播放。
支持h364/h365视频流。
可暂停播放和继续播放。
支持存储单个视频文件和定时存储视频文件。
自定义顶部悬浮条,发送单击信号通知,可设置是否启用。
可设置画面拉伸填充或者等比例填充。
可设置解码是速度优先、质量优先、均衡处理。
可对视频进行截图(原始图片)和截屏(视频窗体)。
录像文件存储为MP4文件。
支持焦距控制、云台控制。
可定制功能。
三、效果图
四、核心代码
bool HaiKangThread::playLocal() { //转码以便支持中文路径 QTextCodec *codec = QTextCodec::codecForName("gb2312"); QByteArray data = codec->fromUnicode(url); PlayM4_GetPort(&port); bool ok = PlayM4_OpenFile(port, data.data()); if (ok) { //设置文件播放完毕回调函数 PlayM4_SetFileEndCallback(port, FileEndCallback, this); //回调则可以拿到音视频数据,否则就直接句柄播放 if (callback) { PlayM4_SetDecCallBackMend(port, DecCallBack, (quser)this); PlayM4_Play(port, NULL); } else { PlayM4_Play(port, (HWND)playWidget->winId()); } //同时播放声音 PlayM4_PlaySound(port); //倒放 //PlayM4_ReversePlay(port); //快进播放,多次调用速度更快 //PlayM4_Fast(port); //PlayM4_Fast(port); ok = true; qDebug() << TIMEMS << "打开视频文件成功" << url; } else { qDebug() << TIMEMS << "打开视频文件失败" << url << PlayM4_GetLastError(port); } return ok; } void HaiKangThread::free() { if (isRtsp) { //停止播放+登出设备 NET_DVR_StopRealPlay(hand); NET_DVR_Logout(hand); hand = -1; } else { //停止播放+关闭文件+释放端口 PlayM4_Stop(port); PlayM4_StopSound(); PlayM4_CloseFile(port); PlayM4_FreePort(port); port = -1; } }
感谢各位的阅读,以上就是“Qt如何实现海康sdk本地播放”的内容了,经过本文的学习后,相信大家对Qt如何实现海康sdk本地播放这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
本文标题:Qt如何实现海康sdk本地播放
当前地址:http://ybzwz.com/article/jcodej.html