[success]当然我并不是真的想直播,这个只是项目需要,需要远距离传输视频数据,所以我才顺便使用它来测试一下直播而已,废话不多说,直接开始[/success]
目前市面上视频流有两种主流的协议一个是RTMP一个是RTSP,前面一个直播用的多,后面一个主要是摄像头用的多。
我们这里两个都讲一下。
RTMP
首先我们需要打开树莓派的摄像头输入sudo raspi-config
大概在第5项 Interfacing option。自己打开即可,打开后需要重启树莓派。
安装NGINX
[highlight lanaguage="bash"]#更新 sudo apt-get update #安装NGINX sudo apt-get -y install nginx #移除(因为直接安装的没用,我们只需要它配置的环境) sudo apt-get -y remove nginx sudo apt-get clean #清空 nginx 的配置文件 sudo rm -rf /etc/nginx/* #安装编译用的模块 sudo apt-get install -y curl build-essential libpcre3 libpcre3-dev libpcre++-dev zlib1g-dev libcurl4-openssl-dev libssl-dev #创建存放网页的目录给 nginx 使用 sudo mkdir -p /var/www #创建编译用的目录 mkdir -p ~/nginx_src cd ~/nginx_src #下载 nginx 源码包 wget http://nginx.org/download/nginx-1.11.8.tar.gz #下载 nginx-rtmp-module 源码包 wget https://github.com/arut/nginx-rtmp-module/archive/master.zip tar -zxvf nginx-1.11.8.tar.gz unzip master.zip cd nginx-1.11.8 #设定编译参数 ./configure --prefix=/var/www --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_ssl_module --without-http_proxy_module --add-module=/home/pi/nginx_src/nginx-rtmp-module-master #开始编译安装 make sudo make install[/highlight]
编译安装如果有错误可以用这个:make CFLAGS='-Wno-implicit-fallthrough'
最后查看一下NGINX版本:nginx -v
如果没问题那么就说明安装成功。
配置NGINX
[block]sudo nano /etc/nginx/nginx.conf[/block]
关键代码
[highlight lanaguage=”bash”]
# 关键配置 rtmp { server { listen 1935; chunk_size 4000; application hls { live on; hls on; hls_path /ect/nginx/html/hls; # 缓冲区目录 hls_fragment 5s; # 设置HLS分段(切片)长度。默认为5秒钟 } } } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 99; server_name localhost; location / { root /etc/nginx/html; index index.html index.htm; } } }
[/highlight]
重启NGINX:sudo service nginx restart
安装FFmpeg
[block]sudo apt install ffmpeg[/block]
直接推流
[highlight lanaguage=”bash”]
raspivid -o - -t 0 -vf -hf -w 640 -h 480 -fps 25 -b 500000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i - -vcodec copy -acodec aac -ab 128k -g 50 -s 640x480 -strict experimental -f flv rtmp://0.0.0.0:1935/hls/live
[/highlight]
然后就可以在VLC里面看到视频了
[highlight lanaguage=”bash”]
# 推流后得到地址(自己可以换成树莓派的IP地址) # rtmp://127.0.0.1:1935/hls/live # http://127.0.0.1:99/hls/live.m3u8 ffplay rtmp://127.0.0.1:1935/hls/live # 或者浏览器访问 http://127.0.0.1:99/hls/live.m3u8
[/highlight]
如果你想直播,也很简单,这里以B站举例子。
[highlight lanaguage=”bash”]
raspivid -o - -t 0 -vf -hf -w 640 -h 480 -fps 25 -b 500000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i - -vcodec copy -acodec aac -ab 128k -g 50 -s 640x480 -strict experimental -f flv 你的rtmp地址直码+你的直播码
[/highlight]
RTSP
这个实现比较难,我尝试了一些方法,但是发现有些软件根本装不上。。所以最后我到国外网站找了找,发现一个大神的项目我们不需要自己编译,直接用别人编译好的deb包就可以了,自己下载然后放到树莓派里面。
安装命令 dpkg -i xxx.deb
安装好后就可以直接使用非常简单的命令来开始rtsp:v4l2rtspserver
访问地址:rtsp://树莓派地址:8554/unicast
这个也可以用vlc打开。
还可以指定地址和端口:v4l2rtspserver -I 192.168.123.61 -P 8555
如何用rtsp直播
这个我们需要借助OBSstudio来实现。自己到OBS里面添加VLC视频源,然后添加URL,把rtsp地址直接粘贴进去就可以啦。
参考文章
本文章从我的文档里面整理过来的,下面是文档地址1.http://book.xiaoyou66.com/read/pi/blank
2.http://book.xiaoyou66.com/read/pi/a1