局域网直播探索
1. 背景
校內有不少用于直播的場景,例如大劇場演出,在各個教室同步觀看;利用互聯網的直播方式,推送和播放端會走一次公網再回來,造成延遲與卡頓,因此考慮使用局域網直播的方式。
2. 技術選型
經調研,采用nginx的rtmp模塊,搭建rtmp的直播服務器,實現局域網內的直播。推送端可以直接使用obs推送,拉流的播放端,直接采用vlc播放器。此種選型的優點如下:
3. 部署包含rtmp模塊的nignx
本次部署在mac環境下,linux環境類似。
nginx官網下載nginx的官方安裝包,并解壓
curl -OL https://nginx.org/download/nginx-1.20.1.tar.gz tar xzvf nginx-1.20.1.tar.gz && rm nginx-1.20.1.tar.gz準備pcre和openssl兩個包用于編譯
curl -OL https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz tar xvzf pcre-8.41.tar.gz && rm pcre-8.41.tar.gz curl -OL https://www.openssl.org/source/openssl-1.1.0.tar.gz tar xvzf openssl-1.1.0.tar.gz && rm openssl-1.1.0.tar.gz下載nginx rtmp模塊源碼
git clone https://github.com/arut/nginx-rtmp-module.git編譯并安裝nginx,參數指定pcre、openssl路徑并增加rtmp模塊
cd nginx-1.20.1 ./configure --with-pcre=../pcre-8.41/ --with-http_ssl_module --with-openssl=../openssl-1.1.0 --add-module=../nginx-rtmp-module make sudo make install安裝完成后,nginx位于/usr/local/nginx/,在其conf目錄下,修改nginx.conf的配置文件,在原有的events配置下方增加rtmp的配置。如果不需要開啟默認的http服務,則可以注釋掉默認開啟的80端口的配置,即http配置下server的全部配置。去掉注釋的nginx.conf完整配置如下:
worker_processes 1;events {worker_connections 1024; }rtmp {server {listen 1935;chunk_size 4000;application bndsly {live on;}} }http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;# 這里會從conf下的servers文件夾讀取http服務的配置,如有http服務,建議采用此種方式# include servers/*.conf; }啟動nginx即可
sudo /usr/local/nginx/sbin/nginx4. 推流
推流就是把一個視頻源推送到rtmp的服務器。
obs推流的配置可以參考,例如rtmp://192.168.50.9:1935/bndsly/test
5. 播放
6. 使用ffmpeg做局域網上課直播等場景
在有攝像頭的電腦上,如果打算用當前桌面和攝像頭做一場直播分享。可以在電腦上安裝ffmpeg,以mac電腦為例。注意:推流還是建議使用obs,ffmpeg推流對電腦配置有一定的要求,否則會卡。
安裝ffmpeg軟件
brew install ffmpeg可使用下面的命令,將本地視頻推送的rtmp服務器
ffmpeg -re -i /Volumes/龍樾電影派/電視劇/韓劇/機智醫生生活.Hospital.Playlist.EP01-EP12.2020.HD1080P/機智醫生生活.Hospital.Playlist.EP01.1080P.mp4 -vcodec libx264 -acodec aac -f flv rtmp://192.168.50.9:1935/bndsly/mp4使用下面命令,查看本地可用的設備
ffmpeg -f avfoundation -list_devices true -i ""可能的輸出如下:
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developersbuilt with Apple clang version 12.0.5 (clang-1205.0.22.9)configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/4.4_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolboxlibavutil 56. 70.100 / 56. 70.100libavcodec 58.134.100 / 58.134.100libavformat 58. 76.100 / 58. 76.100libavdevice 58. 13.100 / 58. 13.100libavfilter 7.110.100 / 7.110.100libavresample 4. 0. 0 / 4. 0. 0libswscale 5. 9.100 / 5. 9.100libswresample 3. 9.100 / 3. 9.100libpostproc 55. 9.100 / 55. 9.100 [AVFoundation indev @ 0x14e72de60] AVFoundation video devices: [AVFoundation indev @ 0x14e72de60] [0] FaceTime HD Camera [AVFoundation indev @ 0x14e72de60] [1] Capture screen 0 [AVFoundation indev @ 0x14e72de60] [2] Capture screen 1 [AVFoundation indev @ 0x14e72de60] AVFoundation audio devices: [AVFoundation indev @ 0x14e72de60] [0] MacBook Pro麥克風可以使用如下命令,將本地桌面和麥克風推送到rtmp服務器
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -f flv rtmp://192.168.50.9:1935/bndsly/class如果要加上攝像頭,則可以使用如下命令(對推流的電腦有一定的配置要求,否則會卡):
ffmpeg -f avfoundation -framerate 30 -i "1:0" \-f avfoundation -framerate 30 -video_size 640x480 -i "0" \-c:v libx264 -preset ultrafast \-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://192.168.50.9:1935/bndsly/class總結
- 上一篇: 详解GBase 8c数据库安全之数据透明
- 下一篇: Mongo系列之update