Qt Qml 开发超高清 4K、8K 视频直播视频客户端
Qt Qml 開發超高清 4K、8K 視頻直播視頻客戶端
Qt Qml 中提供了豐富的多媒體相關的模塊:
| MediaPlayer | 為場景添加音頻/視頻播放功能。 |
| CaptureSession | 創建一個用于捕獲音頻/視頻的會話。 |
| Camera | 訪問連接到系統的相機。 |
| AudioInput | 訪問連接到系統的音頻輸入。 |
| AudioOutput | 訪問連接到系統的音頻輸出(揚聲器、耳機)。 |
| VideoOutput | 顯示視頻內容。 |
| MediaRecorder | 記錄來自 CaptureSession 的音頻/視頻。 |
| ImageCapture | 從相機中捕捉靜止圖像。 |
| Video | 將視頻播放功能添加到場景中, 使用 MediaPlayer 和 VideoOutput 類型來提供視頻播放功能。 |
想要實現視頻客戶端,這里只需使用 VideoOutput 和 MediaPlayer 即可。
一般本地播放的簡單使用如下:
Rectangle {width: 800height: 600color: "black"MediaPlayer {id: playersource: "file://video.webm"videoOutput: videoOutput}VideoOutput {id: videoOutputanchors.fill: parent}}然而這種方式依賴 MediaPlayer,而 MediaPlayer 依賴系統 ( 本機平臺 ) 提供的編解碼器,效果不佳且沒有擴展性,因此我們采用SkeyePlayerPro 做為后端播放器。
關于SkeyePlayerPro
???????是視開科技開發和維護的全功能的流媒體播放器,支持 RTSP、RTMP、HTTP、HLS、UDP、RTP、File 等多種流媒體協議播放、支持本地文件播放,支持本地抓拍、本地錄像、播放旋轉、多屏播放、倍數播放等多種功能特性,核心基于 FFmpeg,穩定、高效、可靠、可控,支持 Windows、Android、iOS 等多個平臺,目前在多家教育、安防、行業型公司,都得到的應用,廣受好評!
- 支持高效 4K / 8K 解碼。
- 支持 CPU 軟解 / GPU 硬解。
- 支持視頻如 H.264,H.265,MPEG4,MJPEG。
- API 簡單好用且易于集成。
Qt 中集成相當容易,.pro 加入下面命令即可:
#SkeyePlayerPro相關LIBS += -L$$PWD/lib/Player \-llibSkeyePlayer \-llibSkeyePlayerProINCLUDEPATH += $$PWD/lib/Player/Src \$$PWD/lib/SkeyePlayer另一方面,想要在 QML 中播放視頻我們需要自己實現一個提供視頻幀的 QML 接口類,有兩種方法:
- 提供 QMediaObject 派生類屬性,該屬性需要具有可用的 QVideoRenderControl ,類似于下面:
- 基于 QObject 的類提供可寫 videoSurface 屬性,可以接受基于 QAbstractVideoSurface 的類,然后傳遞自己的 QVideoFrame 即可,這也正是我使用的方法:
關鍵實現,這里省略了一些 SkeyePlayerPro 的初始化和回調等等設置:
VideoFrameProvider::VideoFrameProvider(QObject *parent): QObject(parent) {connect(this, &VideoFrameProvider::newVideoFrame, this, &VideoFrameProvider::onNewVideoFrameReceived, Qt::QueuedConnection); }QAbstractVideoSurface *VideoFrameProvider::videoSurface() {return m_surface; }void VideoFrameProvider::setVideoSurface(QAbstractVideoSurface *surface) {if (m_surface && m_surface != surface && m_surface->isActive()) {m_surface->stop();}m_surface = surface;if (m_surface && m_format.isValid()) {m_format = m_surface->nearestFormat(m_format);m_surface->start(m_format);} }QString VideoFrameProvider::videoUrl() const {return m_videoUrl; }void VideoFrameProvider::setVideoUrl(const QString &url) {if (m_videoUrl != url) {m_videoUrl = url;emit videoUrlChanged();} }void VideoFrameProvider::setFormat(int width, int heigth, QVideoFrame::PixelFormat pixFormat) {QVideoSurfaceFormat format(QSize(width, heigth), pixFormat);m_format = format;if (m_surface) {if (m_surface->isActive()) {m_surface->stop();}m_format = m_surface->nearestFormat(format);m_surface->start(m_format);} }void VideoFrameProvider::onNewVideoFrameReceived(const char *frame) {int size = 0;int width = m_format.frameWidth();int height = m_format.frameHeight();if (m_format.pixelFormat() == QVideoFrame::Format_YUV420P) {size = width * height * 3 / 2;}QVideoFrame videoFrame(size, QSize(width, height), width, m_format.pixelFormat());if (videoFrame.map(QAbstractVideoBuffer::WriteOnly)) {memmove(videoFrame.bits(), frame, size);videoFrame.unmap();}if (m_surface && m_surface->isActive()) {if (!m_surface->present(videoFrame)) {qDebug() << "VideoFrameProvider Suface Error:" << m_surface->error();}} }int VideoFrameProvider::playCallback(SKEYE_CALLBACK_TYPE_ENUM callbackType, int channelId, void *userPtr, int mediaType, char *buf, SKEYE_FRAME_INFO *frameInfo) {Q_UNUSED(channelId);VideoFrameProvider *_this = reinterpret_cast<VideoFrameProvider *>(userPtr);if (callbackType == SKEYE_TYPE_DECODE_DATA && mediaType == MEDIA_TYPE_VIDEO) {auto frameWidth = frameInfo->width ;auto frameHeight = frameInfo->height;if (buf) {if (!_this->m_initFormat) {_this->setFormat(frameWidth, frameHeight, QVideoFrame::Format_YUV420P);_this->m_initFormat = true;}emit _this->newVideoFrame(buf);}}return 0; }最后將上面的 MediaPlayer 替換為 VideoProvider 即可:
Rectangle {width: 800height: 600color: "black"VideoFrameProvider { id: providersource: "rtsp://192.168.0.33:8554/channel=1"}VideoOutput {id: videoOutputanchors.fill: parentsource: provider}}關于SkeyeARS
SkeyeARS全景AR增強監視系統, 是視開科技開發的一款基于寬場景多路視頻無縫拼接、視頻實時增強、監視目標增強顯示、目標自動跟蹤、視頻存儲回放、遠程數據傳輸和多通道全景視頻同步顯示等功能的綜合視頻AR增強監視系統,廣泛應用于智慧交通、智慧城市、智慧機場等大場景智能監控領域。
詳細說明:http://www.openskeye.cn/web/product/ars
獲取更多信息
郵件:support@openskeye.cn
QQ交流群:102644504
SkeyeVSS綜合安防互聯網無插件播放解決方案
SkeyeARS全景AR增強監視系統解決方案
SkeyeIVMS集群式視頻云管控平臺解決方案
Copyright ? OpenSkeye 2018-2022
總結
以上是生活随笔為你收集整理的Qt Qml 开发超高清 4K、8K 视频直播视频客户端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术胖--前端学习html5表单美化部分
- 下一篇: 全志v3s学习笔记(6)——Bsp内核编