整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

不会搭建视频直播服务?教你十分钟实现视频推流拉流服务

不会搭建视频直播服务?教你十分钟实现视频推流拉流服务

着5G网络的悄然到来,视频服务获将成为下一个流量风口,作为程序员的我们当然也不能落后,下面开始学习如何搭建一个视频服务器吧。

环境介绍

本教程是基于window10 X 64位系统的

nginx
nginx-rtmp-module
obs
sublime
vlc播放器

安装调试nginx

windows 版的nginx 直接解压至文件夹即可

cmd 进入nginx 启动nginx

nginx.exe -c conf\nginx-win.conf

默认配置是

 listen 80;#监听80端口
 server_name 127.0.0.1;

启动后访问 127.0.0.1 出现如下页面,说明启动成功

配置rtmp推流模块

用sublime打开nginx\conf目录下的nginx-win-rtmp.conf配置文件

添加如下配置

rtmp {
 server {
 listen 1935;
 chunk_size 4000;
 application live {
 live on;
 hls on; #开启hls
 hls_path D:\\temp;#视频切片地址
 hls_fragment 15s ;
 wait_key on; #对视频切片进行保护,这样就不会产生马赛克了。
 hls_playlist_length 60s; #总共可以回看的事件,这里设置的是1分钟。
 hls_continuous on; #连续模式。
 hls_cleanup on; #对多余的切片进行删除。
 hls_nested on; #嵌套模式。
 hls_fragment_naming system;#设置切片时间戳
 }
 
 }
}

在http server中添加如下配置

location /live { #这里也是需要添加的字段。
 types {
 application/x-mpegURL
 video/mp2t ts;
 }
 alias D:\\temp;
 expires -1; 
 add_header Cache-Control no-cache;
 } 
 location /stat {
 rtmp_stat all;
 rtmp_stat_stylesheet stat.xsl;
 }
 location /stat.xsl {
 root nginx-rtmp-module/;
 }
 
 location /control {
 rtmp_control all;
 }

保存配置文件

重新启动nginx

nginx.exe -c conf\nginx-win-rtmp.conf

使用obs软件推流

打开obs软件调试好场景后,进入设置页面

设置推流地址

关闭windows防火墙,防止推流端口被屏蔽

点击主页开始推流

拉流

我们使用vlc视频播放器进行拉流测试

1、设置拉流地址

rtmp://127.0.0.1:1935/live/home

设置成功后点击播放视频能正常播放则说明视频服务器搭建成功

播放成功

至此视频直播服务器搭建完成了

配置好的nginx 服务已打包上传至网盘

关注后,私信回复“视频服务”即可获取

下载后直接解压,cmd进入nginx目录,输入
nginx.exe -c conf\nginx-win-rtmp.conf
启动服务

服务启动后访问相关web页面,直接访问即可播放直播视频

近,国家政策开始鼓励“地摊经济”,一时间各家企业平台纷纷推出地摊扶持政策,地摊概念股顺势大涨,地摊生态及配套商品也开始走俏,甚至在网络上也涌现出各种“新摊主速成攻略”,万亿的烟火经济俨然已经走上风口。

实际上,早就有人已经在网上“摆地摊”了,那就是直播带货!受到疫情的影响,线下实体纷纷停摆,直播带货受到了前所未有的追捧,企业们纷纷选择通过直播的形式,来提升品牌形象、保持与用户的互动并完成商品的销售。

那么问题就来了,在搭建直播平台或者应用的过程中,都需要关注哪些技术呢?CDN又对直播起到什么作用呢?

一个直播系统都包括什么?

通常整个直播的系统可能包括:推流端经过一次边缘节点的加速,将视频直播流推到直播中心,在直播中心完成一系列转码、截图、录制、水印等处理,然后视频流再经过CDN分发,分发到不同的播放端,播放端有不同的SDK进行秒开、弱网等优化动作。

直播系统中的推流与播放

对于视频直播来讲,最重要的两个环节,一个是推流,一个是播放。推流一般采用RTMP协议,常用的推流端包括OBS、手机APP、FFmpeg等。播放除了采用RTMP协议,还可以采用HTTP FLV和HLS协议,RTMP和HTTP FLV是流式传输,HLS是文件加速传输,常见的播放端包括:Flash / VLC / HTML5 / 手机App等等。对于阿里云直播系统来讲,大部分直播分发都是通过流式传输完成的,只有一少部分量是使用文件加速分发完成的。

流式分发与CDN直播系统

其实在直播场景中,不管是推流还是播放,流式分发都是长连接的,一场直播可能5个小时,推流在这5小时内不会中断。对于播放器来讲,服务器端获取到的是一帧一帧的音视频数据,不管是什么传输协议,都是采用FLV tag来封装。每一帧音频或者视频,都会有一个时间戳的属性。

视频直播流会传输音频帧和视频帧,对于音频帧来讲,它每一帧都可以独立解码,播放器从服务器获取到任何一帧音频帧之后,都可以独立渲染,听到声音。而视频分为视频关键帧和非关键帧,关键帧可以独立解码渲染,播放器拿到后可以直接看到画面,一般10K以上甚至几十K;其他非关键帧解码依赖于前面的一些视频帧,播放器会根据前面的帧和这一帧来解码产生画面,非关键帧一般大小是几K甚至不到1K。对于播放器来说,服务器一般会从视频关键帧开始发送,这样才不会产生花屏。

