如何快速的开发一个完整的ios直播app(播放篇)

author author     2022-08-19     491

关键词:

前言

在看这篇之前,如果您还不了解直播原理,请查看上篇文章如何快速的开发一个完整的iOS直播app(原理篇)

开发一款直播app,集成ijkplayer成功后,就算完成直播功能一半的工程了,只要有拉流url,就能播放直播啦

本篇主要讲解的是直播app中,需要用到的一个很重要的开源框架ijkplayer,然后集成这个框架可能对大多数初学者还是比较有难度的,所以本篇主要教你解决集成【ijkplayer】遇见的各种坑

很多文章,可能讲解的是如何做,我比较注重讲解为什么这样做,大家有什么不明白,还可以多多提出来

如果喜欢我的文章,可以关注我微博:袁峥Seemygo,也可以来袁峥Seemygo,了解下我们的iOS培训课程。后续还会更新更多内容,有任何问题,欢迎简书留言峥吖。。。

效果

技术分享
直播.gif

一、基本知识

README.md文件:框架的描述文件,描述这个框架怎么使用

编译语言:程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要翻译,所以编译型语言的程序执行效率高,比如OC,C,C++

解释性语言:解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低

解释性语言执行和编译语言执行的区别

  • 解释性语言一行一行的解析,如果有错误,就不会执行,直接执行下一行。
  • 编译语言,只要有错,就不能编译,一行都不能执行。

脚本语言:属于解析语言,必须通过解释器解析,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。

  • python:脚本语言,适合网络应用程序的开发,有利于开发效率,现在显得越来越强大
  • PHP:服务器端脚本语言,适合做动态网站
  • JS:作为客户端的脚本语言,在浏览中解释执行,
  • shell:操作系统脚本语言,一般指Unix/Linux中使用的命令行
  • 编译语言,执行文件是二进制。脚本语言是解释执行的,执行文件是文本

shell解释器:shell是一个命令行解释器,相当于windows的cmd,处于内核和用户之间,负责把用户的指令传递给内核并且把执行结果回显给用户.

  • 默认Unix都有shell,OS基于Unix,因此OS自带shell。

bash: bash是一种shell解释器版本,shell有很多种版本,就像人,也分不同国家的人。

  • 牛程序员看到不爽的Shell解释器,就会自己重新写一套,慢慢形成了一些标准,常用的Shell解释器有这么几种,sh、bash、csh等

shell:通常我们说的shell,指的是shell脚本语言,而不是shell解释器。

  • 在编写shell时,第一行一定要指明系统需要哪种shell解释器解释你的shell脚本,如:#! /bin/bash,使用bash解析脚本语言
  • 什么时候使用shell命令,比如有些系统命令经常需要用到,可以把命令封装到一个脚本文件,以后就不用再敲一遍了,直接执行脚本语言。
  • 比如ijkplayer,就用脚本文件下载ffmpeg,因为下载ffmpeg需要执行很多命令,全部封装到脚本文件中。
  • 在导入一些第三方框架的时候,经常需要用到一些命令,所以一般都会封装到一个脚本文件中,以后只要执行脚本,就会自动执行集成第三方框架的命令。

sh:sheel脚本文件后缀名

二、下载ijkPlayer

  • 去到B站得github主页,找到ijkplayer项目,下载源码 ijkplayer下载地址
  • 打开Demo,查看用法,一般学习第三方库,都是先查看Demo
    技术分享
    Snip20160825_4.png

三、编译ijkPlayer的步骤

1、找到ijkPlayerMediaDemo并运行

  • 提示‘libavformat/avformat.h‘ file not found
技术分享
bug1.png

原因:因为libavformat是ffmpeg中的库,而ijkplayer是基于ffmpeg这个库的,因此需要导入ffmpeg

解决:查看ijkplayer的README.md,一般都会有说明。

技术分享
执行脚本.png

init-ios.sh脚本的作用:下载ffmpeg源码

如何执行init-ios.sh脚本文件

  • 步骤一:找到init-ios.sh脚本文件
