iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

时间:2022-06-01 18:43:44

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

直播拉流功能:

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

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

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

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

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

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

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

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

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

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

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文件所在位置

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流
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

图:

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

如果出现问题,解决方案:
卸载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,就会看到实时的效果

推流成功:

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

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

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

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

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

iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

如果输出了错误:

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搭建直播的推流和拉流