Nginx直播系统rtmp&ffmpeg

Nginx直播系统rtmp&ffmpeg

1、主流直播系统三大协议简介

  • HLS,是苹果公司实现的基于 HTTP 的流媒体传输协议,全称 HTTP Live Streaming,可支持流媒体的直播和点播,主要应用在 iOS 系统,为 iOS 设备(如 iPhone、iPad)提供音视频直播和点播方案;

  • RTMP,全称 Real Time Messaging Protocol,即实时消息传送协议。Adobe 公司为 Flash播放器和服务器之间音视频数据传输开发的私有协议。工作在TCP之上的明文协议,默认使用端口1935。协议中的基本数据单元成为消息(Message),传输的过程中消息会被拆分为更小的消息块(Chunk)单元。最后将分割后的消息块通过 TCP 协议传输,接收端再反解接收的消息块恢复成流媒体数据;

  • HTTP-FLV即,将流媒体数据封装成FLV格式,然后通过HTTP协议传输给客户端。HTTP-FLV依靠MIME的特性,根据协议中的Content-Type来选择相应的程序去处理相应的内容,使得流媒体可以通过HTTP传输。相较于RTMP协议,HTTP-FLV能够好的穿透防火墙,它是基于HTTP/80传输,有效避免被防火墙拦截。除此之外,它可以通过 HTTP 302 跳转灵活调度/负载均衡,支持使用 HTTPS 加密传输,也能够兼容支持 Android,iOS 的移动端;

图一:image_1e5os8576150o18hl17vh4kr1ko816.png-221.8kB

2、基于Nginx构建直播系统

如图二所示,利用nginx rtmp模块+ffmpeg工具,实现rtmp及hls协议分流+水印的直播系统,通过ffmpeg将直播流hls推送至阿里云、腾讯云,用户可通过本地地址或云端地址观看直播,有无水印取决ffmpeg推流配置;

图二:image_1e5oraqup16tp1ho89lllk7q8lp.png-62.1kB

  • 提示:FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的;

3、环境及相关软件介绍

3.1、实验环境

平台 IP 用途 所需软件
CentOS release 6.9 64Bit 172.21.0.5 拉端+水印处理+分流 nginx-1.16.1.tar.gz x265_3.3.tar.gz
nginx-rtmp-module-1.2.1.zip
ffmpeg-4.2.1.tar.bz2
Windows 7 192.168.1.106 推端 OBS+PotPlayer

提示:安装ffmpeg的过程相对比较麻烦,如需要开启更多ffmpeg功能,则对应的依赖关系就复杂

4、安装及部署

提示:安装过程均基于oh my zsh的shell下进行

4.1、nginx及rtmp模块编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# root @ VM_0_5_centos in /soft [12:50:41]
$ x nginx-1.16.1.tar.gz
$ x nginx-rtmp-module-1.2.1.zip
$ yum install vim telnet wget nethogs htop glances dstat traceroute lrzsz goaccess ntpdate dos2unix openssl-devel tcpdump lrzsz fio -y
$ yum install pcre-devel zlib-devel libjpeg-devel libpng-devel freetype-devel openssl-devel curl curl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel libmcrypt libmcrypt-devel openldap openldap-devel openssh-client -y
$ useradd -s /sbin/nologin -M www
# root @ VM_0_5_centos in /soft/nginx-1.16.1 [12:51:41]
$ ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --add-module=/soft/nginx-rtmp-module-1.2.1/nginx-rtmp-module-1.2.1/
$ make && make install
$ cd /etc/init.d
# root @ VM_0_5_centos in /etc/init.d [12:58:18]
$ vim nginx
$ chmod 777 nginx
$ chkconfig nginx on

4.2、nginx配置及rtmp运行参数

附件:nginx配置文件及rtmp运行参数.zip-3.9kB

4.2、ffmpeg编译安装

提示:安装ffmpeg前需解决相关依赖问题,并安装相关开发依赖组件,详见通用模板机安装手册;

4.2.1、dk-aac-2.0.1.tar.gz

1
2
3
4
5
x fdk-aac-2.0.1.tar.gz
cd fdk-aac-2.0.1
autoreconf -fiv
./configure --disable-shared
make && make install

4.2.2、lame-3.100.tar.gz

1
2
3
4
x lame-3.100.tar.gz
cd /soft/lame-3.100
./configure --disable-shared --enable-nasm
make && make install

4.2.3、opus-1.3.1.tar.gz

1
2
3
4
x opus-1.3.1.tar.gz
cd /soft/opus-1.3.1
./configure --disable-shared
make && make install

