項目需要一個錄屏的功能,之前看到了一個使用Qt計時器+截圖+avilib生成AVI+ffmpeg合并視頻音頻的方式:
建湖ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!Qt C++ 錄屏錄音功能實現(xiàn)(avilib+ffmpeg)以及動態(tài)庫生成
https://blog.csdn.net/qq_35769071/article/details/125323624
使用后,出現(xiàn)不少問題;首先32位的avilib里的pos是有符號的long型,如果要保存的圖片大小大于long型的有效范圍,則會崩潰;如果是1920*1080的分辨率,視頻只能保存2分鐘左右;其次是視頻和音頻是分別錄制的,需要使用ffmpeg.exe合并,如果連續(xù)錄制2個小時,avi和mav的大文件使用ffmpeg合并,可能會出現(xiàn)問題;
同事找到了一個開源的C#例子,Captura-9.0.0-beta4,可以支持選擇區(qū)域錄制;底層是用process調(diào)用的ffmpeg的命令實現(xiàn)的;
還是覺得應(yīng)該使用C++的ffmpeg庫來實現(xiàn)該功能;
同學(xué)推薦了基本ffmpeg的書和以及編譯可用的Windows庫,有需要的可以從下面鏈接下載;
鏈接:https://pan.baidu.com/s/1xnHlS0KLUelzSqT5nUleLg
提取碼:hl1q
這里貼一個ffmpeg實現(xiàn)錄屏的地址;
FFMPEG錄屏(1)----錄制桌面
https://blog.csdn.net/peilinok/article/details/102981560
里面將了ffmpeg的常用使用方式,還有一個錄屏的一個開源代碼:
https://gitcode.net/mirrors/peilinok/screen-recorder?utm_source=csdn_github_accelerator
使用的ffmpeg
遇到的問題:
需要關(guān)閉ffmpeg的日志打印
av_log_set_level(AV_LOG_ERROR);
如果需要錄制擴展屏幕,需要使用Recorder中的record_desktop_duplication類,根據(jù)get_adapters獲取所有的適配器信息,主屏幕的坐標(biāo)是從(0,0)開始的,擴展屏幕是相對主屏幕的坐標(biāo)計算的;
auto adapters = d3d_helper::get_adapters(&error, true);
在函數(shù)get_dst_adapter內(nèi)修改,for內(nèi)邏輯,需要將adapters內(nèi)的每個適配器的信息記錄下來,然后決定錄制那個屏幕;還有一個問題,如果獲取屏幕的縮放比例?
int record_desktop_duplication::get_dst_adapter(IDXGIAdapter ** adapter)
如果主屏幕有縮放,就需要計算出相對于1920*1080的位置,拿我的屏幕舉例:
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