摘要
本文概要記錄於Ubuntu作業系統啟動一個Docker容器來透過OpenCV函式庫進行攝影機畫面擷取並傳遞到VLC多媒體播放器的步驟。
本文
本文於Ubuntu 24.04作業系統上,參考這裡來安裝Docker引擎,隨後便執行另一版Ubuntu的Docker容器,於該容器上安裝OpenCV (Open Source Computer Vision Library)函式庫,接著使用Python程式搭配OpenCV來進行攝影機畫面擷取,擷取完的畫面將透過管線(pipe)傳遞至VLC多媒體播放器;其中,Docker容器的概念可以參考這裡,至於使用的攝影機為PlayStation Eye。
終端機(terminal)操作步驟分述如下:
- 啟動容器
- 安裝OpenCV
- 安裝VLC
- 執行Python程式以進行攝影機畫面擷取並透過管線傳遞至VLC
- VLC直接播放畫面
- VLC轉換後以群播形式播放串流
- VLC轉換後以獨播形式播放串流,之1
- VLC轉換後以獨播形式播放串流,之2
- 完成
步驟已條列在這裡,其中包含了攝影機畫面擷取的原始碼。
啟動容器
包含以下指令,分別是拉取映象檔、及實例化映象檔為一個容器;這裡的映象檔版本為jammy標籤的ubuntu(即Ubuntu 22.04)。
docker pull ubuntu:jammy
docker run --name ubuntu-inst -it -e DISPLAY --net=host -v $XAUTHORITY:/root/.Xauthority --privileged=true -v ~/Downloads:/experiment ubuntu:jammy bash
安裝OpenCV
apt-get update
apt-get install python3-opencv
安裝VLC
apt-get install vlc
執行Python程式以進行攝影機畫面擷取並透過管線傳遞至VLC
由於目前容器的使用者為root、但VLC預設不容許以root身分執行,所以參考這裡來更改VLC容許以root身分執行
sed -i 's/geteuid/getppid/' /usr/bin/vlc
VLC直接播放畫面
cd /experiment
python3 capture.py | cvlc --demux=rawvideo --rawvid-fps=25 --rawvid-width=640 --rawvid-height=480 --rawvid-chroma=RV24 - --sout '#display'
VLC轉換後以群播形式播放串流
python3 capture.py | cvlc --demux=rawvideo --rawvid-fps=30 --rawvid-width=640 --rawvid-height=480 --rawvid-chroma=RV24 - --sout '#transcode{vcodec=mp4v,acodec=none}:rtp{mux=ts,dst=224.1.1.102,port=5004}'
VLC轉換後以獨播形式播放串流,之1
python3 capture.py | cvlc --demux=rawvideo --rawvid-fps=30 --rawvid-width=640 --rawvid-height=480 --rawvid-chroma=RV24 - --sout '#transcode{vcodec=mp4v,acodec=none}:standard{access=http,mux=ts,dst=:3333}'
VLC轉換後以獨播形式播放串流,之2
python3 capture.py | cvlc --demux=rawvideo --rawvid-fps=30 --rawvid-width=640 --rawvid-height=480 --rawvid-chroma=RV24 - --sout '#transcode{vcodec=theo,vb=4096,acodec=none,scale=1}:standard{access=http,mux=ogg,dst=:3333/stream.ogg}'
其中,原始碼內容(即capture.py)如下。
至於OpenCV和VLC的版本如下。
完成
包含以下指令,即離開(容器context)、刪除容器、和移除映象檔。
exit
docker rm -f ubuntu-inst
docker rmi ubuntu:jammy
參考文獻
https://gist.github.com/okdimok/465039e582f2b9810674952eeda85436
https://unix.stackexchange.com/questions/125546/how-to-run-vlc-player-in-root
沒有留言:
張貼留言