快速集成iOS基于RTMP的视频推流
http://www.jianshu.com/p/8ea016b2720e
效果图
iTools有点卡, 但是推到服务器倒是很快的.
前言
这篇blog是iOS视频直播初窥:<喵播APP>的一个补充. 因为之前传到github上的项目中没有集成视频的推流.有很多朋友简信
和微博
上问我推流这部分怎么实现的. 所以, 我重新集成了RTMP
的推流, 合并到了之前的项目中.
下载链接
github(完整版视频直播)
blog详解(建议大家结合这篇一起看)
Mac搭建nginx+rtmp服务器
我个人电脑里面很早以前就搭建过
nginx+rtmp
服务器, 但是昨天在公司电脑上搭建的时候, 手动输入命令的时候, 还是出现了bug(所以, 建议大家直接复制命令, 不要手动输入命令). 所以记录一份详细的搭建步骤, 防止再次跳坑...
此段教程参考自推酷:Mac搭建nginx+rtmp服务器
- 打开终端, 查看是否已经安装了
Homebrew
, 直接终端输入命令
- 打开终端, 查看是否已经安装了
man brew
如果Mac已经安装了, 会显示一些命令的帮助信息. 此时输入Q退出即可, 直接进入第二步.
反之, 如果没有安装,执行命令
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果安装后, 想要卸载
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
- 2.安装nginx
先clone nginx项目到本地
brew tap homebrew/nginx
执行安装:
brew install nginx-full --with-rtmp-module
此时, nginx和rtmp模块就安装好了
输入命令:
nginx
在浏览器里打开http://localhost:8080
如果出现下图, 则表示安装成功
如果终端上提示
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
.....
则表示8080
端口被占用了, 查看端口PID
lsof -i tcp:8080
根据端口PID, kill掉(这儿的9603
换成你自己8080
端口的PID)
kill 9603
然后重新执行nginx
, 打开http://localhost:8080
- 3.配置nginx和ramp
首先我们查看nginx
安装到哪了
brew info nginx-full
如图, 找到nginx.conf
文件所在位置
通过vim
或者点击Finder
->前往
->前往文件夹
->输入/usr/local/etc/nginx/nginx.conf
->用记事本工具(推荐Sublime Text
)打开nginx.conf
.
直接滚到最后一行, 在最后一个}
(即最后的空白处, 没有任何{}
)后面添加
# 在http节点后面加上rtmp配置:
rtmp {server {listen 1935;application rtmplive {live on;record off;}}
}
然后重启nginx(其中的1.10.1要换成你自己安装的nginx
版本号, 查看版本号用nginx -v
命令即可)
/usr/local/Cellar/nginx-full/1.10.1/bin/nginx -s reload
昨天, 就在执行这段命令的时候, 坑出现了.(如果你命令执行成功, 重启成功了, 没有没有任何异常, 请直接跳转到下一步)
执行命令的时候, 报异常
nginx: [emerg] unknown directive “rtmp” in /usr/local/etc/nginx/nginx.conf:119
rtmp
成了未知指令. 我赶紧Google, 将其中的答案都试了一遍, 这个bug涛声依旧. 最后实在没办法了, brew list
查看所有安装的模块, 才发现是自己手动敲命令的时候, 将nginx-full
变成了nginx -full
.
上解决方案:
卸载nginx
brew uninstall nginx
再次安装nginx
brew install nginx-full --with-rtmp-module
- 安装ffmpeg
执行命令
brew install ffmpeg
安装ffmpeg
时间就要长一点了. 如果速度过慢, 建议FQ. 不过也才50多M的东西, 耐心一点就好. 等待的时间里, 再安装一个支持rtmp协议的视频播放器VLC
- ffmpeg推流
以我桌面的一个loginmovie.mp4
(自己准备一个视频文件, 也可以用我github项目中Resource
文件下的两个视频文件)为例, 执行推流命令
- ffmpeg推流
ffmpeg -re -i /Users/sunlin/Desktop/loginmovie.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/rtmplive/room
将视频推流到服务器后,打开VLC,然后File->open network->输入:
rtmp://localhost:1935/rtmplive/room
效果如图
快速集成直播推流
前提条件:
- 去github上下载最新的喵播项目.
- 根据上面教程配置好nginx+rtmp服务器
原先准备自己实现一下直播推流,但是今天在技术群聊的时候, 有朋友推荐了优酷土豆旗下
来疯直播
前不久开源的iOS推流框架LFLiveKit. 是用OC写的, 很适合学习(我也准备深入研究一下这个框架, 有什么疑问大家可以一起探讨), 集成也非常简单, 几句代码就OK了.
下载好我写的喵播后, 在Xcode左下方直接搜索ShowTimeViewController
, 进入ShowTimeViewController.m
. 搜索- (IBAction)living:(UIButton *)sender
, 将里面的stream.url
替换成你自己的rtmp地址即可.
tip:
LFLiveKit
已经集成了GPUImage
, 如果项目中有集成GPUImage
, 需要将之前的移除掉. 且集成LFLiveKit
需要关闭Bitcode
.
结案陈词
现在的喵播算得上是一个比较完整的视频直播项目了, 虽然用了很多第三方, 但是也节省了开发的时间, 提升了开发效率.
后期这个项目我还会不断的完善, 如果你有什么好的idea或者效果, 可以微博私信我, 如果我能搞定, 我会尽快加上去的.
github下载地址
完整版视频直播:喵播下载地址
联系我
github
简书
原文链接:http://www.jianshu.com/p/8ea016b2720e
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
转载于:https://www.cnblogs.com/itlover2013/p/5668008.html
快速集成iOS基于RTMP的视频推流相关推荐
- 在直播软件搭建中,如何基于rtmp实现视频直播?
最近几年直播软件搭建可谓大火,这也就导致了在视频直播领域,有不同的商家提供各种的商业解决方案,包括软硬件设备,摄像机,编码器,流媒体服务器等.本文要讲解的是在直播软件搭建中,如何基于rtmp实现视频直 ...
- ffmpeg rtmp音视频推流实现
ffmpeg rtmp音视频推流实现 紧接上篇文章,实现本地推流,需要经历容器层→解封装→容器层→协议层. 1.准备容器. 容器里有流.编码器等,需要对这些进行规定:为了方便理解,举个不恰当的例子,就 ...
- iOS - 直播流程,视频推流,视频拉流,简介,SMTP、RTMP、HLS、 PLPlayerKit
收藏笔记 1 . 音视频处理的一般流程: 数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示 1.数据采集: 摄像机及拾音器收集视频及音频数据,此时得到的为原始数据 涉及技术或协议: ...
- Android开发基于RTMP实现视频直播
前言 近两年时间,视频直播可谓大火.在视频直播领域,有不同的商家提供各种的商业解决方案,包括软硬件设备,摄像机,编码器,流媒体服务器等.本文要讲解的是如何使用一系列免费工具,打造一套视频直播方案. 视 ...
- android rtmp流媒体服务器,Android 使用Rtmp音视频推流
http://blog.csdn.net/a992036795/article/details/54583571 前言 本文介绍的是使用Android摄像头.麦克风采集的音.视频进行编码.然后通过li ...
- Android 使用Rtmp音视频推流
前言 本文介绍的是使用Android摄像头.麦克风采集的音.视频进行编码.然后通过librtmp推送到流媒体服务器上的功能. 我所使用的环境:Android Studio 2.2.3 .NDK13. ...
- 日本大阪大学万伟伟研究员介绍基于WRS系统机器人的快速集成方法和应用
智能机器人已经日益成为各种生产中不可或缺的主体,通过系统集成,可以使它以其灵活高效的特性组成各种各样的应用系统,提高了生产率,增强了柔性,适应了当今的发展趋势. <智能机器人时代的自动化与系统集 ...
- RTSP视频推流方法汇总
1 基于rtsp-simple-server的视频推流 rtsp-simple-server是一个rtsp推流服务器,可以与gstreamer或ffmpeg结合进行推流.下载对应平台版本,直接运行即 ...
- iOS 直播推流 - 搭建基于RTMP的本地Nginx服务器
前端时间,公司要调研直播相关的内容,特地花时间进行了一番调研. 本篇将记录其中的推流篇-本地推理播放测试. 关于Nginx: 配置Nginx以支持HLS.RTMP的推流与拉流,iOS系统使用LFLiv ...
最新文章
- linux ssh 脚本 密码,ssh自动登录的4种实现方法
- 基于visual Studio2013解决面试题之1002公共子串
- Apache访问日志切割
- 中澜视讯产品运营总监黄超强:产品+付费+未来汽车
- devstack部署openstack流程与相关问题的记录(ubuntu 16.04)
- 邵阳学院计算机科学与技术专业分最低,邵阳学院在湖南各专业录取最低分/最低位次...
- HarmonyOS之AI能力·实体识别
- Apache Flink 为什么能够成为新一代大数据计算引擎?
- 【Python】Matplotlib绘制日期型时间序列图
- java jdbc连接_java-jdbc数据库连接
- elementui带输入建议查询_2020年度初级会计成绩查询指南!查询入口+查询流程+常见问题答疑...
- 每天Leetcode 刷题 初级算法篇-数学问题-计数质数
- SpringMVC深度探险(四) —— SpringMVC核心配置文件详解
- PHP 多维数组转换一维数组
- web项目中图标的前端处理方案
- 计算机导论的论文范例,★计算机导论论文提纲范文计算机导论论文提纲格式模板...
- MATLAB APP全局变量的使用
- 【Java】爬虫,看完还爬不下来打我电话
- 运营商大数据有哪些获客方式?
- Ruby-Devise采用多种形式登录
热门文章
- 18 File Duplication and Pipes
- D3 selectselectAll
- numpy.argmax/argmin/max/min
- 云计算安全之CCSKv4.0(201910考的)
- 分布式SQL学习总结(1)——蚂蚁金服资深总监韩鸿源:像使用集中式数据库一样使用OceanBase分布式数据库
- Redis学习总结(7)——怎么保持缓存与数据库一致性?
- 技术人员如何创业《一》- 产品及想法
- Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例
- 湖南单招计算机专业大学排名,2021湖南单招学校排名及分数线:湖南单招分数线高吗?...
- ios java 加密_AES加密 - iOS与Java的同步实现