RV1126平臺(Buildroot Linux)+ SunplusIT SPCA2688 USB攝像頭 RTSP推流全流程復盤與問題解決記錄

# RK RV1126平臺(Buildroot Linux)+ SunplusIT SPCA2688 USB攝像頭 RTSP推流全流程復盤與問題解決記錄

一、平臺與需求

- **硬件平臺**:Rockchip RV1126
- **操作系統**:基于Buildroot定制的Linux系統
- **USB攝像頭**:SunplusIT(凌陽創新)SPCA2688
- **目標**:用USB攝像頭采集視頻,在開發板本地搭建RTSP服務器,推流到`rtsp://開發板IP:端口/live/main_stream`,用VLC等播放器實時觀看。
- **要求**:一鍵運行,兼容性好,畫面流暢,適合嵌入式環境。

---

二、操作流程與問題排查(按時間先后)

1. 插入USB攝像頭,識別設備節點

- **操作**:插入SunplusIT SPCA2688 USB攝像頭,系統自動生成多個`/dev/video*`節點。
- **現象**:插入后出現了`/dev/video45`和`/dev/video46`。
- **問題1**:不清楚哪個節點是攝像頭主視頻流,哪個是輔助或元數據流。
- **排查**:
- 拔插攝像頭前后對比`ls /dev/video*`,找出新增節點。
- 用`v4l2-ctl --device=/dev/video45 --all`和`v4l2-ctl --device=/dev/video46 --all`查看詳細信息。
- **結論**:
- `/dev/video45`為主視頻流(支持Video Capture),
- `/dev/video46`為元數據流(只支持Metadata Capture,不支持視頻采集)。

#### 相關報錯:
- 執行`v4l2-ctl --device=/dev/video46 --stream-mmap --stream-count=1 --stream-to=test_video46.raw`報錯:
> unsupported stream type
原因:video46不支持視頻采集,只能采集元數據。
解決:后續所有采集、推流操作都用`/dev/video45`。

2. 內核驅動與設備樹適配流程(補充說明)

- **內核配置**:
- RV1126平臺Linux內核需啟用`CONFIG_USB_VIDEO_CLASS`(UVC驅動)、USB Host支持。
- Buildroot配置時,確保`v4l-utils`、`ffmpeg`等工具鏈集成。
- **設備樹配置**:
- USB攝像頭無需專門節點,只需USB Host控制器在設備樹中`status = "okay"`。
- 典型片段:
```dts
&usb_host0 {
status = "okay";
}?
```
- **驅動識別**:
- 插入攝像頭后,內核自動加載`uvcvideo`驅動。
- `dmesg`日志會顯示攝像頭廠商、型號(如`SunplusIT SPCA2688`),并生成`/dev/video*`節點。
- **實際體驗**:
- 本次SPCA2688插上即用,無需額外適配,體現了UVC類攝像頭的良好兼容性。

---

3. 本地采集與錄制測試

- **操作**:用`ffmpeg`采集攝像頭數據并錄制本地視頻。
- **命令**:
```bash
v4l2-ctl --device=/dev/video45 --set-fmt-video=pixelformat=MJPG,width=640,height=480
ffmpeg -f v4l2 -input_format mjpeg -video_size 640x480 -framerate 15 -i /dev/video45 -t 10 -c:v copy test_local.mp4
```
- **現象**:錄制的視頻用VLC播放正常,無綠屏。

#### 相關報錯:
- 如果直接用YUYV格式錄制為mp4:
> Could not find tag for codec rawvideo in stream #0, codec not currently supported in container
原因:YUYV是原始視頻格式,mp4容器不支持原始rawvideo,需要轉碼或用支持的容器(如avi、mkv),或直接采集MJPEG。
解決:
- 采集MJPEG格式并直接copy到mp4容器。
- 或用`-c:v libx264`轉碼為H264。

---

4. 本地RTSP服務器搭建與推流

- **操作**:下載并運行mediaMTX(原rtsp-simple-server)作為本地RTSP服務器。
- **命令**:
```bash
./mediamtx &
```
- **現象**:日志顯示:
> [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)

#### 相關報錯:
- 日志中出現:
> ERR listen tcp :1935: bind: address already in use
> [RTSP] listener is closing
原因:mediamtx配置文件中RTMP端口(1935)被占用,導致服務異常退出,RTSP服務也隨之關閉。
- **排查**:
- 檢查`mediamtx.yml`配置文件,發現`rtmp: enabled: yes`。
解決:
- 編輯`mediamtx.yml`,將`rtmp: enabled: yes`改為`no`,只啟用RTSP服務。
- 重新啟動mediamtx,確認進程常駐且日志無關閉提示。

