iOS -- 视频直播框架ijkplayer的集成

  最近直播火的一塌糊涂,人人都想搞直播,各路明星也开直播,也诞生了很多网红。刷着跑车,谢谢点亮,各取所需!各个公司也想分到一杯羹,纷纷搭起了直播平台,目前较出名的有:

映客 、斗鱼、熊猫、花椒 等等

  效果图如下:

iOS -- 视频直播框架ijkplayer的集成_第1张图片
喵播直播页面

  直播原理:

把主播录制的视频,推送到服务器,在由服务器分发给观众观看。

  直播环节:

推流端(采集、美颜处理、编码、推流)、服务端处理(转码、录制、截图、鉴黄)、播放器(拉流、解码、渲染)、互动系统(聊天室、礼物系统、赞)

  实现流程:

采集、滤镜处理、编码、推流、CDN分发、拉流、解码、播放、聊天互动

  如果想要自己从零开始搭建,除非是大牛,而且是一群大牛,因为直播需要运用的技术非常多,例如视频/音频处理、图形处理、视频/音频压缩、CDN分发、即时通讯,都需要你学习很久!所以现在对于对于一个初创团队来讲,自研直播不管在技术门槛、CDN、带宽上都是有很大的门槛的,而且需要耗费大量的时间才能做出成品,不利于拉投资。一般会采取使用第三方SDK。但对于公司直播平台大,从长远看,自研可以节省成本,技术成面比直接用SDK可控。

  那有哪些第三方SDK能够快速的开发一个完整的直播APP呢?

  即构科技

自研语音视频引擎,在语音前处理、网络自适应和跨平台兼容性等方面,达到国际顶尖水平。致力于提供全球最清晰稳定的实时语音视频云服务,帮助企业快速获得实时通讯能力。花椒、一直播、繁星、么么、美播都是用此SDK;

  腾讯云

直播(Live Video Broadcasting)依托腾讯强大的技术平台,为您提供专业稳定快速的直播接入和分发服务,全面满足超低延迟和超大并发访问量的苛刻要求

  网易视频云

基于专业的跨平台视频编解码技术和大规模视频内容分发网络,提供稳定流畅、低延时、高并发的实时音视频服务,可将视频直播无缝对接到自身App

  七牛云

专为直播平台打造的全球化直播流服务和一站式实现SDK端到端直播场景的企业级直播云服务平台;熊猫TV、龙珠TV等直播平台都是用的七牛云.

  还有阿里云等等,就不一一列举了;这些第三方提供完整的方案,较简便,当然需要花钱!公司有钱,也急需完整开发的可以选择使用。下面介绍一种免费拉流开源SDKijkplayer的集成,顾名思义,拉流就是播放,ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS。

  一、首先下载ijkplayer,下载地址https://github.com/Bilibili/ijkplayer,star很高哦~
iOS -- 视频直播框架ijkplayer的集成_第2张图片
gitHub下载页面
  二、看下README.md文档,这里会教我们怎么操作。操作步骤及添加的库都在里面。下面就详细介绍下流程。
iOS -- 视频直播框架ijkplayer的集成_第3张图片
README.md
  三、其实下载完成之后下一步操作就是编译ijkplayer,也就是编译 ffmpeg:

  1、打开终端,先执行cd jkplayer-master路径,进入到该文件夹下,路径拖入终端就行,如下图:

iOS -- 视频直播框架ijkplayer的集成_第4张图片
jkplayer-master文件夹

iOS -- 视频直播框架ijkplayer的集成_第5张图片
终端进入jkplayer-master文件夹

  2、在终端执行命令 ./init-ios.sh,有点慢,视网速决定,我大概花了一个半小时,耐心等待,此操作目的是下载ffmpeg。当100%时说明下载完毕!

iOS -- 视频直播框架ijkplayer的集成_第6张图片
下载 ffmpeg

  3、下载完成后,进入 jkplayer-master中的 ios文件夹,在终端输入 cd ios

iOS -- 视频直播框架ijkplayer的集成_第7张图片
进入iOS文件夹

  4、执行 ./compile-ffmpeg.sh clean命令

iOS -- 视频直播框架ijkplayer的集成_第8张图片
执行./compile-ffmpeg.sh clean命令

  5、执行 ./compile-ffmpeg.sh all命令, 编译 ffmpeg。此次编译时间也较久,大概十几分钟,到此也编译完成了;

iOS -- 视频直播框架ijkplayer的集成_第9张图片
执行./compile-ffmpeg.sh all命令
  四、打包静态库IJKMediaFramework.framework合并

  1、打开文件夹IJKMediaPlayer下的工程IJKMediaPlayer.xcodeproj

iOS -- 视频直播框架ijkplayer的集成_第10张图片
打开工程IJKMediaPlayer.xcodeproj

  2、打开工程后先选择IJKMediaFramework,然后点击Edit Scheme

iOS -- 视频直播框架ijkplayer的集成_第11张图片
32122.png

  3、选择Release后点击close

iOS -- 视频直播框架ijkplayer的集成_第12张图片
选择Release后点击close

  4、然后分别选择真机和模拟器进行编译,执行command B,这时在目录Products文件下多了个IJKMediaFramework.framework静态库,然后右击Show in Finder 进入文件夹


iOS -- 视频直播框架ijkplayer的集成_第13张图片
12232.png

  5、上步编译一定要选择真机和模拟器分别编译一遍,才会得到下面的两个版本的framework

iOS -- 视频直播框架ijkplayer的集成_第14张图片
真机和模拟器

  6、接下来就是合并真机和模拟器的framework了,注意是IJKMediaFramework.framework里面的IJKMediaFramework文件


iOS -- 视频直播框架ijkplayer的集成_第15张图片
合并的文件

  合并的命令是:

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

  1.合并操作很容易出现问题,当提示这个错误时:

error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can't move temporary file: /Users/xiong/Desktop/demo to file: /Users/xiong/Desktop/demo.lipo (Is a directory)

  解决方法:
  此错误一般是在合并后的路径没有加上合并后生成的文件名字,加上就行。

  2.当出现这种错误时:

xcrun: error: active developer path ("/Applications/Xcode 7.1.app/Contents/Developer") does not exist, use xcode-select --switch path/to/Xcode.app to specify the Xcode that you wish to use for command line developer tools (or see man code-select)

  解决方法:
此错误是多个Xcode,删掉一个后出现,终端执行sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer命令,然后再输入一次系统的密码就可以。

  下面是我合并时输入的命令,可以参考下:

iOS -- 视频直播框架ijkplayer的集成_第16张图片
合并命令

  7、合并后,这边就生成了一个合并的文件:

iOS -- 视频直播框架ijkplayer的集成_第17张图片
合并生成的文件

  8、然后把合并的文件替换真机里面的IJKMediaFramework文件

iOS -- 视频直播框架ijkplayer的集成_第18张图片
替换文件

  9、然后IJKMediaFramework.framework就是我们需要的框架了


iOS -- 视频直播框架ijkplayer的集成_第19张图片
最终的framework
  五、导入静态库到我们的工程
iOS -- 视频直播框架ijkplayer的集成_第20张图片
导入库

  导入库之后,我们先包含头文件#import 编译没问题就说明集成成功了,如果有碰到这个问题 :

iOS -- 视频直播框架ijkplayer的集成_第21张图片
报错

  请再引入libc++.tbd解决

  六、到此ijkplayer已集成完成,接下来就是播放了

  1、先定义两个View

@property (atomic, retain) id  player;
@property (nonatomic, strong) UIView *playerView;

  2、创建播放器

//背景View
self.playerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
self.playerView.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:self.playerView];

//提示文字
UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, SCREEN_HEIGHT/2-30, SCREEN_WIDTH-20, 30)];
titleLabel.text = @"正在加载视频,请稍后...";
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.textColor = [UIColor whiteColor];
titleLabel.font = [UIFont systemFontOfSize:18];
[self.playerView addSubview:titleLabel];

//创建播放器
NSString *url =  @"http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8";//播放地址
self.player = nil;
self.player = [[IJKFFMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString: url] withOptions:nil];
self.player.shouldAutoplay = YES;//自动播放
[self.player setScalingMode:IJKMPMovieScalingModeAspectFill];
[self.playerView addSubview:_player.view];
[self.player prepareToPlay];
    
if (![self.player isPlaying]) {
    [self.player play];
}


  3、界面消失,一定要记得停止播放

[self.player pause];
[self.player stop];
[self.player shutdown];

  中间遇到过坑,不过也总算成功了,遇到问题多试几次,做出来还是挺好玩的,也吸取了一些大神的经验。

声明: 转载请注明出处http://www.jianshu.com/p/6fbf05a6a257

你可能感兴趣的:(iOS -- 视频直播框架ijkplayer的集成)