技术分享
找到init-ios.sh文件.png
  • 步骤二:打开终端,cd进入到ijkplayer-master的目录中
技术分享
进入init-ios.sh目录.png
  • 注意是 cd 这个文件夹
技术分享
cd ijkplayer-master.png
  • 步骤三:输入./init-ios.sh,就会执行当前脚本了。
技术分享
执行init-ios.sh.png
  • 执行完脚本后,就会发现ijkplayer中有ffmpeg
技术分享
执行脚本后.png

2、下载好ffmpeg源码后,再次运行Demo

  • 发现还是报‘libavformat/avformat.h‘ file not found错误
  • 原因:执行init-ios.sh,仅仅是下载源码,但是源码并没有参与编译,需要把源码编译成.a文件
    • Demo依赖于IJKMediaPlayer库
技术分享
Demo源码.png
  • 打开 IJKMediaPlayer库,查看下源码
技术分享
IJKMediaPlayer工程位置.png
  • 打开 IJKMediaPlayer库

    技术分享
    IJKMediaPlayer源码.png
  • 右击,发现FFMPEG中的库都是红的,表示不存在

    技术分享
    Snip20160829_23.png
  • 解决:查看ijkplayer的README.md

技术分享
编译ffmpeg.png

编译ffmpeg库

  • 步骤一:进入到脚本文件的目录下
    技术分享
    cd ios.png
  • 步骤二:执行./compile-ffmpeg.sh clean
    • 步骤二功能:删除一些文件和文件夹,为编译ffmpeg.sh做准备,在编译ffmpeg.sh的时候,会自动创建刚刚删除的那些文件,为避免文件名冲突,因此在编译ffmpeg.sh之前先删除等会会自动创建的文件夹或者文件
技术分享
Snip20160828_19.png
  • 步骤三:执行./compile-ffmpeg.sh all,真正的编译各个平台的ffmpeg库,并生成所以平台的通用库.
技术分享
执行./compile-ffmpeg.sh all

执行compile-ffmpeg.sh all前

技术分享
编译前.png

执行compile-ffmpeg.sh all后

技术分享
编译后.png

3.再次运行Demo,就能成功了,因为IJKMediaPlayer库获取到ffmpeg库了

  • 编译完ffmpeg后,IJKMediaPlayer库中显示

    技术分享
    成功获取到ffmpeg库.png
  • cmd+r,Demo运行成功

技术分享
Demo运行成功.png

四、如何集成到ijkplayer到自己的项目中

  • 注意:ijkplayerREADME中的方法比较麻烦,不方便携带,不推荐。
技术分享
Snip20160830_9.png

1.推荐自己把IJKMediaPlayer打包成静态库,在导入到自己的项目中。

  • 如何打包,请参考,iOS中集成ijkplayer视频直播框架,写的非常不错,就不一一详细介绍了,但是只有发布版本的库
  • 我自己打包了ijkplayer两个版本库,分别用于调试和发布(DEBUG和Release),点击下载
  • 由于文件太大上传不了GitHUb,就上传到百度云了

2.直接把ijkplayer库拖入到自己的工程中,

  • 调试的话,拖入调试版本的ijkplayer库,发布的话,拖入发布版本的ijkplayer库
技术分享
Snip20160829_5.png

3.导入ijkplayer依赖的库,具体可以查看ijkplayer的README

技术分享
Snip20160829_6.png
技术分享
Snip20160829_7.png

五、使用ijkplayer直播

1.ijkplayer用法简介

  • ijkplayer用法比较简单,其实只要有直播地址,就能直播了
  • 注意:最好真机测试,模拟器测试比较卡,不流畅,真机就没有问题了

2.抓取数据

- (void)loadData
{
    // 映客数据url
    NSString *urlStr = @"http://116.211.167.106/api/live/aggregation?uid=133825214&interest=1";

    // 请求数据
    AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
    mgr.responseSerializer = [AFJSONResponseSerializer serializer];
    mgr.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", nil];
    [mgr GET:urlStr parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary * _Nullable responseObject) {

        _lives = [YZLiveItem mj_objectArrayWithKeyValuesArray:responseObject[@"lives"]];

        [_tableView reloadData];

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        NSLog(@"%@",error);

    }];
}

