藏文学习 | 计算机和英语
“直播技术”全干货
2021年01月30日 释妙竹
服务器端的直播是早就做出来了,但一直没法用网页播放。直到最近才终于解决了用video-js播放m3u8的难题。用OBS一个插件同时推流到youtube和自己的服务器上,把两个直播放在同一个网页上。这里具体讲一下实现过程。
注:1、Bamboo服务器装的是ubuntu。之前用的是centos,但后来发现ubuntu软件支持度更好。
2、这里用的是nginx-1.15.1,更新的版本和这里的RTMP的版本不匹配,试了下好像只能用1.15.1版的。
Step1: Install nginx with RTMP module
$ apt install gcc wget unzip software-properties-common dpkg-dev git make automake build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxslt1-dev libxml2-dev libxml2-dev libgd-dev libgeoip-dev libgoogle-perftools-dev libperl-dev pkg-config autotools-dev
$ wget http://nginx.org/download/nginx-1.15.1.tar.gz
$ wget https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/archive/dev.zip
$ tar -zxvf nginx-1.15.1.tar.gz
$ unzip dev.zip
$ cd nginx-1.15.1
$ ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-dev
$ make
$ sudo make install
$ sudo /usr/local/nginx/sbin/nginx //启动nginx
Step2: Configuring nginx to use RTMP
打开 /usr/local/nginx/conf/nginx.conf 修改红笔标出的地方。这里把原文#注释掉的行全删除了。
worker_processes 1;
//这里的1是不够用的。Bamboo搬瓦工(bandwagon)的一台服务器是2G-RAM, 4核CPU的,这里改成了 worker_processes 16, 直播效果跟youtube一样流畅。
//另一台linode的服务器 1G2核, worker_processes 写成了8,直播声音流畅,但画面略有点卡顿。
events {
worker_connections 1024; // 这里是定义多线程的,Bamboo没改。
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8088; //自己选个端口号,记得防火墙里打开。
server_name localhost;
root html;
index index.html index.htm;
}
location /hls{
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /nginx;
add_header 'Cache-Control' 'no-cache';
// 以下四行不加的话,用GOOGLE浏览器的hls插件或google play 里的m3u8播放器也能放,但是video-js不支持。
expires -1;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
rtmp{
server{
listen 1935; //自己选个端口号,记得防火墙里打开。
chunk_size 4096;
application live{
live on;
record off;
}
application hls{
live on;
hls on;
hls_path /nginx/hls; // 记得在 根目录下 建这个文件夹,直播时的m3u8文件和ts文件都在这个文件夹下。
hls_fragment 5s; #一个ts文件的时长
}
}
}
Step 3: Restart nginx with:
$ sudo /usr/local/nginx/sbin/nginx -s stop //停止nginx
$ sudo /usr/local/nginx/sbin/nginx //启动nginx
Step 4: 推流、拉流
推流: rtmp://localhost:1935/hls/
拉流: http://localhost:8088/hls/stream.m3u8 //stream 是你推流时自订的密钥、localhost改成你服务器IP
参考文献:
1, How to set up your own private RTMP server using nginx
2, 解决video.js使用以后m3u8无法访问的跨域问题
Step 5: 前端用video-js网页播放。
参考文献:
http://m3u8.looks.wang/
具体效果参看‘噶玛妙竹’网站的直播网页。
Step 6: OBS多平台推流插件
参考文章: https://blog.csdn.net/longgeaisisi/article/details/107250264 Bamboo装了,很好用, 同时推流到youtube和自己的服务器,也不多耗电脑的内存和CPU。
也可以这里下载:https://github.com/sorayuki/obs-multi-rtmp/releases
整个文件夹解压到OBS的安装目录下,然后再启动OBS,多路推流的界面就会显示出来了。OBS 25.0以上版本才能用。