溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

樹莓派如何實現(xiàn)直播

發(fā)布時間:2021-11-20 10:42:29 來源:億速云 閱讀:359 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章主要為大家展示了“樹莓派如何實現(xiàn)直播”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“樹莓派如何實現(xiàn)直播”這篇文章吧。

樹莓派實現(xiàn)直播分兩種方式

1.通過USB攝像頭

2.通過CSI(樹莓派攝像頭)

今天我們實現(xiàn)通過CSI來實現(xiàn)直播功能,但是也介紹USB攝像頭實現(xiàn)直播的方案。

mjpg-streamer

支持CSI(樹莓派官方攝像頭)

開源項目github:mjpg-streamer

效果圖

樹莓派如何實現(xiàn)直播

基礎知識:cmake和make區(qū)別

實現(xiàn)過程

1.下載mjpg-streamer

wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip

2.Building & Installation

sudo install cmake libjpeg8-dev 

3.解壓master.zip

unzip master.zip

解壓后目錄
drwxr-xr-x  3 pi   pi       4096 Apr 12 05:24 mjpg-streamer-master/

4.編譯及安裝mjpg_steamer

cmake  指向CMakeLists.txt所在的目錄,例如cmake .. 表示CMakeLists.txt在當前目錄的上一級目錄。cmake生成很多編譯的中間文件以及makefile文件,所以一般新建一個新的_build,專門用來編譯

cd mjpg-streamer-experimental
mkdir _build
cd _build
cmake ..
make
sudo make install

make根據(jù)生成makefile文件,編譯程序

說明:

make就是make all,編譯用的--僅編譯,具體編譯了那些文件要看你的Makefile;

make install,編譯并安裝(比如安裝到/usr/bin目錄下,然后可以直接使用。因為/usr/bin只有管理員才能向里面添加文件,所以通常要加sudo)

5./etc/default/tmpfs:

# mount /tmp as a tmpfs.  Defaults to no; set to yes to enable (/tmp
# will be part of the root filesystem if disabled).  /tmp may also be
# configured to be a separate mount in /etc/fstab.
RAMTMP=yes

6.Reboot

7.raspistill -tl 500 -t 999999 -vf -w 960 -h 720 -o /tmp/mjpg/test.jpg -n -q 50&

8.mjpg_streamer -i 'input_file.so -f /tmp/mjpg -r'

9.啟動mjpg_streamer

pi@xxxxxx:~/mjpg-streamer-experimental$ mjpg_streamer
MJPG Streamer Version.: 2.0
 o: www-folder-path......: disabled
 o: HTTP TCP port........: 8080
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled
bind: Address already in use

修改端口號:默認是8080端口,由于沒找到配置文件,也是很無奈!(這是我一開始理解的,把mjpg_stream當作一個簡單服務器了,實際上mjpg_stream是一款命令行程序,可通過mjpg_stream命令 - p操作修改端口號)

通過源碼修改端口號,重新編輯安裝

編輯器Visual Studio Code

/mjpg_streamer-experimental/output_http/output_http.c

int output_init(output_parameter *param, int id)
{
    int i;
    int  port;
    char *credentials, *www_folder, *hostname = NULL;
    char nocommands;

    DBG("output #%02d\n", param->id);

    port = htons(8099);
    credentials = NULL;
    www_folder = NULL;
    nocommands = 0;

    param->argv[0] = OUTPUT_PLUGIN_NAME;

    /* show all parameters for DBG purposes */
    for(i = 0; i < param->argc; i++) {
        DBG("argv[%d]=%s\n", i, param->argv[i]);
    }
}

10.http://<raspberrypi>:8099/

樹莓派如何實現(xiàn)直播

11.命令行啟動服務

cd到~/mjpg-streamer-master/mjpg-streamer-experimental

pi@xxxxxx:~/mjpg-streamer-master/mjpg-streamer-experimental$ mjpg_streamer -i "input_raspicam.so" -o "output_http.so -w ./www"
MJPG Streamer Version.: 2.0
 i: fps.............: 30
 i: resolution........: 640 x 480
 i: camera parameters..............:

Sharpness 0, Contrast 0, Brightness 50
Saturation 0, ISO 0, Video Stabilisation No, Exposure compensation 0
Exposure Mode 'auto', AWB Mode 'auto', Image Effect 'none'
Metering Mode 'average', Colour Effect Enabled No with U = 128, V = 128
Rotation 0, hflip No, vflip No
ROI x 0.000000, y 0.000000, w 1.000000 h 1.000000
 o: www-folder-path......: ./www/
 o: HTTP TCP port........: 8099
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled
 i: Starting Camera
Encoder Buffer Size 81920

啟動腳本方式

vi live.sh

腳本內(nèi)容

cd ~/mjpg-streamer-master/mjpg-streamer-experimental

mjpg_streamer -i "input_raspicam.so" -o "output_http.so -w ./www"

執(zhí)行腳本

sh live.sh

12.視頻很卡頓的情況

原因在于mjpg-streamer/mjpg-streamer-experimental/plugins/input_raspicam/input_raspicam.c

static int fps = 5;//每秒5幀

修改為fps = 30;//每秒30幀

static int fps = 30;
static int width = 640;
static int height = 480;
static int quality = 85;
static int usestills = 0;
static int wantPreview = 0;
static int wantTimestamp = 0;
static RASPICAM_CAMERA_PARAMETERS c_params;

13.重新編譯安裝

查看步驟4編譯及安裝mjpg_steamer

14.更加流暢

/etc/default/tmpfs:

# mount /tmp as a tmpfs.  Defaults to no; set to yes to enable (/tmp
# will be part of the root filesystem if disabled).  /tmp may also be
# configured to be a separate mount in /etc/fstab.
RAMTMP=yes

Reboot.

raspistill -tl 500 -t 999999 -vf -w 960 -h 720 -o /tmp/mjpg/test.jpg -n -q 50&

mjpg_streamer -i 'input_file.so -f /tmp/mjpg -r'

http://<raspberrypi>:8080/?action=stream

aptitude——詳細查看已安裝或可用的軟件包。

sudo aptitude

樹莓派如何實現(xiàn)直播

用樹莓派官方攝像頭做絲滑般流暢的監(jiān)控!

raspistill

支持CSI(樹莓派攝像頭)

網(wǎng)頁刷新照片方式,很low很low的方式,類似于播放幻燈片

["raspistill", "-t", "0.1/1/5", "-w", "300", "-h", "500" ]

說明:

紅色標注參數(shù),只能是正整數(shù),否則出現(xiàn)不可控,導致進程raspistill一直占用相機拍照。導致其它程序無法使用相機。

-t, --timeout : 拍照和關閉時的延時指定,未指定時默認是5s

nginx-rtmp-module

支持USB攝像頭,不支持CSI(樹莓派官方攝像頭)

nginx-rtmp-module

情況一:已安裝Nginx,重新把rtmp-module編譯Nginx

參考文章:如何升級Nginx到最新穩(wěn)定版

參考文章:已安裝nginx動態(tài)添加模塊

參考文章:nginx 1.9.5 ./configure: error: invalid option "–with-http_spdy_module"

情況二:直接把rtmp-module與Nginx編譯,安裝Nginx

遇到的問題:

install FFmpeg

sudo apt-get install ffmpeg

樹莓派操作系統(tǒng)沒有ffmpeg程序

解決方案<<樹莓派攝像頭實時監(jiān)控>>該文章中的提示:

"你還需要 libav-tools,它是一個 ffmpeg 分支。數(shù)月之前,Debian用libav-tools取代了了ffmpeg"

以上是“樹莓派如何實現(xiàn)直播”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI