最近项目中想实现直播的功能,所以研究了一段时间的直播功能,当然也是在别人的基础上不断的学习实现的,所以记录一下,希望对大家有所帮助。

直播拉流功能:

这里使用了开源的IJKPlayer第三框架,ijkplayer 是一款做视频直播的框架, 基于ffmpeg,是大多数搭建直播平台的首选框架,当然各大云平台都有自己的直播框架,具体大家使用的时候可以自行研究,有问题再留言,我这里不再说明框架的集成和拉流过程,具体的内容推荐两个链接,步骤比较齐全:

iOS中集成ijkplayer视频直播框架http://www.jianshu.com/p/1f06b27b3ac0

集成直播拉流的框架时间比较久,耐心等待一下,下面是集成时输出的部分内容:

打开终端, 进行合并, 命令行具体格式为:

打开终端,然后输入合并文件的终端命令,格式:
lipo -create 直接拖拽过来真机版本中的IJKMediaFramework文件 直接拖拽过来模拟器版本中的IJKMediaFramework文件 -output 直接拖拽过来一个保存将要生成文件的一个文件夹(可以在桌面上新建一个文件夹),然后在文件地址后面添加 /IJKMediaFramework
如果不理解,我建议在桌面上创建一个新的文件夹,然后将真机和模拟器版本的文件夹拖拽到新的文件夹中,然后进行上述的终端命令操作
如果输出的结果是error,而且生成的是以  .lipo结尾的文件,说明终端命令输入的有问题

lipo -create "真机版本路径" "模拟器版本路径" -output "合并后的文件路径"

如果输出这样的问题是:文件合并出现了问题,解决办法只能重新解压文件包,重新合并,一步一步来:

iOS直播拉流初窥:高仿<喵播APP>http://www.jianshu.com/p/b8db6c142aad

根据端口PID, kill掉(这儿的9603换成你自己8080端口的PID)

kill 9603

然后重新执行nginx, 打开http://localhost:8080

  • 3.配置nginx和ramp
    首先我们查看nginx安装到哪了
brew info nginx-full

如图, 找到nginx.conf文件所在位置


nginx.conf

通过vim或者点击Finder->前往->前往文件夹->输入/usr/local/etc/nginx/nginx.conf->打开nginx.conf(推荐使用文本编辑,当然只要打开可以编辑并保存就行)

直接滚到最后一行, 在最后一个}(即最后的空白处, 没有任何{})后面添加

# 在http节点后面加上rtmp配置:
rtmp {
    server {
        listen 1935;
        application rtmplive {
            live on;
            record off;
        }
    }
}

然后重启nginx(其中的1.12.0要换成你自己安装的nginx版本号, 查看版本号用nginx -v命令即可)

/usr/local/Cellar/nginx-full/1.12.0/bin/nginx -s reload

图:

如果出现问题,解决方案:
卸载nginx

brew uninstall nginx

再次安装nginx

brew install nginx-full --with-rtmp-module
    1. 安装ffmpeg

执行命令

brew install ffmpeg

安装ffmpeg时间就要长一点了. 如果速度过慢, 建议FQ. 不过也才50多M的东西, 耐心一点就好. 等待的时间里, 再安装一个支持rtmp协议的视频播放器VLC

安装命令输入后,会提示你 点击return或者任意键继续,同时需要输入电脑开机密码,没有直接敲回车
你可以在推流之前找到一个视频文件放在桌面上,然后推流查看的操作过程:先打开VLC,然后File—》open network —》输入:rtmp://localhost:1935/rtmplive/room,然后在终端输入推流命令:ffmpeg -re -i /Users/hbbhao/Desktop/login_video.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/rtmplive/room,就会看到实时的效果

推流成功:

源码下载+使用方法:http://pan.baidu.com/s/1miFmD0s好尴尬,文件有点大,GitHub上传不上去了,从百度云上下载吧,有问题可以留言。