4.2.3、libvpx.zip

1
2
3
4
wget https://chromium.googlesource.com/webm/libvpx.git/+archive/7ec7a33a081aeeb53fed1a8d87e4cbd189152527.tar.gz
x libvpx.zip
./configure --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make && make install

4.4.4、llibvorbis-1.3.6.zip

1
2
3
4
wget https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-1.3.6.zip
x libvorbis-1.3.6.zip
./configure
make && make install

4.4.5、libogg-1.3.0.tar.gz

1
2
3
4
5
wget http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
x libogg-1.3.0.tar.gz
cd libogg-1.3.0
./configure
make && make install

4.4.6、SDL-1.2.15.tar.gz

1
2
3
4
5
wget http://www.libsdl.org/release/SDL-1.2.15.tar.gz
x SDL-1.2.15.tar.gz
cd SDL-1.2.15
./configure
make && make install

4.4.8、nasm-2.13.03.tar.xz

1
2
3
4
5
wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.xz
x nasm-2.13.03.tar.xz
cd nasm-2.13.03
./configure
make && make install

4.4.7、x264

1
2
3
4
5
git clone --depth 1 https://code.videolan.org/videolan/x264.gi
cd x264
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
./configure --enable-static
make && make install

4.4.8、x265_3.3.tar.gz

1
2
3
4
5
6
tar xvf x265_3.3.tar.gz
cd x265_3.3
cd build/linux
cmake -G "Unix Makefiles" -DENABLE_SHARED:bool=off ../../source
make
make install

4.4.9、ffmpeg-4.2.1.tar.bz2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# root @ VM_0_5_centos in /soft/ffmpeg-4.2.1 [12:59:35]
$ yum install librtmp librtmp-devel libtheora libtheora-devel libwebp libwebp-devel -y
$ yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel x264-devel yasm -y
$ cd /usr/local/lib
$ cp -rfp lib* /lib64
$ tar xvJf ffmpeg-4.2.2.tar.xz
$ cd ffmpeg-4.2.2
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
$ ./configure --prefix=/usr/local --pkg-config-flags="--static" --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --enable-version3 --enable-gpl --enable-nonfree --enable-small --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-libvpx --enable-libtheora --enable-libvorbis --enable-libopus --enable-libfdk-aac --enable-libass --enable-libwebp --enable-librtmp --enable-postproc --enable-avresample --enable-libfreetype --enable-openssl --disable-debug --disable-doc --disable-ffplay
$ make && make install
# root @ VM_0_5_centos in ~ [14:03:21]
$ ffmpeg -version
ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-23)
configuration: --prefix=/usr/local --pkg-config-flags=--static --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib --enable-version3 --enable-gpl --enable-nonfree --enable-small --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-libvpx --enable-libtheora --enable-libvorbis --enable-libopus --enable-libfdk-aac --enable-libass --enable-libwebp --enable-librtmp --enable-postproc --enable-avresample --enable-libfreetype --enable-openssl --disable-debug --disable-doc --disable-ffplay
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100

4、直播实战

  • 手机直播地址:http://49.232.152.80/hls/ar640.m3u8(不依赖flash任意浏览器均可播放)
  • 手机直播地址(有水印):http://49.232.152.80/hls/ar1280_wm.m3u8(不依赖flash任意浏览器均可播放)
  • PC客户端直播地址:http://49.232.152.80:1935/stream/ar1280(需下载播放器potplayer)

4.1、OBS推流软件配置

image_1e5p2kddedkj1pd71b9i178ofvm1v.png-34.2kB
image_1e5p2s96ei9d50dfto1dkk1v8u2c.png-117.3kB

4.2、PC端&手机端观看直播

  • PC端使用PotPlayer播放rtmp流
    image_1e5p3gt9p1hv51oq3thl1jdpojh43.png-42.6kB
    image_1e5p3gg3l1ejf1vb94mm1odb18m3m.png-56.6kB
  • 手机端浏览器播放直播
    有水印:image_1e5p3jaan1bld1nlncouq1aj0s4g.png-106.3kB
    无水印:image_1e5p3cl3a1ugvt5v1rqf1l3tvq2p.png-92.8kB

4.3、扩展部分

提示:可构建h5页面,嵌套rtmp播放流,手机网页即可实现实时观看直播

-------------本文结束感谢您的阅读-------------
LiGuanCheng wechat
如有问题,请与我微信交流或通过右下角“daovoice”与我联系~。
请我喝一杯咖啡~