全攻略)
簡(jiǎn)介虛擬攝像頭軟件資源包專為視頻會(huì)議、在線教學(xué)、直播互動(dòng)等場(chǎng)景打造面向需要替代物理攝像頭或豐富畫面表現(xiàn)力的普通用戶、主播及遠(yuǎn)程辦公人群。該軟件通過模擬標(biāo)準(zhǔn)攝像頭驅(qū)動(dòng)可被各類主流攝像頭應(yīng)用無(wú)縫識(shí)別無(wú)需額外硬件即可開啟實(shí)時(shí)濾鏡、虛擬背景、綠幕摳像、多視頻源合成等功能大幅提升線上溝通的個(gè)性化與專業(yè)度。資源包采用zip壓縮共四個(gè)文件整體約10.64MB內(nèi)含主程序exe安裝包、htm格式說明文檔、txt更新備注及官方站點(diǎn)快捷方式解壓后運(yùn)行安裝程序即可完成部署對(duì)照說明文檔可快速掌握特效設(shè)置與背景替換操作memo.txt中的更新日志也能幫助用戶了解版本變化。目前已有735人學(xué)習(xí)下載資源體積小巧、部署簡(jiǎn)單適合從入門到進(jìn)階的用戶作為日常直播、線上教學(xué)及遠(yuǎn)程會(huì)議的實(shí)用工具儲(chǔ)備。1. 虛擬攝像頭軟件它解決的不是驅(qū)動(dòng)問題而是“信號(hào)從哪來(lái)”的問題很多人第一次搜“虛擬攝像頭軟件”以為是要找一個(gè)能偽裝攝像頭驅(qū)動(dòng)的工具實(shí)際拿到手里才發(fā)現(xiàn)虛擬攝像頭的本質(zhì)是在系統(tǒng)里憑空多出一個(gè)/dev/video設(shè)備節(jié)點(diǎn)讓任何調(diào)用攝像頭的軟件——視頻會(huì)議、直播推流、AI數(shù)字人、網(wǎng)課錄制——都能像讀取真實(shí)攝像頭一樣讀取這個(gè)節(jié)點(diǎn)。而節(jié)點(diǎn)背后的數(shù)據(jù)源可以是視頻文件、網(wǎng)絡(luò)流、游戲畫面甚至另一個(gè)攝像頭。因此它最大的價(jià)值不在“偽裝”而在“搬移”把不易直接采集的信號(hào)轉(zhuǎn)為標(biāo)準(zhǔn)攝像頭接口。以下內(nèi)容適合直播運(yùn)營(yíng)、數(shù)字人開發(fā)者、經(jīng)常做會(huì)議錄制的個(gè)人用戶也適合跟攝像頭數(shù)據(jù)打交道的嵌入式開發(fā)者。本文要拆的方案以 Linux 下的v4l2loopback加FFmpeg為主線從選型、實(shí)操一直講到最容易翻車的邊界問題。2. 選型與原理為什么最終落在 V4L2loopback 與 FFmpeg 組合上2.1 三類主流方案瀏覽器插件、驅(qū)動(dòng)虛擬化、內(nèi)核模塊做虛擬攝像頭這件事不同平臺(tái)有不同生態(tài)按實(shí)現(xiàn)層級(jí)大致可以分三類。第一類是應(yīng)用層虛擬方案代表性的是 OBS 自帶的 Virtual Camera。它由 OBS 在運(yùn)行時(shí)創(chuàng)建一個(gè)虛擬視頻設(shè)備把當(dāng)前合成畫面以攝像頭接口輸出給其他應(yīng)用。優(yōu)點(diǎn)是用戶界面直觀、不用寫命令缺點(diǎn)是設(shè)備生命周期完全跟著 OBS 走OBS 一退出虛擬攝像頭立即消失而且它的輸出格式和分辨率其實(shí)被 OBS 的合成設(shè)置鎖定了靈活性有限。適合只需要把 OBS 畫面共享給另一款軟件的用戶。第二類是驅(qū)動(dòng)層虛擬方案常見于 Windows 生態(tài)通過安裝一個(gè)虛擬攝像頭驅(qū)動(dòng)讓系統(tǒng)枚舉出新的攝像頭設(shè)備。這類方案格式支持相對(duì)完整但很多驅(qū)動(dòng)閉源、帶水印或者依賴特定版本的系統(tǒng)框架換一臺(tái)機(jī)器就可能踩到驅(qū)動(dòng)簽名問題。適合不想深入命令行的用戶但對(duì)做自動(dòng)化的從業(yè)者來(lái)說它最大的問題是難以腳本化。第三類是內(nèi)核模塊方案也就是本文要展開的v4l2loopback。它在 Linux 內(nèi)核里直接創(chuàng)建一個(gè) V4L2 回環(huán)設(shè)備寫入端和讀取端都是標(biāo)準(zhǔn)的file I/O配合 FFmpeg 的v4l2sink輸出模塊任何 FFmpeg 能讀的信號(hào)都能轉(zhuǎn)成攝像頭信號(hào)。三者對(duì)比維度很清晰方案數(shù)據(jù)源靈活性生命周期腳本化程度跨平臺(tái)典型場(chǎng)景OBS Virtual Camera限 OBS 畫面隨 OBS 退出弱三平臺(tái)會(huì)議、錄播Windows 虛擬驅(qū)動(dòng)依賴配套工具常駐中等Windows直播、娛樂v4l2loopback FFmpeg一切 FFmpeg 可讀源自行控制完全腳本化LinuxAI數(shù)字人、無(wú)人直播、測(cè)試、錄播2.2 內(nèi)核回環(huán)設(shè)備的兩個(gè)本質(zhì)數(shù)據(jù)通道與格式協(xié)商v4l2loopback的工作邏輯不復(fù)雜加載模塊后系統(tǒng)里多出一批/dev/video設(shè)備比如/dev/video20。任何有權(quán)限的進(jìn)程都能用標(biāo)準(zhǔn) V4L2 接口向這個(gè)節(jié)點(diǎn)寫入幀數(shù)據(jù)而普通軟件打開這個(gè)節(jié)點(diǎn)時(shí)看到的是一個(gè)帶完整格式描述的攝像頭。它本質(zhì)是一個(gè)內(nèi)存回環(huán)的數(shù)據(jù)通道并不是真正的硬件采集所以不涉及信號(hào)轉(zhuǎn)換也不會(huì)憑空對(duì)畫面做提升。數(shù)據(jù)源是什么質(zhì)量輸出就是什么質(zhì)量這一點(diǎn)是排查后續(xù)很多問題的基礎(chǔ)。第二個(gè)本質(zhì)與格式協(xié)商有關(guān)。真實(shí) USB 攝像頭通常通過 UVC 協(xié)議上報(bào)多種分辨率和像素格式虛擬攝像頭則需要由寫入端先聲明格式讀取端才能協(xié)商成功。v4l2loopback默認(rèn)提供YUYV等幾種格式如果寫入端和讀取端沒能協(xié)商到同一個(gè)像素格式畫面就會(huì)黑屏或報(bào)錯(cuò)。這也是后面反復(fù)提到pix_fmt參數(shù)的原因。2.3 安裝與初始化加載模塊的完整命令與參數(shù)含義以 Ubuntu 22.04 LTS 這類常見發(fā)行版為例安裝路徑如下sudo apt-get update sudo apt-get install -y v4l2loopback-dkms v4l2loopback-utils ffmpeg sudo modprobe v4l2loopback video_nr20,21 card_labelVirtualCam,VirtualCam2 exclusive_caps1這段命令做了三件事安裝 DKMS 模塊與工具、加載內(nèi)核模塊、創(chuàng)建兩個(gè)編號(hào)為 20 和 21 的虛擬攝像頭。video_nr用來(lái)指定設(shè)備節(jié)點(diǎn)編號(hào)之所以從 20 開始是為了避開真實(shí)攝像頭通常占用的 0 到 10 號(hào)段card_label給設(shè)備起名字方便在會(huì)議軟件里區(qū)分exclusive_caps表示設(shè)備支持排他性能力聲明能讓多數(shù)軟件正確讀到設(shè)備支持的分辨率列表。模塊加載后務(wù)必做一次驗(yàn)證ls -l /dev/video* v4l2-ctl --list-devices執(zhí)行后能看到VirtualCam設(shè)備掛在/dev/video20和/dev/video21下。如果沒有出現(xiàn)先查內(nèi)核日志dmesg | grep v4l2大部分情況是exclusive_caps參數(shù)與驅(qū)動(dòng)版本不兼容導(dǎo)致注冊(cè)失敗。注意modprobe重啟后失效如果是生產(chǎn)環(huán)境需要開機(jī)自啟應(yīng)該把參數(shù)寫入/etc/modules-load.d/modules.conf與/etc/modprobe.d/v4l2loopback.conf后面第 6 章會(huì)給完整配置。3. 把普通視頻文件變成攝像頭信號(hào)FFmpeg 到 V4L2 的實(shí)操與參數(shù)邊界3.1 單文件無(wú)限循環(huán)推流v4l2sink 用法的核心三件套有了虛擬設(shè)備之后第一個(gè)落地場(chǎng)景是把一個(gè) MP4 文件變成“正在播放的攝像頭畫面”。這常用于無(wú)人直播、數(shù)字人循環(huán)播報(bào)或者某項(xiàng)目需要長(zhǎng)時(shí)間用同一段視頻喂給算法做調(diào)試。核心命令如下ffmpeg -re -stream_loop -1 -i input.mp4 \ -f v4l2 -vcodec rawvideo -pix_fmt yuyv422 \ -video_size 1280x720 -framerate 30 \ /dev/video20第一行的-re讓 FFmpeg 按視頻原始幀率勻速讀取沒有它 FFmpeg 會(huì)以最大速度把文件跑完幾秒就結(jié)束-stream_loop -1讓輸入無(wú)限循環(huán)二者合在一起就是“以正常播放速度無(wú)限循環(huán)”。若不希望無(wú)限循環(huán)把-1改成2即可循環(huán)三次。第二行是輸出端設(shè)置-f v4l2表示輸出到 V4L2 設(shè)備-vcodec rawvideo表示不做壓縮直接把原始幀交給虛擬設(shè)備只占內(nèi)存不占 CPU-pix_fmt yuyv422是一種常見的 YUV 色彩格式v4l2loopback對(duì)它的兼容性最好。這里把像素格式顯式寫死很重要如果省略FFmpeg 默認(rèn)可能輸出yuv420p雖然讀取端軟件能識(shí)別多數(shù)情況但遇到對(duì)格式挑剔的軟件就會(huì)黑屏。-video_size和-framerate分別指定輸出分辨率和幀率這兩個(gè)參數(shù)決定軟件端能看到多少路可選格式。執(zhí)行后打開任一款視頻軟件選擇/dev/video20應(yīng)該能直接看到視頻畫面。如果想同時(shí)傳輸聲音虛擬攝像頭本身只承載畫面音頻需要額外創(chuàng)建 ALSA 回環(huán)設(shè)備把聲音從聲卡采集點(diǎn)到虛擬麥克風(fēng)這一部分在常見做法里用snd-aloop完成此處不過度展開。3.2 分辨率與像素格式的邊界為什么有些軟件總是黑屏上一個(gè)命令看起來(lái)簡(jiǎn)單實(shí)際使用中大量反饋來(lái)自格式協(xié)商失敗。用下面的命令可以看到虛擬設(shè)備實(shí)際支持的報(bào)告格式v4l2-ctl -d /dev/video20 --list-formats-ext輸出會(huì)列出驅(qū)動(dòng)聲明的像素格式說明軟件端枚舉攝像頭的能力時(shí)讀到的是這份清單。問題在于FFmpeg 寫入時(shí)如果指定了清單里不存在的格式寫入可能仍然成功但讀取端的軟件在協(xié)商時(shí)就會(huì)失敗。通常的表現(xiàn)是 VLC 能打開畫面某會(huì)議軟件卻始終黑屏。我一般把-pix_fmt yuyv422作為首選項(xiàng)因?yàn)?V4L2 軟件大多原生支持如果目標(biāo)軟件對(duì)帶寬有要求可以嘗試-pix_fmt mjpeg讓攝像頭設(shè)備以 MJPEG 壓縮流輸出數(shù)據(jù)此時(shí)-vcodec mjpeg -q:v 5一起配合畫質(zhì)約等于 JPEG 質(zhì)量 5。以下是常用場(chǎng)景的參數(shù)參考場(chǎng)景分辨率幀率像素格式備注視頻會(huì)議1280x72025~30yuyv422兼容性優(yōu)先直播平臺(tái)1920x108030mjpeg帶寬敏感選此數(shù)字人播報(bào)1080x192030yuyv422豎屏輸出算法調(diào)試640x48015yuyv422低負(fù)載3.3 把 RTSP 網(wǎng)絡(luò)流或真實(shí)攝像頭二次分發(fā)成虛擬攝像頭信號(hào)文件循環(huán)只是基礎(chǔ)真正體現(xiàn)擴(kuò)展性的是把任意實(shí)時(shí)流“掛”到虛擬攝像頭上。直播采集場(chǎng)景中一個(gè)常見的需求是把網(wǎng)絡(luò)攝像頭的 RTSP 流轉(zhuǎn)成軟件能直接調(diào)用的攝像頭設(shè)備省去采集卡硬件。命令如下ffmpeg -i rtsp://192.168.1.64:554/stream1 \ -f v4l2 -vcodec rawvideo -pix_fmt yuyv422 \ -video_size 1920x1080 -framerate 25 \ /dev/video20這里沒有-re因?yàn)榫W(wǎng)絡(luò)流本身就是實(shí)時(shí)到達(dá)。如果 RTSP 源不穩(wěn)定在-i前面加-rtsp_transport tcp強(qiáng)制走 TCP 通道能大幅降低花屏概率。這個(gè)方案可以讓多個(gè)下游應(yīng)用同時(shí)讀取同一個(gè)視頻源相當(dāng)于做了一分多路分發(fā)而真實(shí)攝像頭通常只有一個(gè)節(jié)點(diǎn)這樣做非常實(shí)用。4. 多層信號(hào)疊加用 FFmpeg Filtergraph 給虛擬攝像頭加水印、畫中畫與動(dòng)態(tài)字幕4.1 overlay 濾鏡把 Logo 疊加到輸出流生成內(nèi)容直接轉(zhuǎn)給攝像頭往往不夠直播和數(shù)據(jù)錄制場(chǎng)景最常見的需求是打水印。FFmpeg 的 filtergraph 可以在編碼前的最后一級(jí)處理幀疊加透明 Logo、文字或另一路視頻。先看最簡(jiǎn)單的靜態(tài)水印ffmpeg -re -stream_loop -1 -i bg.mp4 \ -i logo.png \ -filter_complex [1:v]scale160:-1[logo];[0:v][logo]overlayW-w-20:H-h-20[out] \ -map [out] \ -f v4l2 -vcodec rawvideo -pix_fmt yuyv422 \ -video_size 1280x720 -framerate 30 \ /dev/video20[1:v]scale160:-1[logo]先把 Logo 等比縮放到寬 160 像素overlayW-w-20:H-h-20將它放在畫面的右下角距離邊距 20 像素。W和w分別表示主畫面與疊加畫面的寬度同理H與h是高度。-map [out]告訴 FFmpeg 從 filtergraph 的輸出取流這一步非常容易漏漏了會(huì)看到原始畫面被直接輸出。參數(shù)上真正值得調(diào)試的是位置右上角是overlayW-w-20:20左上角是overlay20:20左下角是overlay20:H-h-20。如果想加透明度先用formatrgba重設(shè)格式再通過調(diào)節(jié) PNG 的 alpha 通道實(shí)現(xiàn)FFmpeg 本身不直接提供統(tǒng)一的透明度滑塊。4.2 豎屏適配與畫中畫把兩路攝像頭合成一路輸出做無(wú)人直播或數(shù)字人時(shí)往往需要把主攝像頭畫面和一段錄屏或產(chǎn)品展示畫面拼在一個(gè)輸出里。虛似攝像頭只輸出一路信號(hào)但 filtergraph 可以把多路輸入合成到同一路。下面是一個(gè)左下角畫中畫的例子ffmpeg -re -stream_loop -1 -i main.mp4 \ -re -stream_loop -1 -i pip.mp4 \ -filter_complex \ [1:v]scale320:-1[pip];[0:v][pip]overlay20:H-h-20[out] \ -map [out] \ -f v4l2 -vcodec rawvideo -pix_fmt yuyv422 \ -video_size 1280x720 -framerate 30 \ /dev/video20這串命令的核心變量是overlay的坐標(biāo)。20:H-h-20讓子畫面橫向從左邊 20 像素開始縱向貼底。做直播時(shí)豎屏比例1080x1920常用scale360:-1。需要精確控制子畫面尺寸時(shí)建議在scale里顯式寫高避免-1自動(dòng)計(jì)算帶來(lái)的誤差。4.3 drawtext 濾鏡把時(shí)間戳與滾動(dòng)字幕實(shí)時(shí)打進(jìn)畫面比靜態(tài)水印更進(jìn)一步的是動(dòng)態(tài)文字。FFmpeg 的drawtext濾鏡可以把系統(tǒng)時(shí)間、自定義文本、甚至從文件讀取的滾動(dòng)內(nèi)容繪制到幀上。一個(gè)帶實(shí)時(shí)時(shí)間戳的攝像頭輸出如下ffmpeg -re -stream_loop -1 -i main.mp4 \ -filter_complex \ [0:v]drawtexttext%{localtime\:%Y-%m-%d %H\\:%M\\:%S}:fontfile/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc:fontcolorwhite:fontsize32:x20:y20[out] \ -map [out] \ -f v4l2 -vcodec rawvideo -pix_fmt yuyv422 \ -video_size 1280x720 -framerate 30 \ /dev/video20%{localtime}是時(shí)間占位符冒號(hào)需要轉(zhuǎn)義成\\:否則 filtergraph 解析會(huì)提前截?cái)?。字體路徑必須真實(shí)存在推薦中文字體里用文泉驛或者 Noto Sans CJK否則中文會(huì)變成方塊。把text換成textfilesubtitle.txt就能從文件讀取內(nèi)容適合做滾動(dòng)公告欄。注意fontsize與虛擬攝像頭分辨率匹配720p 下 32 像素比較合適1080p 可以調(diào)到 48。5. 常見問題排查五個(gè)把新手卡死的現(xiàn)象與對(duì)應(yīng)解法虛擬攝像頭本身不復(fù)雜但組合了 FFmpeg、內(nèi)核模塊、調(diào)用端軟件之后排錯(cuò)鏈條變長(zhǎng)易踩的坑高度集中在這五類。5.1 某個(gè)軟件里黑屏另一個(gè)軟件卻有畫面現(xiàn)象VLC 或打開/dev/video20用自帶播放器能看到畫面但某會(huì)議軟件或直播軟件始終黑屏。原因調(diào)用端軟件列舉了虛擬設(shè)備聲明的格式后優(yōu)先選中了某種 FFmpeg 未寫入的格式。解決先運(yùn)行v4l2-ctl -d /dev/video20 --list-formats-ext確認(rèn)支持格式然后顯式給 FFmpeg 加-pix_fmt yuyv422如果軟件優(yōu)先選 MJPEG則用-vcodec mjpeg -pix_fmt mjpeg輸出壓縮流并縮小分辨率減少帶寬壓力。5.2 推流進(jìn)程退出后設(shè)備被占用無(wú)法重新綁定現(xiàn)象第一次運(yùn)行 FFmpeg 推流后按CtrlC結(jié)束再次執(zhí)行相同的寫入命令報(bào)錯(cuò)Device or resource busy。原因進(jìn)程退出但 V4L2 文件描述符未被完全釋放或內(nèi)核模塊的引用計(jì)數(shù)仍然大于 0。解決先用lsof /dev/video20找到占用進(jìn)程并結(jié)束再用sudo rmmmod v4l2loopback sudo modprobe v4l2loopback重置模塊狀態(tài)。若想徹底規(guī)避在 FFmpeg 命令前面加-re的同時(shí)為進(jìn)程配置timeout讓系統(tǒng)定期清理僵死進(jìn)程。5.3 重啟后設(shè)備節(jié)點(diǎn)消失腳本依賴的設(shè)備不存在現(xiàn)象腳本里寫死了/dev/video20重啟后提示找不到設(shè)備。原因modprobe加載的模塊只在當(dāng)前會(huì)話有效且設(shè)備編號(hào)可能因真實(shí)攝像頭枚舉順序而改變。解決把模塊參數(shù)持久化到/etc/modprobe.d/v4l2loopback.conf內(nèi)容寫上options v4l2loopback video_nr20,21 card_labelVirtualCam,VirtualCam2 exclusive_caps1并在/etc/modules-load.d/modules.conf中加入v4l2loopback。這樣系統(tǒng)啟動(dòng)時(shí)自動(dòng)創(chuàng)建且編號(hào)穩(wěn)定。5.4 FFmpeg 報(bào)Unknown input format: v4l2或v4l2sink不存在現(xiàn)象執(zhí)行推流命令時(shí)提示無(wú)法識(shí)別 V4L2 格式。原因FFmpeg 編譯時(shí)未開啟 V4L2 支持常見于精簡(jiǎn)版或靜態(tài)編譯版本。解決用發(fā)行版源安裝ffmpeg或自定義編譯時(shí)加入--enable-libv4l2 --enable-indevv4l2 --enable-outdevv4l2。驗(yàn)證方式ffmpeg -devices | grep v4l2能看到v4l2表示輸入輸出都支持。5.5 推流正常但畫面明顯卡頓CPU 占用過高現(xiàn)象畫面像幻燈片top看到 ffmpeg 進(jìn)程占用超過 100%。原因-re沒加文件讀到多快輸出多快或輸出是rawvideo但分辨率過高導(dǎo)致內(nèi)存拷貝壓力大。解決確認(rèn)輸入拉流命令里有-re降低-framerate到 25或切換-vcodec mjpeg減少原始數(shù)據(jù)量。做長(zhǎng)時(shí)間直播時(shí)優(yōu)先用 MJPEG 而非yuyv422能降低一倍以上內(nèi)存占用。6. 一個(gè)更順手的用法把虛擬攝像頭做成開機(jī)即用的“虛擬導(dǎo)播臺(tái)”前面幾章的命令都是單次執(zhí)行真正操作起來(lái)你會(huì)發(fā)現(xiàn)每次開會(huì)或直播前重復(fù)敲一長(zhǎng)串 FFmpeg 參數(shù)很容易犯錯(cuò)。這里給出我自己的習(xí)慣做法用一個(gè)腳本統(tǒng)一管理推流進(jìn)程把常用模式固化成預(yù)設(shè)開機(jī)自動(dòng)拉起。VIDEO_DEV/dev/video20 LOGFILE$HOME/.vcam/vcam.log start_loop() { local MEDIA$1 pkill -f ffmpeg.*$VIDEO_DEV 2/dev/null ffmpeg -re -stream_loop -1 -i $MEDIA \ -filter_complex drawtexttext%{localtime\\:%H\\\\:%M\\\\:%S}:fontfile/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc:fontcolorwhite:fontsize32:x20:y20[out] \ -map [out] \ -f v4l2 -vcodec rawvideo -pix_fmt yuyv422 \ -video_size 1280x720 -framerate 30 \ $VIDEO_DEV $LOGFILE 21 echo loop mode started with $MEDIA } start_camera_mirror() { pkill -f ffmpeg.*$VIDEO_DEV 2/dev/null ffmpeg -f v4l2 -i /dev/video0 \ -f v4l2 -vcodec rawvideo -pix_fmt yuyv422 \ -video_size 1280x720 -framerate 30 \ $VIDEO_DEV $LOGFILE 21 echo camera mirror mode started } case $1 in demo) start_loop $HOME/videos/demo.mp4 ;; mirror) start_camera_mirror ;; stop) pkill -f ffmpeg.*$VIDEO_DEV echo stopped ;; *) echo usage: $0 {demo|mirror|stop} ;; esac腳本里的關(guān)鍵設(shè)計(jì)是pkill -f ffmpeg.*$VIDEO_DEV它只殺與當(dāng)前虛擬設(shè)備相關(guān)的 FFmpeg 進(jìn)程不影響其他視頻處理任務(wù)。LOGFILE用來(lái)記錄輸出如果出錯(cuò)可以快速查日志而不是黑屏后無(wú)據(jù)可循。drawtext里的轉(zhuǎn)義看起來(lái)丑但冒號(hào)必須這樣處理建議調(diào)試時(shí)先不加工字確認(rèn)推流正常再逐步加濾鏡。把這段腳本存成vcam.sh放到/usr/local/bin再配合第 2 章的 modules 持久化配置這樣開機(jī)流程就是系統(tǒng)加載v4l2loopback模塊創(chuàng)建虛擬設(shè)備然后你的業(yè)務(wù)系統(tǒng)隨時(shí)可以調(diào)用vcam.sh demo一鍵切到循環(huán)播放模式。這條鏈路里每一步都踩過坑從那以后我每次改完腳本都會(huì)強(qiáng)制走一遍完整驗(yàn)證重啟系統(tǒng)、檢查設(shè)備節(jié)點(diǎn)、切換模式、確認(rèn)畫面、看日志。這一套流程雖然看起來(lái)多幾步但能在真正推流前把問題都篩掉。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取