因工作需要,及考虑成本因素,需要探索一套免费的移动端基于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页面播放。

基于rtmp的移动端推流解决方案的更多相关文章

  1. 基于rem的移动端自适应解决方案

    代码有更新,最好直接查看github: https://github.com/finance-sh/adaptive adaptivejs原理: 利用rem布局,根据公式 html元素字体大小 = d ...

  2. 基于rtmp+nginx 、vlc实现FFmpeg推流与wpf端拉流

    这周在研究基于rtmp+nginx直播流的实现,现总结如下: 0.所需文件: 链接:https://pan.baidu.com/s/1U5gsNI8Rcl684l5gVL6swg 提取码:dli9 1 ...

  3. c# 基于RTMP推流 PC+移动端 拉流播放

    网上关于直播相关的文章很多,但是讲解还是不够系统,对于刚刚接触直播开发的朋友实施起来会浪费不少时间.下面结合我自己的经验, 介绍一下直播方面的实战经验. 分成两个部分 第一部分是标题中介绍的基于RTM ...

  4. 最简单的基于FFmpeg的移动端例子:IOS 推流器

    转至:http://blog.csdn.net/leixiaohua1020/article/details/47072519   ================================== ...

  5. 最简单的基于FFmpeg的移动端样例:IOS 推流器

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  6. day122:MoFang:OSSRS流媒体直播服务器&基于APICloud的acLive直播推流模块实现RTMP直播推流

    目录 1.docker安装OSSRS流媒体直播服务器 2.基于APICloud的acLive直播推流模块实现RTMP直播推流 3.直播流管理 1.docker安装OSSRS流媒体直播服务器 1.OSS ...

  7. iOS:基于RTMP的视频推流

    iOS基于RTMP的视频推流 一.基本介绍 iOS直播一出世,立马火热的不行,各种直播平台如雨后春笋,正因为如此,也同样带动了直播的技术快速发展,在IT界精通直播技术的猴子可是很值钱的.直播技术涉及的 ...

  8. 视频直播技术之iOS端推流

    随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字.图片无法满足人们对视觉的需求,因此视频直播应运而生.承载了实时性Real-Time和交互性的直播云服务是直播覆盖各行各业的新动力.网 ...

  9. 最简单的基于FFmpeg的移动端例子:IOS 视频解码器-保存

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

随机推荐

  1. UVALive 4043 转化最佳完美匹配

    首先黑点和白点是组成一个二分图这毫无疑问 关键是题目中要求的所有黑白配的线不能交叉...一开始我也没想到这个怎么转化为二分图里面的算法. 后来看书才知道,如果两两交叉,则可以把两根线当四边形的对角线, ...

  2. NCRE的JAVA二级考试大纲

    全国计算机等级考试二级 Java 语言 程序设计考试大纲(2018 年版) 基本要求 1. 掌握 Java 语言的特点.实现机制和体系结构. 2. 掌握 Java 语言中面向对象的特性. 3. 掌握 ...

  3. Java中String类为什么被设计为final?

    Java中String类为什么被设计为final   首先,String是引用类型,也就是每个字符串都是一个String实例.通过源码可以看到String底层维护了一个byte数组:private f ...

  4. 对python里的装饰器

    内裤可以用来遮羞,但是到了冬天它没法为我们防风御寒,聪明的人们发明了长裤,有了长裤后宝宝再也不冷了,装饰器就像我们这里说的长裤,在不影响内裤作用的前提下,给我们的身子提供了保暖的功效. 再回到我们的主 ...

  5. with和上下文管理器

    with和上下文管理器 如果你有时间阅读源码的习惯,可能会看到一些优秀的代码会出现带有with关键字的语句. 对于系统资源如文件,数据库连接,socket而言,应用程序打开这些资源并执行完业务逻辑之后 ...

  6. CTF -攻防世界-web高手区-ics-06

    打开网址 根据题意点开报表中心(因为其他的点开都一样,不信你试试) 会看见id =1 想到burp爆破id 所以打开burp抓包(不会抓包的百度 或者看我web新手区,有一题就有抓包 我说的很详细) ...

  7. WGAN将数值限制在一定范围内 Python代码 tf.clip_by_value(p, -0.01, 0.01))

    tf.clip_by_value(p, min, max))   运用的是交叉熵而不是二次代价函数. 功能:可以将一个张量中的数值限制在(min,max)内.(可以避免一些运算错误:可以保证在进行lo ...

  8. Python 安装gevent,在导入gevent之后就报错了

    错误信息如下 RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected ...

  9. Nginx和php交互的两种方式

    Unix socket 也叫IPC socket  也就是进程间通信套接字用于同一台主机上的不同进程间交换数据 TCP socket IP socket要利用主机的传输层(tcp),可以用于同一台主机 ...

  10. PAT Advanced 1123 Is It a Complete AVL Tree (30) [AVL树]

    题目 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child ...