您好,登錄后才能下訂單哦!
這篇文章主要介紹“Qt mpv讀取和控制怎么實現”,在日常操作中,相信很多人在Qt mpv讀取和控制怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Qt mpv讀取和控制怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
用mpv來讀取文件的信息,以及設置當前播放進度,音量、靜音等,和當時vlc封裝的功能一樣,只不過vlc是通過調用函數接口去處理,而mpv是通過讀取和設置屬性來處理,vlc支持定時器或者線程中函數方法去讀取狀態,也支持事件回調去拿到對應的狀態改變,mpv當然也支持,而且還更方便,主要的工作量或者花費的時間在如何知道有哪些屬性、分別是什么功能含義,這個在官方都列出來了(http://mpv.io/manual/master/#options、http://mpv.io/manual/master/#list-of-input-commands、http://mpv.io/manual/master/#properties),不過都是英文就是,大部分程序員應該是沒有什么難度的,大不了鼠標右鍵翻譯成中文即可,哈哈,相信不少人都這么干過,很多瀏覽器默認就支持鼠標右鍵菜單翻譯的,實在是很方便的,本人在查閱很多英文文檔的時候,用的也是蠻多的,包括Qt官方的文檔和BUG報告頁面,但是建議在搜索問題的時候還是建議盡量用英文的描述去搜索,這樣才能搜索的更精確。
常用的一些屬性:
視頻原始寬度高度 width height
視頻縮放后寬度高度 dwidth dheight
保存視頻文件 stream-record 為空則表示停止錄像
視頻寬高比 video-aspect
暫停播放 pause yes表示暫停no表示繼續
視頻文件時長 duration
靜音 mute yes表示靜音no表示非靜音
音量 volume int值0-100
獲取播放進度 time-pos
設置播放進度 seek
當前音軌 aid
音軌數量 track-list/count
截圖 screenshot-to-file
多線程實時播放視頻流+本地視頻等。
支持windows+linux+mac。
多線程顯示圖像,不卡主界面。
自動重連網絡攝像頭。
可設置是否保存到文件以及文件名。
可直接拖曳文件到mpvwidget控件播放。
支持h365視頻流+rtmp等常見視頻流。
可暫停播放和繼續播放。
支持存儲單個視頻文件和定時存儲視頻文件。
自定義頂部懸浮條,發送單擊信號通知,可設置是否啟用。
可設置畫面拉伸填充或者等比例填充。
可對視頻進行截圖(原始圖片)和截屏。
錄像文件存儲MP4文件。
支持qsv、dxva2、d3d11va等硬解碼。
void MpvThread::readMediaInfo() { if (mpvPlayer != NULL) { QVariant width = getValue("width"); QVariant height = getValue("height"); videoWidth = width.toInt(); videoHeight = height.toInt(); qDebug() << TIMEMS << url << "videoWidth:" << videoWidth << "videoHeight:" << videoHeight; } } void MpvThread::readPlayInfo() { //定義長度變量用于存儲文件時長 uint length = getLength(); //定義變量存儲聲音大小,默認值1 int volume = getVolume(); //定義變量存儲是否靜音 bool mute = getMute(); //發送文件時長信號 emit fileLengthReceive(length); //發送當前音量值信號 emit fileVolumeReceive(volume, mute); //改變標志位啟動讀取播放進度 if (!callbackevent) { isReadPosition = true; } } void MpvThread::readPosition() { //獲取播放進度位置 int position = getPosition(); //獲取是否播放結束 bool isPlay = (position != 0); if (position > 0 && !isRtsp) { emit filePositionReceive(position, isPlay); } //本地文件播放結束 if (!isPlay && !isRtsp && suffix != "dshow") { this->stop(); } } void MpvThread::setSize() { if (mpvPlayer != NULL) { double width = playWidget->width(); double height = playWidget->height(); setValue("video-aspect", width / height); } } bool MpvThread::getIsPlaying() { //在視頻流模式下,不是暫停狀態,當前的位置和上一次的位置一致則表示斷了 //進度為0表示沒有播放成功也需要重新加載 bool isPlay = this->isRunning(); if (isPlay && isRtsp && !getValue("pause").toBool()) { int position = getPosition(); if (position == 0 || this->position == position) { isPlay = false; } this->position = position; } return isPlay; } uint MpvThread::getLength() { uint length = 0; if (mpvPlayer != NULL) { QVariant value = getValue("duration"); length = value.toDouble() * 1000; } return length; } uint MpvThread::getPosition() { uint positon = 0; if (mpvPlayer != NULL) { QVariant value = getValue("time-pos"); positon = value.toDouble() * 1000; } return positon; } void MpvThread::setPosition(int position) { if (mpvPlayer != NULL && !isRtsp) { command(QVariantList() << "seek" << position / 1000 << "absolute"); } } bool MpvThread::getMute() { bool ok = false; if (mpvPlayer != NULL) { QVariant value = getValue("mute"); ok = !value.toBool(); } return ok; } void MpvThread::setMute(bool mute) { if (mpvPlayer != NULL) { setValue("mute", mute ? "yes" : "no"); } } int MpvThread::getVolume() { int volume = 0; if (mpvPlayer != NULL) { QVariant value = getValue("volume"); volume = value.toInt(); } return volume; } void MpvThread::setVolume(int volume) { if (mpvPlayer != NULL) { setValue("volume", volume); } } int MpvThread::getTrack() { int track = 0; if (mpvPlayer != NULL) { QVariant value = getValue("aid"); track = value.toInt(); } return track; } int MpvThread::getTrackCount() { int trackCount = 0; if (mpvPlayer != NULL) { QVariant value = getValue("track-list/count"); trackCount = value.toInt(); } return trackCount; } void MpvThread::setTrack(int track) { if (mpvPlayer != NULL) { setValue("aid", track); } }
到此,關于“Qt mpv讀取和控制怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。