5. ffmpeg推流到本地RTSP服務器

- **操作**:用ffmpeg將攝像頭采集的視頻流推送到本地RTSP服務器。
- **命令**:
```bash
ffmpeg -f v4l2 -input_format mjpeg -video_size 640x480 -framerate 15 -i /dev/video45 -c:v copy -f rtsp -rtsp_transport tcp rtsp://127.0.0.1:8554/live/main_stream
```
- **現象**:ffmpeg推流無報錯,VLC可以連接RTSP流。
- **問題**:VLC播放時大部分畫面綠色,只有頂部一小部分正常。


- **排查**:
- 使用和相同的分辨率和幀率,本地錄制后保存到mp4文件,然后使用VLC播放,畫面正常無綠屏。但是推流過去用VLC查看就綠屏,說明MJPEG over RTSP兼容性差,推流到VLC那邊的時候,畫面數據已經不完整了,丟失了。

- 嘗試降低分辨率、幀率,問題依舊。

原因:

  • 攝像頭輸出的MJPEG流有丟包、截斷、幀尾丟失等問題,導致解碼器(VLC)無法正確還原整幀,未解碼部分用綠色填充。
  • VLC對某些MJPEG流的容錯性較差,遇到幀頭/幀尾異常就會綠屏

解決:
- 用ffmpeg將MJPEG流轉碼為H264后再推流,命令如下:
ffmpeg -f v4l2 -input_format mjpeg -video_size 640x480 -framerate 15 -i /dev/video45 \
-c:v libx264 -preset ultrafast -tune zerolatency \
-f rtsp -rtsp_transport tcp rtsp://127.0.0.1:8554/live/main_stream

命令解釋:

  • 前半部分:-f?v4l2?...?-i?/dev/video45
  • 讓ffmpeg從USB攝像頭采集視頻流,格式為MJPEG,分辨率640x480,幀率15fps。
  • 中間部分:-c:v?libx264?-preset ultrafast -tune?zerolatency
  • 讓ffmpeg用x264軟件編碼器,把采集到的MJPEG視頻流轉碼為H264格式。
  • 后半部分:-f rtsp ... rtsp://127.0.0.1:8554/live/main_stream
  • 把編碼好的H264視頻流通過RTSP協議推送到本地RTSP服務器

使用上面這條命令推流,然后使用VLC播放H264 over RTSP流,畫面正常,無綠屏,它的原理是

ffmpeg采集攝像頭數據YUYV(原始未壓縮)或者MJPEG(壓縮)格式?→ 編碼為H264(依賴libx264軟件編碼器) → 通過RTSP協議推流到服務器(mediamtx) → VLC通過RTSP拉流 → VLC軟件內置工具解碼H264 → 顯示畫面

6. 其他常見問題與排查

- **mediamtx下載慢或失敗**:用ghproxy等國內加速服務下載,或手動下載后拷貝到開發板。
- **VLC播放卡頓或無畫面**:降低分辨率/幀率,確保網絡和USB帶寬充足。
- **推流地址錯誤**:推流時用`127.0.0.1:8554`,播放時用開發板實際IP。

最終實現正常推流畫面:

?三、經驗總結與最佳實踐

1. **平臺適配**:RV1126+Buildroot+SPCA2688方案,UVC攝像頭即插即用,內核和設備樹配置簡單。
2. **設備節點識別**:插拔前后對比,結合`v4l2-ctl --all`確認主視頻流節點。
3. **本地錄制優先**:先本地錄制,確認采集和編碼無誤,再推流。
4. **RTSP服務配置**:只啟用RTSP,避免端口沖突導致服務退出。
5. **推流格式選擇**:MJPEG over RTSP兼容性差,H264 over RTSP兼容性好,推薦轉碼推流。
6. **分步排查**:每一步都要驗證,遇到問題逐步定位到設備、采集、推流、協議、播放器等環節。
7. **善用工具**:v4l2-ctl、ffmpeg、mediamtx、VLC等開源工具極大簡化開發和調試。

四、推薦一鍵推流腳本(H264 over RTSP)

