一、流媒体服务器部署
1.准备虚拟机Centos 74操作系统
2.更改为阿里的yum源
yum install -y wget #下载wget软件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup #备份
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/
运行 yum makecache 生成缓存
3.安装依赖
yum install -y gcc-c++ zlib pcre openssl openssl-devel #c语言程序需要的依赖
4.下载扩展模块
Nginx本身只是一个服务器,对流媒体并没有支持,所以我们要下载对应的模块来扩展其功能。
MP4模块:http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
FLV模块:http://sourceforge.net/projects/yamdi/files/yamdi/yamdi-1.9.tar.gz
直播流模块:https://github.com/adwpc/nginx-rtmp-module
FastDFS模块:https://github.com/happyfish100/fastdfs-nginx-module
5.上传所有模块到虚拟机
mkdir /opt/nginx
cd /opt/nginx
rz nginx-1.8.1.tar.gz
rz nginx_mod_h264_streaming-2.2.7.tar.gz
rz yamdi-1.9.tar.gz
rz nginx-rtmp-module-master
6.解压所有模块
tar -zxvf yamdi-1.9.tar.gz
tar -zxvf nginx_mod_h264_streaming-2.2.7.tar.gz
yum install -y unzip #解压用的
unzip nginx-rtmp-module-master.zip
tar -zxvf tar -zxvf nginx-1.8.1.tar.gz
7.安装flv模块到系统
cd yamdi-1.9
./configure
make && make install
8.更改nginx_mod_h264_streaming文件
cd /opt/nginx/nginx_mod_h264_streaming-2.2.7/src
vim ngx_http_streaming_module.c
157gg到157行
注释157行-161行
9. 安装nginx并添加模块
cd /opt/nginx/nginx-1.8.1
./configure --add-module=../nginx_mod_h264_streaming --add-module=../nginx-rtmp-module-master --with-http_ssl_module --prefix=/opt/software/nginx --with-http_flv_module --with- http_stub_status_module
--add-module 安装扩展插件
--prefix 安装在哪里
--with- 使用系统内置的模块 已经安装完毕 关联
..上一级
如果出现错误
vim objs/Makefile
去掉-Werror保存退出
make && make install
10.配置一下conf文件
nginx就是一个服务器
一个 nginx.conf中可以配置 多个 服务器
一个服务器可以监听1个端口
cd /opt/software/nginx/conf
vim nginx.conf
添加如下代码
location ~ .flv {
flv;
}
location ~ .mp4$ {
mp4;
}
location 规则1 location / root配置的目录下 去找这个文件 /html
location 规则2 ~ .flv$ flv文件结尾 flv 模块
location 规则3 ~ .mp4$ mp4文件结尾 mp4 模块
当访问http://ip:80/test.mp4
会挨个匹配规则
匹配第一个规则 location / /html这个目录下去找test.mp4
匹配第二个规则 ~.flv$ 不满足这个规则
匹配第三个规则 ~.mp4$ 满足这个规则 mp4模块来处理
11.启动nginx
上传一个test.mp4视频到/opt/nginx/nginx-1.8.1/html目录下
cd /opt/software/nginx/sbin
./nginx
可到浏览器访问http://ip:80/test.mp4播放视频
二、视频切片优化
要用到ffmpeg切片
下载地址 https://ffmpeg.zeranoe.com/builds/
他的依赖程序yasm
下载地址 https://linux.softpedia.com/get/Programming/Assembler-Tools/Yasm-621.shtml#download
cd /opt/nginx
1.上传
rz ffmpeg-4.2.2.tar.bz2
rz yasm-1.3.0.tar.gz
2.解压
yum install bzip2 #因为后缀是bz2的 要安装 bzip2
tar -jxvf ffmpeg-4.2.2.tar.bz2 #使用 -jxvf 解压bz2文件
tar -zxvf yasm-1.3.0.tar.gz
3.安装
cd yasm-1.3.0
./configure
make && make install
cd ffmpeg-4.2.2 #进入目录
./configure --prefix=/opt/software/ffmpeg #配置 设置安装路径
make && make install #安装
4.将mp4文件转换为ts文件
ffmpeg -y -i test.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb output.ts
5.将ts文件切片
ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 1000 output.ts
#output.ts 这个看上条命令后面出输的文件名称。我这里是output.ts #出输的m3u8文件索引文件名称,可以随意修改,我这里是playlist.m3u8 #-segment_time 1000 每一段切片的控制时间,我这里是1000s,根据你的情况随意修改
三、直播搭建
1.配置nginx/conf文件
vim /opt/software/nginx/conf/nginx.conf
与http协议并列添加如下代码
rtmp {
server {
listen 1935; #监听的端口
chunk_size 4096;
application hls { #rtmp推流请求路径
live on;
hls on;
hls_path /opt/software/nginx/html/hls; #填写推流路径
hls_fragment 5s;
}
}
}
保存退出
在html下创建hls目录
cd /opt/software/nginx/html
mkdir hls
2.安装使用obs推流工具
可在软件管理--腾讯管家下载OBS
1.点击视频捕获设备
点击确定可看到电脑摄像头捕获的画面
2.点击显示器捕获
如果有双显卡需要关闭独立显卡
右键此电脑打开管理
右键独立显卡-->禁用
重新打开OBS-->点击显示器捕获 可看到显示器上的内容
3.游戏捕获
可选择特点程序捕获
3.设置推流
点击右下角的设置--推流 填写服务器和密钥 点击确定
点击开始推流
cd /html/hls 可看到推流的碎片文件
4.拉流
法一:
下载拉流工具 Nginx_EV https://pan.baidu.com/s/1hCzZnF8vAPG3xFkF_fMOkg 提取码:3fz3
修改E:Nginx_EVhtmld目录下index.html文件
file:"rtmp://192.168.0.178/hls/密钥"
打开网页输入地址 开始播放
法二:
下载播放器 http://sdk.bce.baidu.com/media-sdk/cyberplayer-3.5.3.zip
在cyberplayer-3.5.3文件下创建index.html 代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="playercontainer"></div>
</body>
<script type="text/javascript" src="cyberplayer.js"></script>
<script type="text/javascript">
var player = cyberplayer("playercontainer").setup({
640,
height: 360,
file: "rtmp://192.168.0.178/hls/1234", // 注意!!!<—rtmp直播地址,这里填写自己对应的服务器地址
autostart: true,
stretching: "uniform",
volume: 100,
controls: true,
rtmp: {
reconnecttime: 5, // rtmp直播的重连次数
bufferlength: 1 // 缓冲多少秒之后开始播放 默认1秒
},
ak: "XXXXXXXXXXXXXXXXXXXX" // 注意!!百度云管理控制平台注册即可获得accessKey
});
</script>
</html>
accessKey获取路径 https://console.bce.baidu.com/iam/#/iam/accesslist
把cyberplayer-3.5.3导入到HBuilder运行浏览器打开index.html可见直播效果 ,如果是谷歌浏览器需要设置flash插件允许使用