一、简介
整体是使用nginx搭建HTTP FLV流媒体服务器:
流程:音视频->rtmp->http-flv
音视频转为rtmp需要借助ffmpeg转化。
rtmp转为http-flv需要借助nginx转化。
nginx-http-flv-module是基于nginx-rtmp-module开发的,包含nginx-rtmp-module所有功能,因此不能nginx-rtmp-module同时安装,其编译安装步骤与nginx-rtmp-module类似
名称 | 参考链接 | 描述 |
---|---|---|
ffmpeg软件包下载地址 | RPM Fusion - RPM Fusion |
二、操作步骤
1. 修改配置支持HTTP FLV
在/etc/nginx/nginx.conf配置文件中增加以下内容
#与http模块同级 rtmp {server {listen 1935;chunk_size 4096;application myapp {live on;meta off;#为了兼容flvj.jshls on;hls_path /tmp/hls;hls_fragment 4;hls_playlist_length 30;record off;allow play all;}}# 第N个转流地址server { listen xxxx; #监听的端口号application xxxx { #自定义的名字live on; } } }http {include mime.types;default_type application/octet-stream;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}location /hls{add_header Access-Control-Allow-Origin *;types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}alias /tmp/hls;expires -1;}location /flv {flv_live on;chunked_transfer_encoding on; #支持'Transfer-Encoding: chunked'方式回复add_header 'Access-Control-Allow-Origin' '*'; #添加额外的 HTTP 头add_header 'Access-Control-Allow-Credentials' 'true'; #添加额外的 HTTP 头}}} |
2. 安装ffmpeg
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm #查看ffmpeg版本 ffmpeg -version |
3. 启用ffmpeg进行推流
以下命令需要修改rtsp流地址,rtmp地址以服务器实际配置为准,其他命令暂时复制即可。
-rtsp_transport tcp 是将默认的udp协议转为tcp协议,可以一定程度上解决花屏(丢包)的问题。
# 命令 ffmpeg -rtsp_transport tcp -i [rtsp流地址] flv -r 25 -s 1920*1080 -an [转换后的rtmp流地址] # 音视频转码为rtmp流 ffmpeg -re -i input_file.mp4 -c copy -f flv rtmp://server_url/stream_key # 实例 ffmpeg -rtsp_transport tcp -i rtsp://admin:123456@192.168.00.00 -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/hik01/ # 后台运行,在命令前加nohup,后加 & nohup ffmpeg -rtsp_transport tcp -i rtsp://admin:123456@192.168.00.00 -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/hik01/ & |
4. 验证flv流是否可用
用VLC播放如下串流:http://10.45.12.29/flv?port=1935&app=myapp&stream=mystream,验证HTTP FLV是否能播放成功
测试是否可以打开播放视频