使用树莓派进行直播


[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

 


文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录