Software engineering notes

Raspberry Pi camera RTSP

什麼是 RTP/RTCP/RTSP/RTMP

RTMP vs RTSP

WebRTC

WebRTC Google 推的協定, 主要應用在 Browser 上的影印串流 i.e. 視訊聊天

什麼是 live555

是一套 C++ 的函式庫, 可以實作出 RTSP/RTP server, VLC 是基於此函式庫開發的

支援傳輸方式

支援的影音格式

Install live555

Easiest way is first ensure you have the appropriate compiler:

sudo apt-get install build-essential

then make sure you don’t have the repository live555 libraries on your system:

sudo apt-get remove liblivemedia-dev

and finally download, build and install the libraries:

cd /tmp
wget http://www.live555.com/liveMedia/public/live555-latest.tar.gz
tar xvf live555-latest.tar.gz
cd live
./genMakefiles linux
make
sudo cp -r /tmp/live /usr/lib
make clean

啟動 RTSP server

將影音檔 (h.264, mp4 etc..) copy 到 /usr/lib/live/mediaServer

h.264 副檔名為 .264, mp4 副檔名為 .m4e

執行

cd /usr/lib/live/mediaServer
./live555MediaServer

安裝並打開 VLC 播放器, 選擇播放網路串流,

輸入 : rtsp://54.250.138.78:8554/akb.m4e

建議在 /usr/lib/live/mediaServer 建立 my_video 資料夾, 將影音與程式分開 (rtsp://54.250.138.78:8554/my_video/akb.m4e)

用 Raspberry Pi camera 播放即時影像

此方法太沒效率了, 不建議使用

啟動 RTSP server 及接收 Raspberry Pi 傳來的資料儲存成檔案:

cd /usr/lib/live/mediaServer/my_video
touch rpi.264
nc -l 8080 | pv -b > rpi.264

將 camera 的影像傳到遠端 server :

raspivid -t 999999 -h 180 -w 270 -o - | pv -b | nc 54.250.138.76 8080

VLC -> open network : rtsp://54.250.138.78:8554/my_video/rpi.264

原本想要做一個能讓很多人同時看即時影像的 server, 所以將 Raspberry Pi 的串流丟到外面的 server, 但效果不太好, 傳輸速率很慢, 即使不用 wifi 傳輸也一樣很慢, 大概過 10 幾秒才能看到影像 (這已經是將影像的畫質調到很低的狀態下)

Troubleshootings

發生錯誤 : StreamParser internal error (149997 + 4 > 150000) Aborted (core dumped)

原因 : 傳送一幀非常大的 H.264 影像 (default 150000) 造成的

查到的解決方法 :

修改 /usr/lib/live/liveMedia/StreamParser.cpp,

找到 BANK_SIZE 建議將值設為 150000~300000 之間

改完要 compile :

cd /usr/lib/live
sudo make

其他

現在多數瀏覽器支援播放 H.264 影片但可惜沒有瀏覽器的 HTML5 播放器支援播放 RTSP 串流影片, 所以只能透過像 VLC 這種播放器來播放,

目前 RTMP 應該算是 live streaming 的通用解, 看來要擺脫 flash 還有很長一段路要走

比較可惜的還有 webm (vp8) 無法普及, 不然它的編解碼效率也很不錯, 重要的是它是開源的

市面上常見的 player 比較 :

ref: http://ubuntuforums.org/showthread.php?t=1324290 http://www.raspberrypi.org/phpBB3/viewtopic.php?&t=52071