安装Nginx和Nginx-RTMP
安装从源代码编译Nginx和Nginx-RTMP所需的工具。
1 2 | sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev |
建立一个工作目录并切换到它。
1 2 3 | mkdir ~/working cd ~/working |
下载Nginx和Nginx-RTMP源代码。
1 2 3 | wget http://nginx.org/download/nginx-1.7.5.tar.gz wget https://github.com/arut/nginx-rtmp-module/archive/master.zip |
安装解压缩包。
1 2 | sudo apt-get install unzip |
提取Nginx和Nginx-RTMP源代码。
1 2 3 | tar -zxvf nginx-1.7.5.tar.gz unzip master.zip |
切换到Nginx目录。
1 2 | cd nginx-1.7.5 |
添加Nginx将被编译的模块。包含Nginx-RTMP。
1 2 | ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master |
用Nginx-RTMP编译并安装Nginx。
1 2 3 | make sudo make install |
安装Nginx初始化脚本。
1 2 3 4 | sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx sudo chmod +x /etc/init.d/nginx sudo update-rc.d nginx defaults |
启动和停止Nginx来生成配置文件。
1 2 | sudo service nginx start sudo service nginx stop |
对nginx首页改造,接入腾讯播放器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <!DOCTYPE html> <html lang="zh-cmn-Hans"> <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no"> <title>小直播</title> <meta name="keywords" content=""> <meta name="description" content="小直播——直播分享"> <meta name="format-detection" content="telephone=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="msapplication-tap-highlight" content="no"> <script src="//imgcache.qq.com/open/qcloud/video/vcplayer/TcPlayer-2.2.1.js" charset="utf-8"></script>; </head> <body> <div id="id_test_video" style="width:100%; height:auto;"></div> <script type="text/javascript"> var player = new TcPlayer('id_test_video', { "m3u8": "http://web.dingxiaolin.com/live/test/index.m3u8", "autoplay" : true,//iOS下safari浏览器,以及大部分移动端浏览器是不开放视频自动播放这个能力的 "coverpic" : "https://blog.52itstyle.com/usr/uploads/2017/12/2652725976.jpg", "width" : '480',//视频的显示宽度,请尽量使用视频分辨率宽度 "height" : '320'//视频的显示高度,请尽量使用视频分辨率高度 }); </script> </body> </html> |
安装FFmpeg
添加FFmpeg PPA。
1 2 3 | sudo apt-get install software-properties-common sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next |
更新软件包列表。
1 2 | sudo apt-get update |
安装FFmpeg。
1 | sudo apt-get install ffmpeg |
那么,如何利用FFmpeg来给视频转码呢?
1 | ffmpeg -i output.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 0 -hls_time 5 data/output.m3u8 |
如果您使用防火墙,则需要确保TCP 1935被允许。
目前的配置允许任何人流到您的服务器。我们可以通过仅允许某些IP地址获得发布权限来解决此问题。打开Nginx配置。
1 2 | sudo nano /usr/local/nginx/conf/nginx.conf |
现在配置应该看起来像这样。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | worker_processes 1; events { worker_connections 1024; } rtmp { server { listen 1935; chunk_size 4096; application vod { play /opt/video; } application live { live on; hls on; #这个参数把直播服务器改造成实时回放服务器。 wait_key on; #对视频切片进行保护,这样就不会产生马赛克了。 hls_path /opt/video/hls; #切片视频文件存放位置。 hls_fragment 10s; #每个视频切片的时长。 hls_playlist_length 60s; #总共可以回看的事件,这里设置的是1分钟。 hls_continuous on; #连续模式。 hls_cleanup on; #对多余的切片进行删除。 hls_nested on; #嵌套模式。 } } } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name web.dingxiaolin.com; location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /usr/local/nginx/nginx-rtmp-module/; } location /live { #这里也是需要添加的字段。 types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } alias /opt/video/hls; expires -1; add_header Cache-Control no-cache; } location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } |
通过同时按下Control和X来保存文件。重新启动Nginx。
1 | sudo service nginx restart |
关于推流和拉流
推流使用obs,拉流则使用VLC media player
播放服务器上的mp4效果:
那点播又改如何进行呢
首先我们用OBS进行推流,配置好推流地址
然后可以在VLC播放器上面进行拉流
当然,在浏览器上我们也可以进行直播:
在苹果手机上,我们甚至可以直接访问m3u8的地址来观看直播
m3u8:http://web.dingxiaolin.com/live/test/index.m3u8
注意,这里要跟rtmp的地址区分
rtmp://web.dingxiaolin.com:1935/live/test
docker项目地址:https://hub.docker.com/r/alfg/nginx-rtmp/
docker 拉取配置好的镜像
拉取容器命令:
docker pull alfg/nginx-rtmpCopy
用法:
docker run -it -d -p 1935:1935 -p 8080:80 –rm alfg/nginx-rtmpCopy
此时容器进入后台运行
直播流推送入口:
OBS Studio或者ffmpeg推送直播到这个地址
rtmp://服务器ip:1935/stream/自定义名称