拉流播放的地址替换:(本地IP地址查看方法:http://blog.csdn.net/hbblzjy/article/details/73250491)

推流地址替换:(本地IP地址查看方法:http://blog.csdn.net/hbblzjy/article/details/73250491)

如果输出了错误:

ERROR: PILI_RTMP_Connect0, failed to connect socket. 60 (Operation timed out)或者61(connect refuse)
ERROR: WriteN, PILI_RTMP send error 9, Bad file descriptor, (140 bytes)这类问题的解决办法:1、首先确认利用终端命令测试的推流已关闭,如果不确定输入终端命令exit推出,然后关闭终端;2、打开偏好设置选择安全与隐私关闭防火墙;3、修改ShowTimeViewController, 进入ShowTimeViewController.m. 搜索- (IBAction)living:(UIButton *)sender, 将里面的stream.url替换成你自己的IP地址即可,一定要使用IP地址,不能使用localhost代替,格式:rtmp://192.168.10.86(切记用数字ip):1935/rtmplive/room

重启nginx+rtmp服务器方法:

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流的更多相关文章

  1. Mac上搭建直播服务器Nginx+rtmp,实现手机推流、拉流

    转载自http://www.cnblogs.com/jys509/p/5649066.html 简介 nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择,本人在网 ...

  2. ffmpeg处理rtmp/文件/rtsp的推流和拉流

    ffmpeg处理rtmp/文件/rtsp的推流和拉流   本demo演示了利用ffmpeg从服务器拉流或本地文件读取流,更改流url或文件类型名称发送回服务器或存到本地的作用. 由于本程序只写了3个小 ...

  3. 用FFmpeg+nginx+rtmp搭建环境实现推流

    Windows: 1.下载文件: 链接:https://pan.baidu.com/s/1c2LmIHHw-dwLOlRN6iTIMg 提取码:g7sj 2.解压文件: 解压到nginx-1.7.11 ...

  4. 三、Windows下用FFmpeg+nginx+rtmp搭建直播环境 实现推流、拉流

    一.环境 1.开发环境:windows 2.开发工具:FFmpeg.nginx.nginx-rmtp-module (链接:https://pan.baidu.com/s/119d2GeMzddas_ ...

  5. 流媒体压力测试rtmp&hls(含推流和拉流)

    http://blog.csdn.net/sinat_34194127/article/details/50816045 [root@localhost ~]# yum install git unz ...

  6. Ubuntu中使用Nginx+rtmp搭建流媒体直播服务

    一.背景 本篇文章是继上一篇文章<Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务>文章而写,在上一篇文章中我们搭建了一个点播服务器,在此基础上我们再搭建一个直播服务器, ...

  7. nginx + rtmp 搭建流媒体服务器

    一.安装nginx服务器 1.路径说明: 路径:/usr/local/src 2.下载nginx-rtmp-module (我这里的目录是在/usr/local/src/下面) cd /usr/loc ...

  8. nginx + nginx-rtmp-module搭建直播流服务器实现推流实时直播功能

    业务需求 最近公司在做养老相关的业务,现在需要子女从小程序端对家里的老人通过家庭终端交互屏进行实时看护. 解决方案 第三方的一些现成的服务:腾讯音视频通话.直播功能; 阿里的音视频通信;两者都挺好的, ...

  9. Centos7 搭建Nginx+rtmp+hls直播推流服务器

    1 准备工具 使用yum安装git [root~]# yum -y install git 下载nginx-rtmp-module,官方github地址 // 通过git clone 的方式下载到服务 ...

随机推荐

  1. 20145327 《Java程序设计》第一周学习总结

    20145327 <Java程序设计>第一周学习总结 教材学习内容总结 Java根据领域不同,区分为Java SE.Java EE与Java ME三大平台.Java SE是各应用平台的基础 ...

  2. 再谈CSS动画 - 说点不知道的(一)贝塞尔曲线

    今天重新翻看<CSS 揭秘>"过渡与动画"一章,并把该章代码重新敲了一遍,代码托管在我的Github,在此总结一些心得. 动画的奥秘 在网页中添加动画的目的是让用户有更 ...

  3. LabVIEW之Vision基础 (一)之软件

    一.软件准备 NI LabVIEW软件视觉开发必备软件 1.开发平台:LabVIEW 2015Chinese 32位中文版 链接:http://pan.baidu.com/s/1eRGmFVc 2.N ...

  4. MR案例:Map-Join

    适用场景:一张表十分小[key不可重复].一张表非常大. 用法:在Job提交时,首先将小表加载到 DistributedCache 分布式缓存中,然后从DistributeCache中读取小表解析成 ...

  5. go语言中strings包中的Trim函数的作用是什么

    答:Trim函数原型如下: func Trim(s string, cutset string) string 去掉字符串s中首部以及尾部与字符串cutset中每个相匹配的字符,如: s=" ...

  6. NSURLSession 的学习资料

    一个nsurlsession的一些学习资料 http://www.cocoachina.com/ios/20161018/17785.html

  7. Tomcat access log配置(二)

    前次讨论了spring boot 中添加Tomcat access log 是轻松愉快,配置文件中添加server.tomcat.accesslog即可,那么如果是外置的Tomcat容器又该如何配置呢 ...

  8. LeetCode——4Sum

    1. Question Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + ...

  9. java 枚举的写法

    1.第一种形式: public interface PrealertConstants { enum platformCodeEnum{ CAINIAO(1), CLOSED(-5), OFFLINE ...

  10. MySQL索引失效的场景

    WHERE字句的查询条件里有不等于号(WHERE column!=-),MYSQL将无法使用索引 类似地,如果WHERE字句的查询条件里使用了函数(如:WHERE DAY(column)=-),MYS ...