3.获取拉流url,直播

  • IJKFFMoviePlayerController:用来做直播的类
- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    // 设置直播占位图片
    NSURL *imageUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://img.meelive.cn/%@",_live.creator.portrait]];
    [self.imageView sd_setImageWithURL:imageUrl placeholderImage:nil];

    // 拉流地址
    NSURL *url = [NSURL URLWithString:_live.stream_addr];

    // 创建IJKFFMoviePlayerController:专门用来直播,传入拉流地址就好了
    IJKFFMoviePlayerController *playerVc = [[IJKFFMoviePlayerController alloc] initWithContentURL:url withOptions:nil];

    // 准备播放
    [playerVc prepareToPlay];

    // 强引用,反正被销毁
    _player = playerVc;

    playerVc.view.frame = [UIScreen mainScreen].bounds;

    [self.view insertSubview:playerVc.view atIndex:1];

}

4.结束播放

  • 界面不播放,一定要记得结束播放,否则会报内存溢出
技术分享
内存bug.png
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    // 界面消失,一定要记得停止播放
    [_player pause];
    [_player stop];
}

结束语

后续还会更新更多有关直播的资料,希望做到教会每一个朋友从零开始做一款直播app,并且Demo也会慢慢完善.
Demo点击下载

  • 由于FFMPEG库比较大,大概100M。
  • 本来想自己上传所有代码了,上传了1个小时,还没成功,就放弃了。
  • 提供另外一种方案,需要你们自己导入IJKPlayer库

    具体步骤:

  • 下载Demo后,打开YZLiveApp.xcworkspace问题
技术分享
打开YZLiveApp.xcworkspace问题
  • pod install就能解决
技术分享
Snip20160830_12.png
  • 下载jkplayer库,点击下载
  • 把jkplayer直接拖入到与Classes同一级目录下,直接运行程序,就能成功了
技术分享
拖入ijkplayer到与Classes同一级目录下.png
  • 注意不需要打开工程,把jkplayer拖入到工程中,而是直接把jkplayer库拷贝到与Classes同一级目录下就可以了。
  • 错误示范:不要向下面这样操作
技术分享
Snip20160830_14.png



文/袁峥Seemygo(简书作者)
原文链接:http://www.jianshu.com/p/7b2f1df74420
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。





































如何快速的开发一个完整的ios直播app(原理篇)

前言 大半年没写博客了,但我一直关注着互联网的动向,最近会研究很多东西,并分享,今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,由于第一次接触的原因,因此花... 查看详情

如何快速的开发一个完整的ios直播app(原理篇)

前言大半年没写博客了,但我一直关注着互联网的动向,最近会研究很多东西,并分享,今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,由于第一次接触的原因,因此花了很... 查看详情

如何快速的开发一个完整的ios直播app(原理篇)

一、个人见解(直播难与易)直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术... 查看详情

如何快速的开发一个完整的ios直播app(采集篇)

效果为了采集效果图,我也是豁出去了,请忽略人物,关注技术。忽略本人.png基本知识介绍AVFoundation:音视频数据采集需要用AVFoundation框架.AVCaptureDevice:硬件设备,包括麦克风、摄像头,通过该对象可以设置物理设备的一些属性... 查看详情

如何快速的开发一个完整的ios直播app(原理篇)

压缩前的每秒数据量:帧率X分辨率(单位应该是若干个字节)压缩比:压缩前的每秒数据量/码率(对于同一个视频源并采用同一种视频编码算法,则:压缩比越高,画面质量越差。) 视频文件格式:文件的后缀,比如.wmv,.mov,.mp4,.mp... 查看详情

ios:直播app---原理篇

【如何快速的开发一个完整的iOS直播app】(原理篇)转载自简书@袁峥Seemygo:http://www.jianshu.com/p/7b2f1df74420 一、个人见解(直播难与易)直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为... 查看详情