bash
#!/bin/bash
# 設置攝像頭為MJPEG格式
v4l2-ctl --device=/dev/video45 --set-fmt-video=pixelformat=MJPG,width=640,height=480
# 啟動mediamtx(如未啟動)
if ! pgrep -f mediamtx > /dev/null; then./mediamtx &sleep 2
fi
# 推流為H264
ffmpeg -f v4l2 -input_format mjpeg -video_size 640x480 -framerate 15 -i /dev/video45 \
-c:v libx264 -preset ultrafast -tune zerolatency \
-f rtsp -rtsp_transport tcp rtsp://127.0.0.1:8554/live/main_stream


五、結語

本次在RV1126平臺(Buildroot Linux)+ SunplusIT SPCA2688 USB攝像頭環境下實現RTSP推流,雖然中間遇到了一些設備節點識別、推流兼容性、服務端口沖突等問題,但通過分步排查和合理選型,最終實現了即插即用、穩定流暢的推流效果。此博客用來記錄和復盤,后續可能還會在rv1126上適配多路攝像頭,會再加個索尼imx415,如果后續有更多需求,如音視頻同步、云端推流等高級功能,可在此基礎上擴展。遇到新問題,建議先本地錄制排查源頭,再逐步定位到推流、協議、播放器等環節。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88421.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88421.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88421.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入理解Java虛擬機:Java內存區域與內存溢出異常

前言Java虛擬機(JVM)的自動內存管理是其核心特性之一,它極大地簡化了開發者的工作,減少了內存泄漏和內存溢出的問題。本文將詳細介紹JVM的自動內存管理機制的內存區域與內存溢出異常問題,包括運行時數據區域、對象的創…

位圖入門算法191. 位1的個數

題目鏈接: 191. 位1的個數 - 力扣(LeetCode) 這道題讓我們找出一個數字中二進制中1的個數,這個題目我們就用1的&來解決,最后一位有0為0,都是1才是1,我們只需要判斷32次即可。 代碼如下&am…

[架構之美]虛擬機Ubuntu密碼重置

[架構之美]虛擬機Ubuntu密碼重置 當您在虛擬機中運行Ubuntu系統時,忘記密碼不再意味著數據丟失!本文將詳細介紹可靠的密碼重置方法,幫助您快速恢復系統訪問權限。 一、虛擬機密碼重置原理與準備 1.1 為什么虛擬機重置密碼更容易 在虛擬機環…

kotlin中withContext,async,launch幾種異步的區別

在 Kotlin 協程中,withContext、async 和 launch 是常用的異步/并發操作函數,它們的主要區別在于用途和返回值:1. launch 作用:啟動一個新的協程,用于執行不返回結果的并發任務。使用場景:適合執行沒有返回…

git 報錯fatal: refusing to merge unrelated histories

解決方案在你操作命令后面加--allow-unrelated-histories 例如: git merge master --allow-unrelated-historiesgit pull或者git push報fatal: refusing to merge unrelated histories 同理: git pull origin master --allow-unrelated-histories

Android 13----在framworks層映射一個物理按鍵

基于Android 13.一、映射步驟確定要映射的物理按鍵值在kl文件中增加鍵值對在InputEventLabels.cpp增加AKEYCODE在keycodes.h中定義AKEYCODE值attrs.xml中增加KEYCODEKeyEvent.java中增加KEYCODE在PhoneManagerWindow等相關類中進行攔截處理相關KEYCODE,屬于具體的業…

【Java EE】Mybatis-Plus

1. 開始先進行和以前一樣的項目配置、數據庫連接配置&#xff0c;在這些基礎上&#xff0c;額外引入 Mybatis-Plus 依賴即可。<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><vers…

各版本操作系統對.NET支持情況(250707更新)

借助虛擬機和測試機&#xff0c;檢測各版本操作系統對.NET的支持情況。 安裝操作系統后&#xff0c;安裝相應運行時并能夠運行星塵代理或幸運四葉草為通過條件。 測試平臺&#xff1a;VMware Workstation 鏡像來源&#xff1a;MSDN I Tell You 參考&#xff1a; .NET Fram…

5-Kafka-replication(副本機制)概念

&#x1f504; Kafka 副本機制&#xff08;Replication&#xff09; 核心概念概念說明Replica (副本)分區的完整拷貝&#xff0c;分布在不同 BrokerReplication Factor副本總數&#xff08;含 Leader&#xff09;&#xff0c;生產環境建議 ≥3Leader Replica處理所有讀寫請求&a…

langgraph的ReAct應用

一、什么是langgraph的ReActLangGraph 中的 ReAct&#xff08;Reasoning Acting&#xff09;代理是一種結合推理與行動能力的 AI 代理架構&#xff0c;通過動態決策鏈實現復雜任務處理。以下是其核心要點及實踐指南。1、ReAct 代理的核心原理1.1工作流程&#xff1a;ReAct 代理…