对于节点上直播服务器存储的内容,如果是文件加速,节点上存储的内容很明确,就是文件数据, URL不变的话文件数据内容也不变。但是对于直播来讲,传输的就是帧数据,缓存的也是不断变化的帧序列数据。下面的图里可以看到,当前的服务器缓存了V1-V3五帧数据,当V4这个关键帧出现了,服务器把之前的丢掉,开始缓存V4开始的音视频数据,以这个策略保证过来的播放端都是当前最新的数据。一般直播服务器都是用这个策略来进行服务器缓存的。

直播平台面临的挑战?

1、 前面也说了,直播系统包含推流、转码、分发、播放等各个环境,经历了冗长复杂的网络环境,尤其是当业务场景逐渐丰富起来之后,功能需求也越来越多2、 一些关键指标的提升,比如:卡顿率、打开速度、流畅度、回源率等,任何指标的下降都可能会导致整个应用的用户体验下降,影响直播效果3、 直播平台经常会面临业务突发,数十万甚至数百万用户的同时在线,对服务器和带宽考验十分巨大

直播平台为什么要使用CDN?

1、减少卡顿率,提升用户体验

直播,尤其是电商直播,对网络抖动十分敏感,稍有问题就会出现卡顿、花屏等问题,严重影响用户体验,甚至直接掉线影响销售。CDN借助负载均衡系统能够将内容推送到接近用户的边缘节点,使得用户就近取得资源,可以大大提升访问效率。

2、业务峰值来临的时候,为流量高峰护航

在确保直播流畅度上,全球覆盖的CDN节点和精准调度系统缺一不可。CDN节点是采用分布式架构,节点资源与带宽储备就代表了能够覆盖的用户的量级和广度。当突发峰值特别高的时候,CDN系统会确保用更精准的调度策略,比如DNS、IP调度,来降低对直播的影响。打比方有一个装了很多冰块和水的杯子,如果我们要把杯子里面的狭小空间全部用上,我们先要把冰块放进去,再倒液态水。在智能调度的场景里,把“固体”和“液体”结合起来考虑,才能做到所有的节点、水位的精准控制,实现更精准的调度。

所以,选择节点和带宽资源覆盖广泛,综合实力强,质量有保证,具备大型项目最佳实践的CDN服务提供商对直播带货平台来说至关重要。想要在云上开启“地摊经济”,阿里云CDN,了解一下~

阿里云全速重构年中大促中,CDN/全站加速、视频直播、视频点播等多款产品都推出限时折扣,点击登陆活动页面了解优惠详情

用工具:

ffmpeg音视频编解码

ffplay音视频播放工具

搭建流媒体服务器

准备流媒体服务器linux

准备并安装Nginx服务

配置RTMP并启动Nginx服务

1.linxu安装Nginx和rtmp

1.先下载安装 nginx 和 nginx-rtmp 编译依赖工具

sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

2. 创建一个工作目录,并切换到工作目录

mkdir ~/working

cd ~/working

3. 下载 nginx 和 nginx-rtmp源码

wget http://nginx.org/download/nginx-1.7.5.tar.gz

wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

4. 安装unzip工具,解压下载的安装包

sudo apt-get install unzip

5.解压 nginx 和 nginx-rtmp安装包

tar -zxvf nginx-1.7.5.tar.gz

unzip master.zip

6. 切换到 nginx-目录

cd nginx-1.7.5

7.添加 nginx-rtmp 模板编译到 nginx

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master

8.编译安装

make

sudo make install

9. 安装nginx init 脚本

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

10. 启动和停止nginx 服务,生成配置文件

sudo service nginx start

sudo service nginx stop

11. 安装 FFmpeg

sudo apt-add-repository ppa:jon-severinsson/ffmpeg

sudo apt-get update

sudo apt-get install ffmpeg

原文PPA不可用,源码安装参见

http://blog.csdn.net/redstarofsleep/article/details/45092145

12. 配置 nginx-rtmp 服务器

打开 /usr/local/nginx/conf/nginx.conf

在末尾添加如下 配置

rtmp {

server {

listen 1935; #监听的端口

chunk_size 4000;

application hls { #rtmp推流请求路径

live on;

hls on;

hls_path /usr/local/nginx/html/hls;

hls_fragment 5s;

}

}

}

13. 保存上面配置文件,然后重新启动nginx服务

sudo service nginx restart

14. 如果你使用了防火墙,请允许端口 tcp 1935

用netstat -an | grep 1935

出现以下信息代表则代表启动nginx/rtmp成功

netstat -an| grep 1935

tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN

16: 使用 客户端,使用 rtmp协议进行视频实时采集

ffmpeg直播命令:

推流:ffmpeg -re -i 1.mp4 -c copy -f flv rtmp://xxx.xxx.xxx.xxx:1935/hls/1.mp4

拉流:ffmpeg -i rtmp://xxx.xxx.xxx.xxx/1.mp4 -c copy dump.flv

播放音视频:ffplay rtmp://xxx.xxx.xxx.xxx/hls

17.下载一个OBS(视频直播客户端)

(1)配置url

(2)推流

(3)服务器播放

ffplay rtmp://xxx.xxx.xxx.xxx/hls

18: 关于 nginx-rtmp 更多配置

https://github.com/arut/nginx-rtmp-module/wiki/Directives

flashplay播放器地址

http://bbs.chinaffmpeg.com/1.swf

总结关注+私信“资料”免费获取视频资料C/C++,Linux,,Nginx, 流媒体 ffmpeg,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等...........