一步步搭建视频直播系统,基于LFLiveKit+ijkplayer+rtmp(iOS端)
来源:互联网 发布:js 获取signature 编辑:程序博客网 时间:2024/06/04 19:31
在原著基础上加以改良,减少弯路
本文主要使用的三个技术:
1、推流:LFLiveKit
2、播放:ijkplayer
3、服务器:nginx+rtmp+ffmpeg
有了这三点技术就可以完成一个简约的直播系统。效果图如下(右边的是用模拟器设备运行播放的,中间的是用VLC播放器播放的,当前在用手机推流直播)。
一、推流
LFLiveKit:框架支持RTMP,由Adobe公司开发。github地址https://github.com/LaiFengiOS/LFLiveKit
LFLiveKit库里已经集成GPUImage框架用于美颜功能,GPUImage基于OpenGl开发,纯OC语言框架,封装好了各种滤镜同时也可以编写自定义的滤镜,其本身内置了多达125种常见的滤镜效果。
1.将项目下载到本地。
2.根据README.md文件集成,如下截图:
终端cd 到LFLiveKitDemo后,再输入vim Podfile后,文件直接自动补全如下
source 'https://github.com/CocoaPods/Specs.git' platform :ios,'7.0' target “LFLiveKitDemo” do pod 'LFLiveKit', :path => '../.' end
注意:须将“LFLiveKitDemo”的中文引号改为英文引号。同时删掉 , :path => '../.'
source 'https://github.com/CocoaPods/Specs.git' platform :ios,'7.0' target "LFLiveKitDemo" do pod 'LFLiveKit' end修改以后是这样的,vim环境下操作看这里 vim命令总结
然后ZZ保存退出vim 再 pod install
3.运行LFLiveKitDemo。
1)会有如下报错代码,将其注释
videoConfiguration.outputImageOrientation = UIInterfaceOrientationLandscapeLeft;videoConfiguration.autorotate = NO;
2)再次运行代码会有报错,修改后如下
_videoCamera.outputImageOrientation = statusBar;// if (statusBar != UIInterfaceOrientationPortrait && statusBar != UIInterfaceOrientationPortraitUpsideDown) {// @throw [NSException exceptionWithName:@"当前设置方向出错" reason:@"LFLiveVideoConfiguration landscape error" userInfo:nil];// } else {// }
3)再次运行便可成功推流。
4.百度里下载支持rtmp协议的视频播放器VLC,以确保我的直播已被推到服务器。
打开VLC,然后点击工具栏File - Open Network... ,然后输入的URL是LFLivePreview.m文件里stream.url值如下:
LFLiveStreamInfo *stream = [LFLiveStreamInfo new];stream.url = @"rtmp://live.hkstv.hk.lxdns.com:1935/live/stream153";[_self.session startLive:stream];
请注意这是LFLiveKit的公用服务器地址,别人也可以拉流获取看到你的直播。将在最后介绍在自己电脑中搭建自己的服务器,再也不怕被别人偷看了。
5.将LFLiveKit集成到自己的项目
新建项目名为LXPlayerLive,将Podfile里填写为
source 'https://github.com/CocoaPods/Specs.git'platform :ios,'7.0'target "LXPlayerLive" do pod 'LFLiveKit'end
CocoaPods和Podfile使用看这里:CocoaPods和Podfile
将LFLivePreview、UIControl+YYAdd、UIView+Add这三个类的.h与.m文件拖入项目中,运行无误后做如下修改1)改为竖屏直播,配置如下图
2)注释掉ViewController.m里的代码
//- (UIInterfaceOrientationMask)supportedInterfaceOrientations {// return UIInterfaceOrientationMaskLandscape;//}////- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {// return YES;//}
3)修改LFLivePreview.m的对应代码videoSize的值为
videoConfiguration.videoSize = CGSizeMake(360, 640);
二、播放
ijkplayer:是基于FFmpeg的跨平台播放器框架,由B站开发。目前已被多个主流直播App集成使用。github地址:https://github.com/Bilibili/ijkplayer若不愿运行源demo(配置时间较久),可以直接跳到第四步集成IJKMediaFramework库。
1.查看README.md,找到Build iOS,如下截图:
2.根据介绍进行终端命令行操作,截图如下:
继续执行如下命令(时间稍长)
cd ios./compile-ffmpeg.sh clean./compile-ffmpeg.sh all
3.运行IJKMediaDemo示例项目
成功后找到拉流的关键代码用于自己项目集成。在app界面上点击Online Samples,再点击任意一个cell即可播放。从而在demo中可追踪到IJKMoviePlayerViewController类,即是播放的类。
4.在自己项目LXPlayerLive中使用IJKMediaFramework.framework库播放
按照如上的步骤便可集成好ijkplayer,但是下载ffmpeg与编译,执行脚本时间太长也麻烦,所以有大神将其集成为了一个IJKMediaFramework.framework库,直接添加即可使用,免去上面步骤中的麻烦。(下载地址忘记了,有Debug与Release版本)1)注意:一定先把IJKMediaFramework.framework复制到项目文件夹中,别拖到项目中,然后在Build Phases -> Link Binary with Libraries -> Add这个位置添加IJKMediaFramework库2)根据screen4.png截图中的提示,再添加相应的13个库。
5.集成代码
实例demo中的播放界面用的mediaControl自己感觉很丑就不使用其相关代码了,将其余代码全部复制到自己项目的播放控制器中。集成的核心代码如下:
[IJKFFMoviePlayerController checkIfFFmpegVersionMatch:YES]; // [IJKFFMoviePlayerController checkIfPlayerVersionMatch:YES major:1 minor:0 micro:0]; IJKFFOptions *options = [IJKFFOptions optionsByDefault]; self.player = [[IJKFFMoviePlayerController alloc] initWithContentURL:self.url withOptions:options]; self.player.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; self.player.view.frame = self.view.bounds; self.player.scalingMode = IJKMPMovieScalingModeAspectFit; self.player.shouldAutoplay = YES; self.view.autoresizesSubviews = YES; [self.view addSubview:self.player.view];
此处的self.url暂时还使用LFLiveKit的开发者提供的免费公用直播推流服务器地址(在播放时常常看到别的程序员的直播,偷笑)。
三、服务器搭建
nginx+rtmp+ffmpeg:在本地搭建服务器,免去开通第三方直播的流量费用。现在我们的项目中集成了推流的所用的LFLiveKit,播放所需的ijkplayer,便可用手机做推流直播,模拟器做拉流播放。
1.安装Homebrew
因为安装nginx+rtmp+ ffmpeg需要Homebrew。使用命令man brew查看是否装有Homebrew,若没有自行再百度安装即可,我的由于之前装过ReactNative的环境需要Homebrew,因此会提示一个帮助信息(证明已经安装有了),然后输入Q即可退出。
2.安装nginx
分别键入如下命令
brew tap homebrew/nginxbrew install nginx-full --with-rtmp-modulenginxbrew info nginx-full
此时在终点末尾查找nginx.conf文件的位置,如下图
rtmp { server { listen 1935; application rtmplive { live on; record off; } }}
3.重启nginx
nginx -v 查看版本号后再执行
/usr/local/Cellar/nginx-full/1.10.1/bin/nginx -s reload
将上面的1.10.1换成你刚才输出的版本号。
4.安装ffmpeg
键入如下命令(时间较长)。
brew install ffmpeg
5.到此已完成nginx的服务器搭建
可将项目中所用的推流与拉流的URL由rtmp://live.hkstv.hk.lxdns.com:1935/live/stream153换成rtmp://192.168.15.122:1935/rtmplive/room。注意:1.将192.168.15.122换成自己电脑的ip地址,端口号1935别改。2.必须保证推流与拉流的设备与此电脑使用的是同一个局域网。
四、总结
本文主要分享如何使用第三方框架的经验,从源码到集成,没作代码解析。一个完整的直播系统需要涉及到的技术主要包括以下方面:1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、8.播放、9.聊天互动。其中1~4由LFLiveKit完成(2由GPUImage完成),5就是搭建的本地服务器,6~8由ijkplayer完成。
源码请点击github地址下载。
运行LXPlayerLive源码会报错,因缺少IJKMediaFramework库,文件太大不能上传到Github,请另外下载IJKMediaFramework按照上面的方法添加到我的demo中。再次运行如果报错如下:
需设置 General>Deployment Info> Deployment Target 为8.0
- 一步步搭建视频直播系统,基于LFLiveKit+ijkplayer+rtmp(iOS端)
- 一步步搭建视频直播系统,基于LFLiveKit+ijkplayer+rtmp(iOS端)
- iOS 基于LFLiveKit + ijkplayer + rtmp 推拉流
- ios直播---基于LFLiveKit的直播项目
- iOS直播-基于RTMP的视频推送
- iOS ijkplayer视频直播框架
- 自研视频直播技术点分析及使用LFLiveKit,ijkplayer
- Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)
- iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流
- iOS直播-播放基于RTMP协议的视频
- iOS直播-播放基于RTMP协议的视频
- [绍棠] iOS直播-播放基于RTMP协议的视频
- RTMP协议网络摄像机摄像机搭建视频直播系统
- iOS直播相关(快速集成基于RTMP的视频推流与拉流)
- iOS开发之集成ijkplayer视频直播
- iOS中集成ijkplayer视频直播框架
- iOS开发之集成ijkplayer视频直播
- iOS中集成ijkplayer视频直播框架
- Toolbar
- SVN解锁 clean up
- bzoj1014 火星人prefix
- 321. Create Maximum Number
- truncate 和 delete 区别总结
- 一步步搭建视频直播系统,基于LFLiveKit+ijkplayer+rtmp(iOS端)
- 求两个数的最大公约数 C语言
- 5个方法有效优化调查问卷
- 指定&和@的页面统一显示的指令
- 数据挖掘/机器学习算法--直接聚类算法(k-means)
- C++使用protobuffer的一些坑
- 不懂win10重装win7?0基础教你自己动手重装电脑系统!
- Builder模式--合理分工,自由扩展(创建型模式04)
- vs内存泄露检测方法