基於rtmp的移動端推流解決方案

因工作需要,及考慮成本因素,需要探索一套免費的移動端基於rtmp推流的直播解決方案,過程雖稍顯曲折,但最終還是完成了目標。在這裏將記錄下來,以便日後查閱。

總體思路

移動端推流(RTMP) ---> 流媒體服務器 ---> web服務器 ---> 網頁播放

移動端推流工具使用 Larixbroadcaster ,支持安卓和蘋果,並且有提供SDK,方便集成與二次開發,app商店有載,https://softvelum.com/larix 流媒體服務器的搭建使用 nginx+rtmp 方案, nginx-rtmp模塊github座標,https://github.com/arut/nginx-rtmp-module web容器直接使用 nginxhttp://nginx.org/en/download.html 網頁播放,採用 ckplayer 作爲web播放器,http://www.ckplayer.com

1. Larixbroadcaster的安裝過程省略了
2. 流媒體服務器的搭建,nginx+rtmp
  • 1,使用docker容器,公共倉庫有大神製作好的鏡像,適合測試使用,便捷快速。

Centos7環境下的安裝啓動腳本

#!/bin/sh
# Author: Alusss
###

##docker-compose版本,https://github.com/docker/compose/releases/查閱可用版本
dcv=1.25.1
   
###安裝docker
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.nginx.bak -f
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.bak -f
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.bak -f
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
rm -rf /var/lib/docker
curl -sSL https://get.daocloud.io/docker | sh
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

##安裝docker-compose(選裝)
yum -y remove docker-compose
rm -rf /usr/local/bin/docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/$dcv/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
 
##檢查版本
docker -v
docker-compose -v  
  • 2,linux環境,下載nginx源碼和nginx-rtmp-module,自行編譯安裝。

編譯安裝腳本

#!/bin/sh
# Author: Alusss
###

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.nginx-rtmp -f
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.rtmp -f
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.rtmp -f
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
yum install -yq tar wget gcc gcc-c++ make automake autoconf pcre pcre-devel zlib zlib-devel openssl openssl-devel 

#設置nginx版本,rtmp版本
nginx_ver="1.16.1"
rtmp_ver="1.2.1"
dir="/usr/local/nginx"
temp="/root/nginx-rtmp"
user="root"
group="root"
args="--user=$user --group=$group --prefix=$dir --conf-path=$dir/conf/nginx.conf --pid-path=$dir/conf/nginx.pid --lock-path=$dir/lock/nginx.lock --error-log-path=$dir/log/error.log --http-log-path=$dir/log/access.log --with-http_gzip_static_module --http-client-body-temp-path=$dir/temp/client --http-proxy-temp-path=$dir/temp/proxy --http-fastcgi-temp-path=$dir/temp/fastcgi --http-uwsgi-temp-path=$dir/temp/uwsgi --http-scgi-temp-path=$dir/temp/scgi --with-http_stub_status_module --with-http_ssl_module"

mkdir $temp
cd $temp
curl -o "nginx-$nginx_ver.tar.gz" http://nginx.org/download/"nginx-$nginx_ver.tar.gz"
tar -xzf "nginx-$nginx_ver.tar.gz"
rm -f "nginx-$nginx_ver.tar.gz"
curl -o "nginx-rtmp-module-$rtmp_ver.tar.gz" https://codeload.github.com/arut/nginx-rtmp-module/tar.gz/v"$rtmp_ver"
tar xzf "nginx-rtmp-module-$rtmp_ver.tar.gz"
rm -f "nginx-rtmp-module-$rtmp_ver.tar.gz"

useradd -s /sbin/nologin $user -M
cd nginx-$nginx_ver
./configure $args --add-module="$temp/nginx-rtmp-module-$rtmp_ver"
make -j8
make install
rtmp {
    server {
        listen 1935;		
        access_log 	logs/rtmp.access.log;
        application live {
            live on;
            hls on;  
            hls_path html/hls;
            hls_fragment 5s; 
            publish_notify on;
            }
        application hls {
            live on; 
            hls on;  
            hls_path temp/hls;  
            hls_fragment 5s;  
            }
        record all;
        record_unique on;
        record_path /data/rtmp/record;
        record_suffix -%Y-%m-%d-%H_%M_%S.flv;
        }
    }

推流地址: rtmp://ip:1935/live/a nginx下html/hls下會生成a.m3u8文件。 通過ckplayer插件,(ckplay已經放在上面nginx裏面)在http://ip/index.html頁面播放。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章