直播技术介绍
直播技术涵盖很广,现如今广泛了解的有视频网站的个人直播、手机直播、安防方面的摄像头监控等会使用到直播的技术。
绍直播流程中的各个技术环节。可以理解分为采集端、流媒体服务器以及播放端;还需要了解什么是推流,什么是拉流。
- 采集端:顾名思义是视频的源头,视频的采集一般都是从真实的摄像头中得到的。例如移动端设别、PC端设备的摄像头以及一些摄像头设备
- 流媒体服务器:流媒体服务器是整个直播技术框架的非常重要的一环,它需要接收从采集端推上来的视频流,然后将该视频流再推送到播放端
- 播放端:播放端就是各种app,网页中的播放器,拉取流媒体服务器上的视频流,然后进行转码,最终播放出来
- 推流:把采集阶段收集的数据封装好传输到服务器的过程
- 拉流:服务器已有直播内容,用指定地址进行拉去的过程
既然需要推流和拉流, 就必然涉及到视频流的传输,所以接下来介绍常用的流媒体传输协议 常用的流媒体传输协议有RTMP,RTSP,HLS,HTTP-FLV
- RTMP:(可用于推流端和拉流端) Real Time Messaging Protocol 实时消息传输协议,RTMP协议中,视频必须是H264编码,音频必须是AAC或MP3编码,且多以flv格式封包。因为RTMP协议传输的基本是FLV格式的流文件,必须使用flash播放器才能播放.
- RTSP:(用于推流端) Real-Time Stream Protocol,RTSP 实时效果非常好,适合视频聊天、视频监控等方向
- HLS(用于拉流端) Http Live Streaming,由Apple公司定义的基于HTTP的流媒体实时传输协议。传输内容包括两部分:1.M3U8描述文件,2.TS媒体文件。TS媒体文件中的视频必须是H264编码,音频必须是AAC或MP3编码。数据通过HTTP协议传输。目前video.js库支持该格式文件的播放
- HTTP-FLV(用于拉流端) 本协议就是http+flv,将音视频数据封装成FLV格式,然后通过http协议传输到客户端,这个协议大大方便了浏览器客户端播放直播视频流.目前flv.js库支持该格式的文件播放
1. 安装 Homebrow
Homebrew简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
卸载命令:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
2. 安装 Nginx 服务器
brew tap homebrew/nginx
3. 安装 Nginx 服务器和 rtmp 模块
brew install nginx-full --with-rtmp-module
查看 nginx 信息
brew info nginx-full
执行上面的命令后我们可以看到信息
执行命令 ,启动nginx服务
nginx
浏览器地址栏输入:http://localhost:8080
出现Welcome to nginx , 代表nginx安装成功了。
4. 配置 rtmp
编辑 nginx.conf 文件
cd /opt/homebrew/etc/nginx/
vim nginx.conf
配置下面两个字段
server {
listen 8080;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /hls {
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /usr/local/var/www;
add_header Cache-Control no-cache;
}
}
rtmp{
server {
listen 1935;
chunk_size 4000;
application rtmplive {
live on;
max_connections 1024;
}
application zbcs {
live on;
record off;
}
application hls{
live on;
hls on;
hls_path/usr/local/var/www/hls;
hls_fragment 5s;
}
}
}
rtmp是协议名称
server 说明内部中是服务器相关配置
listen 监听的端口号, rtmp协议的默认端口号是1935
application 访问的应用路径是 zbcs``
live on; 开启实时
record off; 不记录数据
5. 保存文件后,重新加载nginx的配置文件
nginx -s reload
6. 安装ffmepg工具
brew install ffmpeg
7. 安装 VLC
直接在浏览器上搜索 VLC,下载安装即可
8. 安装 node-media-server
NodeMediaServer支持:以rtmp,rtsp,hls协议拉进行推流,支持http-flv,ws-flv来进行拉流,也就是支持浏览器端使用http或websocket传输flv格式的视频流进行播放。
npm install node-media-server
新建app.js
const NodeMediaServer= require('node-media-server');
const config = {
rtmp: {
port: 1935,
chunk_size: 60000,
gop_cache: true,
ping: 60,
ping_timeout: 30
},
http: {
port: 8000,
allow_origin: '*',
}
};
var nms = new NodeMediaServer(config)
nms.run();
运行 app.js
访问localhost:8000/admin地址,访问node-media-server的管理端界面
9. 使用 FFmpeg 命令推送地址
推流摄像头
ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i "0" -vcodec libx264 -acodec libfaac -f flv rtmp://localhost:1935/zbcs/room
推流桌面 - 只有桌面内容
ffmpeg -f avfoundation -pixel_format uyvy422 -i "1" -f flv rtmp://localhost:1935/zbcs/room
只推流麦克风
ffmpeg -f avfoundation -i ":0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/zbcs/room
10. 验证视频
打开vlc这个播放器软件 点击File---->Open Network 在弹出来的框中选择Network然后输入URL:
rtmp://localhost:1935/zbcs/room
双击播放
播放界面
参考文章:
使用node-media-server搭建一个简易的流媒体服务器