第三十二篇直播项目开发

1.直播app分类:主要分为两大类  >秀场直播如:映客花椒  >游戏直播如:斗鱼 2.iOS主要实现的技术  >播放:播放远程服务器收集到的视频  >录播:主播通过手机直播,客户端需要将直播实时视频传输给服... 查看详情

超强教程:如何搭建一个ios系统的视频直播app?

...备一定的难度与挑战!那假如自己搭建一个直播平台,该如何下手呢?莫慌,本文就给大家详细介绍如何搭建一个iOS系统的直播App?1流程熟悉1.1选择协议想要实现直播App,我们得先知道如何播 查看详情

视频直播app开发分析

...了。视频直播APP开发行业就像是吃螃蟹,来的早的人不懂如何吃,来得完的人只能眼睁睁的看着剩下的壳。只有深入了解直播行业,才能解决开发的痛点。  那么,视频直播APP开发的痛点有哪些?  1、直播信号差:很多的视... 查看详情

视频直播源码:如何在多彩的直播市场快速盈利

视频直播源码:如何在多彩的直播市场快速盈利一夜之间涌现出这么多平台,直播平台的竞争就像千军万马过独木桥一样。这种像共享单车一样陷入白热化竞争,这种格局下,如何能够突进重围打入市场分一杯羹呢?首先一定要... 查看详情

mac开发者的十八般兵器:重温10篇热文

...作效率的效果。闲话不扯了,来看看究竟是什么。 《如何快速的开发一个完整的iOS直播app(原理篇)》 大半年没写博客了,但我一直关注 查看详情

创业积累如何快速开发出一个高质量的app

【起】今早,一个技术群里有人想快速做出一个app,然后询问技术方案,大概是这样,拿到了200w投资,期望花20w两个月先做出一个app,包括ios,android, 先,呵呵,一下, 大概预估了一下,两个月20w,一个月10w,基本就... 查看详情

如何使用uni-app30分钟快速开发即时通讯应用|开发者活动

...大纲uni-app跨平台框架介绍使用uni-app生成Android&iOS应用如何搭建自己的即时通讯应用IM实战篇-uni-app经典问题答疑三、活动报名报名链接:https://mudu.tv/live/watch/meddae1l 查看详情

如何开发一套完整的直播软件源码,前期需要准备什么?(代码片段)

如何开发一套完整的直播软件,首先需要采集主播的视频和音频功能,然后传入流媒体服务器。本篇主要讲解如何采集主播的视频和音频功能,当前可以切换前置后置摄像头和焦点光标,直播APP拥有独立的美颜SDK,可以看见不一... 查看详情

基于react+如何搭建一个完整的前端框架(代码片段)

 1.使用create-react-app快速构建React开发环境  create-react-app是来自于Facebook,通过该命令我们无需配置就能快速构建React开发环境。  create-react-app自动创建的项目是基于Webpack+ES6。  执行以下命令创建项目:  $cnpminstall-g... 查看详情

ios直播app原理

...逼的框架,我们只需要用别人写好的框架,就能快速的搭建一个直播app,也就是传说中的站在大牛肩膀上编程。二、了解直播1.一个完整直播app功能1、聊天私聊、聊天室、点亮、推送、黑名单等;2、礼物普通礼物、豪... 查看详情

开发一个直播app多少钱?

...变现能力。那么一直备受关注的直播类APP的背后开发逻辑如何呢?做一个直播APP多少钱呢?下面,就让我们从几个方面一一进行了面解。  我们当下常用的视频直播APP软件项目为例,除了APP直播后台开发人员要把 查看详情

移动端互动直播(入门篇)

...来自网易云社区前言本文为手机视频直播开发新手,为了快速入门,利用强大google搜索引擎结合自身理解而整理的"视频直播入门背景知识"。背景知识名词解释推流协议RTMPRealTimeMessagingProtocol(实时消息传送协议) 使用FlashPlayer... 查看详情