Linux下使用FFmpeg将RTMP流转换为HLS

所需资料

安装FFmpeg

由于CentOS没有官方FFmpeg rpm软件包。但是,我们可以使用第三方YUM源(Nux Dextop)完成此工作。

sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

安装FFmpeg 和 FFmpeg开发包

sudo yum install ffmpeg ffmpeg-devel -y

测试FFmpeg

ffmpeg -h

配置安装nginx并添加nginx-http-flv-module到nginx中

依次安装系统相关依赖项

yum -y install unzip
yum -y install gcc-c++ 
yum -y install pcre pcre-devel  
yum -y install zlib zlib-devel 
yum -y install openssl openssl-devel

将nginx-http-flv-module和nginx上传并解压到/usr/local/nginx中

cd /usr/local/nginx
tar -zxvf nginx-1.8.1.tar.gz
unzip nginx-http-flv-module-1.2.6.zip

进入nginx目录下编译安装nginx

cd nginx-1.8.1
./configure --prefix=/usr/local/nginx  --add-module=/usr/local/nginx/nginx-http-flv-module
make && make install

prefix为nginx的安装的目录
add-moudle为nginx-http-flv-module的目录

配置Nginx 以实现流转换

配置RTMP

rtmp {
    server {
       listen 1935;
​
       application myapp {
           live on;
       }
       application live {
             live on;   #开启实时
             hls on;    #开启hls
             hls_path /usr/local/etc/nginx/html/multimedia/hls;  #hls的ts切片存放路径
             hls_fragment 2s;         #本地切片长度
             hls_playlist_length 6s;  #HLS播放列表长度
       }
    }}

配置HLS拉流

location /live {
    types {
        application/vnd.apple.mpegurl m3u8;
        video/mp2t ts;
    }
    alias /usr/local/etc/nginx/html/multimedia/hls/;
    add_header Cache-Control no-cache;
}

完整nginx配置

user  nginx;

# 自动分配工作进程数
worker_processes  auto;

# 绑定cpu
worker_cpu_affinity auto;

# 指明worker进程的ince值
worker_priority -15;

# 错误日志存放位置
error_log  /var/log/nginx/error.log warn;
# pid文件存放位置
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    accept_mutex on;         # 设置单个请求只唤醒一个进程
    multi_accept on;         # 设置一个工作进程可接收多个新网络连接
}

rtmp {
    server {
        listen 1985;

        application myapp {
            live on;
        }

       application live {
             live on;   #开启实时
             hls on;    #开启hls
             hls_path /home/server/hls;  #hls的ts切片存放路径
             hls_fragment 2s;        
             hls_playlist_length 6s;
        }
    }   
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    server_tokens off;      #隐藏版本号
    client_max_body_size 50m;   #调整nginx上传文件限制
    keepalive_timeout  65;

    #gzip  on;  开启压缩
    gzip on;
    gzip_vary on;
    gzip_buffers 16 8k;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif image/png application/x-protobuf;

    server {
        listen       1997;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location /live/ {
            types {
        	    application/vnd.apple.mpegurl m3u8;
       		    video/mp2t ts;
            }
            alias /home/server/hls/;
            add_header Cache-Control no-cache;
        }

    }

}

添加nginx软连接

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

启动nginx

nginx

使用FFmpeg进行转流

测试流地址:
rtmp://media3.scctv.net/live/scctv_800

使用ffmpeg进行转换

ffmpeg -re -i rtmp://media3.scctv.net/live/scctv_800 -c copy -f flv rtmp://127.0.0.1:1997/live/test

第一行的地址为测试地址
第二个地址为nginx中配置的rtmp中的live
第二个地址的IP需更改为nginx的服务器IP , 端口为rtmp中配置的端口
test部分为自定义 , 是hls文件夹下的.m3u8和切片的名称

测试拉流

使用vlc在windows中测试
拉流地址为 :

http://127.0.0.1:1997/live/test.m3u8

此处的test和ffmpeg转换的第二个地址末尾的test相对应

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值