一個編輯功能所引發的一場知識探索學習之旅(JavaScript、HTML)

文章目錄一個編輯功能所引發的一場知識探索學習之旅&#xff08;JavaScript、HTML&#xff09;1. 一個編輯功能案例2. 知識點探索學習3. 參考資料一個編輯功能所引發的一場知識探索學習之旅&#xff08;JavaScript、HTML&#xff09; 1. 一個編輯功能案例 HTML&#xff1a; &l…

kali制作Windows木馬

環境描述&#xff1a;攻擊機&#xff1a;Kali-2025實驗靶機&#xff1a;Windows11不要攻擊他人&#xff0c;這只是網絡安全實驗還是一樣獲取IP地址制作好之后開服務&#xff0c;上傳下載在靶機右鍵保留下載記得把防火墻&#xff0c;安全中心關了否則無法下載之后就可以kali控制…

從零實現一個GPT 【React + Express】--- 【1】初始化前后端項目,實現模型接入+SSE

摘要 本系列文章主要是實現一個能夠對話以及具有文生圖等功能的模型應用。主要UI界面會參考chat-gpt,豆包等系列應用。模型使用的是gpt開源的大模型。 如果你是一個前端開發工程師需要一個自己的開源項目&#xff0c;可以學習這個系列的文章&#xff0c;不需要有很完整的后端…

【PTA數據結構 | C語言版】在順序表 list 的第 i 個位置上插入元素 x

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將 n 個整數存入順序表&#xff0c;對任一給定整數 x&#xff0c;將其插入順序表中指定的第 i 個位置。注意&#xff1a;i 代表位序&#xff0c;從 1 開始&#xff0c;不是數…

汽車智能化2.0引爆「萬億蛋糕」,誰在改寫游戲規則?

進入2025年&#xff0c;長安、奇瑞、比亞迪等各大主機廠紛紛將智能化推進至全新高度&#xff0c;中國汽車智能化競爭進入了“技術市場生態”綜合較量階段。一方面&#xff0c;各大主機廠全力推進輔助駕駛的規模化普及&#xff0c;掀起了一場關于高階輔助駕駛的“技術平權”革命…

QT 第八講 --- 控件篇 Widget(三)界面系列

前言&#xff1a; 在上一講《QT 第七講 --- 控件篇 &#xff08;二&#xff09;window系列與qrc機制》中&#xff0c;我們探討了應用程序窗口&#xff08;QMainWindow, QWidget&#xff09;的基礎結構、窗口標志、狀態以及Qt強大的資源管理機制&#xff08;.qrc文件&#xff0…

廣州華銳互動:AR 領域的創新與服務先鋒?

&#xff08;一&#xff09;定制化服務? 廣州華銳互動秉持 “以客戶為中心” 理念&#xff0c;為客戶提供高度定制化 AR 解決方案。項目初期&#xff0c;通過多種方式深入了解客戶需求&#xff0c;挖掘痛點。基于需求分析&#xff0c;技術團隊運用自主研發技術和先進算法&…

暑假算法日記第一天

目標?&#xff1a;刷完靈神專題訓練算法題單 階段目標&#x1f4cc;&#xff1a;【算法題單】滑動窗口與雙指針 LeetCode題目:1456. 定長子串中元音的最大數目643. 子數組最大平均數 I1343. 大小為 K 且平均值大于等于閾值的子數組數目2090. 半徑為 k 的子數組平均值2379. 得…

【軟考高項】信息系統項目管理師-第1章 信息化發展(1.5 數字化轉型與元宇宙、1.6 標題類知識點、1.7 十四五規劃內容匯總)

文章大綱 第1章 信息化發展1.5 數字化轉型與元宇宙1.5.1 數字化轉型1.5.2 元宇宙1.6 標題類知識點1.7 十四五規劃內容匯總1.8 10道試題第1章 信息化發展 學習建議: 此章內容大部分為新增內容,基本是全新的章節2023年5月考試2分選擇,5分案例2023年下半年各批次選擇題2分左右1.…

STM32F103C8T6單片機內部執行原理及啟動流程詳解

引言&#xff1a;為什么深入理解STM32啟動流程很重要&#xff1f;STM32F103C8T6作為嵌入式開發中最常用的單片機之一&#xff0c;其內部執行原理和啟動流程是理解嵌入式系統底層運行機制的核心。無論是開發Bootloader、調試HardFault異常&#xff0c;還是優化系統啟動速度&…