Ios-视频直播-知识点汇总-持续更新

最近公司要求做视频直播,之前工作几年,视频一直都是弱项,没怎么接触过,现在正好有机会深入的去了解一下,记录一些遇到的坑和需要用到的东西.

~公司要求,用HLS协议,要求可以播放m3u8格式的,当时一听一脸懵逼,什么鬼

~查询的过程中,参考了很多同行的博客,有很多知识点都很分散,也有很多Demo,第三方SDK,下载不能用等等,再此汇总一下,方便大家参考

知识点:

下面的知识点还有术语,在查询文档的过程中,可能会经常遇到。

M3U8:可以做多码率的适配,根据网络带宽,客户端会选择一个适合自己码率的文件进行播放,保证视频流的流畅。

1.传输协议:

HLS:HTTP Live Streaming是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议。服务器要求低,因为涉及到切片,延时会比较大,需要了解TS流

RTSP:摄像头功能

RTMP:看下它与流媒体服务器交互的过程,RTMP协议的默认端口是1935,采用TCP协议。并且需要了解FLV的封装格式

RTP与RTCP等

2.视频推流与视频拉流工作过程解析

视频推流端:就是将采集到的音频,视频数据通过流媒体协议发送到流媒体服务器

2.1 采集音视频数据

iOS平台上采集音视频数据,需要使用AVFoundation.Framework框架,从captureSession会话的回调中获取音频,视频数据

2.2 硬编码,软编码音视频数据

软编码就是利用CPU资源来压缩音视频数据,硬编码与之相反。

软编码的话,现在广泛采用FFmpeg库结合编码库来实现,FFmpeg+X624来编码视频数据YUV/RGB输出H264数据,

FFmpeg+fdk_aac来编码音频数据PCM输出AAC数据。

2.3 根据所选流媒体协议封包音视频数据将音频,视频打包成packet

2.4 与服务器交互发送封包数据

根据所选流媒体协议,发送相应指令连接服务器,连接服务器成功后,就可以发送packet数据了

3.拉流

拉流,就是从流媒体服务器获取音频,视频数据

3.1解析协议

播放器端根据URL解析所用的流媒体协议(RTMP,HLS)

3.2解封装

解封装,就是demux的过程,从容器格式(FLV,TS)中,分离出音视频数据

3.3解码

解码,就是把获取到的数据解压缩,恢复成原始数据。解码就是将H264变成YUV,AAC变成PCM。

解码可以使用软解码,硬解码。

软解码就是利用CPU资源去解压缩数据,采用的方式是FFmpeg解码。

硬解码,对于iOS平台来说,可以使用VideoToolbox.Framework(该框架只能在iOS 8.0及以上系统使用)

硬解码视频数据

3.4 渲染数据

采用OpenGL渲染YUV数据,呈现视频画面。将PCM送入设备的硬件资源播放,产生声音。

iOS播放流式音频,使用Audio Queue 的方式,即,利用AudioToolbox.Framework 框架

上面就是一些简单的知识点,汇总了一些,现在给大家推荐一些,DEMO和SDK,供大家参考

先说第三方SDK:

1.融云,http://www.rongcloud.cn/live

下载下来好用,调用也很简单,集成很快,就是有点贵,要收费的哦,界面类似于,市面上大部分直播app,竖屏,有聊天室,可以送礼物等,不过不符合公司需求,pass

2.暴风云直播, http://www.baofengcloud.com/apisdk/sdk/live/iossdk.html

不好用,大家可以去试试

3.网易云直播,http://dev.netease.im/docs?doc=devfunc_LiveStreaming

好像是收费的,价格还不便宜,一般公司可能也不会用,功能很强大,不符合需求,pass

4.腾讯直播,https://www.qcloud.com/solution/video.html

同样收费,简单的看了一下,功能很强大,不过还是不符合需求

剩下的SDK还有非常多,就不依依介绍了,更多资料复制下面的网站查看,有大神总结的很到位了

http://www.ccidnet.com/2016/0606/10143020.shtml

Demo:

虽然市面上的SDK很多,不过还是没有特别符合需求的,所以就只能参考大神写的Demo了

下面都是每个demo,都是经测试可以用的,不过注意,不是直播,大家可以参考参考原理,找自己需要的东西,替换url进行测试

1.http://code.cocoachina.com/view/129748

2.http://code.cocoachina.com/view/128253

两个都是基于AVplayer写的

3.http://code.cocoachina.com/view/128343

基于MediaPlayer写的

还有很多就不举例,以上这3个demo,都是很轻量级的,在她们的基础上稍作修改就可以用了.

好坏就不做评价了,大家自己体会

另外说一句,如果要做功能很复杂的直播,最好用SDK

常用直播源:

凤凰中文,http://zv.3gv.ifeng.com/zhongwen800k.m3u8

香港卫视,http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8

如果还想要其他的网站:直播源大全

如果想了解更多的m3u8的资料:

