樹莓派使用 HLS 實現視頻流直播


說明

這次介紹一下基於上一篇文章“樹莓派編譯安裝 FFmpeg ”的應用,即 HLS 視頻流直播。原理是 FFmpeg 將 USB 攝像頭的原始視頻流壓縮為 H.264 視頻流,然后使用 FFmpeg 的 hls 切片工具將視頻流分為 n 個切片和 1 個 m3u8 文件,具體原理可以看這篇文章

准備工作

樹莓派一個(1 至 3 代都可以)
USB攝像頭一個
已連接到網絡

步驟

將樹莓派接上 USB 攝像頭,lsusb 命令可以查看攝像頭型號等信息,同時 /dev 目錄下會多出來一個 video0 設備。在樹莓派中安裝 Web 服務器,考慮到樹莓派的性能,此次選用 nginx 。

sudo apt-get update
sudo apt-get install nginx

默認 nginx 的網站根目錄是在 /var/www/html ,為了方便,我們可以把根目錄改為 /var/www ,修改 /etc/nginx/sites-available 的 default 文件,將 root /var/www/html; 修改為 root /var/www; ,然后進入 /var/www 目錄,將 html 文件夾內的 index.nginx-debian.html 移到此目錄,然后重啟 nginx 服務。

cd /var/www;
sudo mv html/index.nginx-debian.html index.html
sudo rm -r html
sudo service nginx restart

HLS 不斷將視頻切片,循環寫入設定的 n 個文件,長時間的反復寫入可能會造成 SD 卡損壞,因此最好划分一個 16M 的內存空間用於存放切片文件。在 /var/www 目錄下創建 hls 文件夾,修改 /etc/fstab 文件,添加一項內容如下:

tmpfs    /var/www/hls    tmpfs    defaults,size=16M    0    0

重啟樹莓派,輸入 df -h 命令后可以看到已經如下所示,說明掛載 tmpfs 到 /var/www/hls 成功。

tmpfs            16M     0   16M   0% /var/www/hls

在當前目錄即 /home/pi 創建 hls.sh 文件,寫入以下內容,其中 -r 10 代表幀率為 10 ,-s 640x480 代表分辨率,-b:v 300k 代表視頻碼率,c:v h264_omx 代表使用樹莓派的 omx 硬件編碼器,-segment_time 2 代表每個切片 2 秒,-segment_wrap 3 代表切片數量為 3 ,-segment_list_size 3 代表緩沖文件數量為 3 ,最后將切片的文件放到 /var/www/hls 目錄並生成 stream.m3u8 。

ffmpeg -f v4l2 -r 10 -s 640x480 -i /dev/video0 -b:v 300k -c:v h264_omx -an -f segment -segment_time 2 -segment_wrap 3 -segment_list_size 3 -segment_list "/var/www/hls/stream.m3u8" "/var/www/hls/stream%03d.ts"

執行 hls.sh

chmod +x hls.sh
./hls.sh

使用支持 html5 的瀏覽器就可以看到視頻流的內容,鏈接為:樹莓派IP/hls/stream.m3u8
HLS 輸出

總結

使用樹莓派的硬件編碼器的效果很明顯,基本不占用 CPU 的使用率。而此次使用的 HLS 是目前 html5 中能直接使用的直播視頻流協議,優點是穿透性好,有網絡的情況下都可以使用,而缺點很明顯,視頻的延時是很大的,按上文的設置也有至少 6s 的延時。期待更加好用的 WebRTC 協議能盡快普及。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM