美文网首页ios实用开发技巧直播App
iOS -- 视频直播框架ijkplayer的集成

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

作者: 杰森_Jason | 来源:发表于2017-08-24 11:09 被阅读116次

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

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

      效果图如下:

    喵播直播页面

      直播原理:

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

      直播环节:

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

      实现流程:

    采集、滤镜处理、编码、推流、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很高哦~
    gitHub下载页面
      二、看下README.md文档,这里会教我们怎么操作。操作步骤及添加的库都在里面。下面就详细介绍下流程。
    README.md
      三、其实下载完成之后下一步操作就是编译ijkplayer,也就是编译 ffmpeg:

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

    jkplayer-master文件夹 终端进入jkplayer-master文件夹
      2、在终端执行命令./init-ios.sh,有点慢,视网速决定,我大概花了一个半小时,耐心等待,此操作目的是下载ffmpeg。当100%时说明下载完毕! 下载 ffmpeg
      3、下载完成后,进入jkplayer-master中的ios文件夹,在终端输入cd ios 进入iOS文件夹
      4、执行./compile-ffmpeg.sh clean命令 执行./compile-ffmpeg.sh clean命令
      5、执行./compile-ffmpeg.sh all命令, 编译 ffmpeg。此次编译时间也较久,大概十几分钟,到此也编译完成了; 执行./compile-ffmpeg.sh all命令
      四、打包静态库IJKMediaFramework.framework合并

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

    打开工程IJKMediaPlayer.xcodeproj

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

    32122.png

      3、选择Release后点击close

    选择Release后点击close

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


    12232.png

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

    真机和模拟器

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


    合并的文件

      合并的命令是:

    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命令,然后再输入一次系统的密码就可以。

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

    合并命令

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

    合并生成的文件

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

    替换文件

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


    最终的framework
      五、导入静态库到我们的工程
    导入库

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

    报错

      请再引入libc++.tbd解决

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

      1、先定义两个View

    @property (atomic, retain) id <IJKMediaPlayback> 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的集成

      本文链接:https://www.haomeiwen.com/subject/mpkldxtx.html