http://blog.csdn.net/langeldep/article/details/8603045

iOS直播类App开发流程分解:

http://blog.sina.com.cn/s/blog_aa7beba30102w8ws.html

时间: 2024-10-12 15:30:09

Ios-视频直播-知识点汇总-持续更新的相关文章

一些iOS的小知识点(持续更新???)

有两年没有开发iOS了,最近又开始接触iOS开发,发现好多旧知识忘记了,好多新知识还不知道. 最近正在学习中,一些心得做下memo,也可以和大家分享一下. 初始化方法的返回值类型(类名,id,instancetype) 初始化方法的返回值一般设成id.为什么呢?为什么不设成类名呢?如果你设成类名,子类就不好处理了.比如说子类想覆盖父类的初始化方法,但想返回自己的类型,就不好处理了.所以一般返回id类型. 但是id类型不是type safe的.比如说,NSString *str = [NSArra

最近这么火的iOS视频直播

快速集成iOS基于RTMP的视频推流 http://www.jianshu.com/p/8ea016b2720e iOS视频直播初窥:高仿<喵播APP> http://www.jianshu.com/p/b8db6c142aad 做一款仿映客的直播App?看我就够了 http://www.jianshu.com/p/5b1341e97757

ios笔试题收集(持续更新)

IOS开发笔试题目 一.OC语法部分: 1. NSObject 中description属性的意义,它可以重写吗 用法举例:定义一个Person类,声明两个成员变量 @interface Person : NSObject { NSString * name; int age; } 在类的实现中,init方法初始化成员变量 @implementation Person - (instancetype)init { self = [super init]; if (self) { name = @

Xcode编译异常和警告汇总(持续更新中)

1.Method definition for 'xxx' not found xxx的方法没有实现 出现原因.h声明了xxx方法但是.m没有实现xxx方法 解决方法:在类的.m文件实现xxx方法 2. Instance variable ‘xxx' accessed in class method  在类方法中访问了'xxx’实例变量 出现原因:在类方法中使用了实例变量 解决方法:如果真得需要在类方法中使用某个变量,可以把这个变量定义成全局变量,而不要实例变量,如在类方法外面定义变量(就是定义

H5移动端IOS/Android兼容性总结,持续更新中…

H5移动端IOS/Android兼容性总结,持续更新中… 1. IOS不识别日期 new Date("2018-07-01 08:00:00")在Android下正常显示可以直接进行各种操作转化,而在IOS下为invalid date,获取到的时间戳为NaN,确实有点坑啊,只能识别new Date("2018/07/01 08:00:00")这种的,所以需要转化一下,解决方法为统一增加.replace(/-/g,'/'): new Date("2018-0

跟我学SpringCloud | 终篇:文章汇总(持续更新)

SpringCloud系列教程 | 终篇:文章汇总(持续更新) 我为什么这些文章?一是巩固自己的知识,二是希望有更加开放和与人分享的心态,三是接受各位大神的批评指教,有任何问题可以联系我: [email protected]. Github源码下载:https://github.com/meteor1993/SpringCloudLearning <跟我学SpringCloud>系列: Greenwich版 Spring Cloud Greenwich.SR1; Spring Boot 2.1

C++ 基础知识汇总 持续更新

摘录一些C++面试常考问题,写一些自己的理解,欢迎来摘果子. static关键字 用于声明静态对象: 静态函数只在本文件可见.(默认是extern的) 全局静态对象:全局静态对象,存储在全局/静态区,作用域整个程序,在程序结束才销毁: 局部静态对象:在函数内部加上static声明的变量,在首次调用时初始化,然后一直驻留在内存,作用域是该函数,可用于函数调用计数(primary有例子),程序结束释放: 静态数据成员:归属于类,类对象共享,类外初始化,类对象可访问: 静态函数成员:归属于类,只能访问

痞子衡嵌入式:史上最强i.MX RT学习资源汇总(持续更新中...)

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MX RT学习资源. 类别 资源 简介 官方汇总 i.MXRT产品主页 恩智浦官方i.MXRT产品主页,最权威的资料都在这里,参考手册/数据手册,官方EVK板设计文件,各种应用笔记,各种参考设计方案.培训视频.软件SDK开发包,官方IDE/CFG工具,第三方软件支持等应有尽有,如果这上面文档你都能全部仔细看一遍,软件都能下载用起来,不用怀疑,你就是资深专家了. 其中痞子衡特别推荐你把所有应用笔记都看一遍,这些笔记凝结了所有恩智浦

iOS开发系列文章(持续更新……)

iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大家交流,新建一个iOS技术交流群,欢迎大家加入:64555322 C语言 IOS开发系列--C语言之基础知识 IOS开发系列--C语言之数组和字符串 IOS开发系列--C语言之指针 IOS开发系列--C语言之预处理 IOS开发系列--C语言之存储方式和作用域 IOS开发系列--C语言之构造类型 Ob