iOS 处理HLS视频流

一、HLS介绍

  HLS是苹果主导的音视频传输协议,其主要的格式是一个索引文件(M3U8)+ ts分片的视频文件。

  HLS的优势是iOS系统天然支持,通过Http 80传输,规避了常规的防火墙问题。

  视频的分片方便服务器CDN对视频文件分发缓存。

  HLS支持视频点播和直播,直播的延时可能达到10s。

二、HLS协议内容

  

  完整的HLS协议包含,视频加密标准(MPEG4、H264)、音频加密标准(AAC、MP3);

            视频封装标准 TS

            视频如何切片 M3U8  

            视频如何传输 M3U8索引描述ts流分片

  对于客户端来说,常见的就是对HLS协议的利用

  M3U8描述格式:

  通过苹果的 https://developer.apple.com/streaming/examples/advanced-stream-ts.html 在线视频,可以抓包看到

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2218327,BANDWIDTH=2227464,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
v5/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8144656,BANDWIDTH=8178040,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
v9/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6307144,BANDWIDTH=6453202,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
v8/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4775338,BANDWIDTH=5054232,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
v7/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3240596,BANDWIDTH=3289288,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
v6/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1292926,BANDWIDTH=1296989,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
v4/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=914722,BANDWIDTH=922242,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
v3/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=541239,BANDWIDTH=553010,CODECS="avc1.640015,mp4a.40.2",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"
v2/prog_index.m3u8

  HLS协议是一个文本协议,一个M3U8中通过不同的Tag来描述,视频的内容

  参考:https://tools.ietf.org/html/rfc8216

  

  这篇文章写的比较清楚,https://www.cnblogs.com/jimodetiantang/p/9133564.html

三、HLS在iOS上面的的应用

  1)如果仅仅是播放,那就比较简单,直接使用AVPlayer接口就可以了

  AVPlayer加载AVPlayerItem的结构,这个对象通过对本地音视频文件或者远程视频文件的封装的到

  AVURLAsset通过对M3U8播放地址对封装,可以的到一个远程对Asset,穿入到AVPlayer中,可以自动下载播放

  可以很方便看到,这个封装中可以传入对应对Cookie

  类似这种,下面的URL是Mp4文件,如果换成M3U8也可以播放的

    NSURL *assetUrl = [NSURL URLWithString:@"http://flv2.bn.netease.com/videolib3/1606/23/RiTxE9164/SD/RiTxE9164-mobile.mp4"];AVAsset *asset = [AVAsset assetWithURL:assetUrl];AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:asset];self.player = [AVPlayer playerWithPlayerItem:item];

  2)HLS的下载解析

  通过上面的例子,可以的到一个AVUrlAsset,这个asset除了用来播放之外,还可以用来下载

  

  可以初始化为一个DownloadTask,然后跟普通的下载一样,放入NSUrlSession中

   类似下面的代码

 NSURL *assetURL = [NSURL URLWithString:@"STREAMING_HOST/video/hls/3729170.m3u8"];AVURLAsset *hlsAsset = [AVURLAsset assetWithURL:assetURL];urlSessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"assetDowloadConfigIdentifier"];avAssetDownloadSession = [AVAssetDownloadURLSession sessionWithConfiguration:urlSessionConfiguration assetDownloadDelegate:self delegateQueue:[NSOperationQueue mainQueue]];// Download movieavAssetDownloadTask = [avAssetDownloadSession assetDownloadTaskWithURLAsset:hlsAsset assetTitle:@"downloadedMedia" assetArtworkData:nil options:nil];//@{AVAssetDownloadTaskMinimumRequiredMediaBitrateKey : @(300000)}[avAssetDownloadTask resume];

  当下载完毕之后,会回调

  

  在这里,会在本地会生成一个movpkg的文件夹,也就是MOV打包文件

  在这个文件夹中,包含一个一个M3U8的描述文件,和多个frag视频分片

  这里的分片有可能是加密的,如果是加密的,需要通过M3U8中 ,指定key的url,下载到key,并且通过M3U8解析到IV

  通过Key和IV,使用AES CBC 解析的到解密后到视频文件。

  TS流本身可以直接通过二进制到方式追加,追加之后还是可以直接播放的。

  如果,要进行合并,可以使用ffmpeg 的命令行进行ts流合并

四、附加

  这里的下载回调,建议不通过来处理成功的逻辑,因为这里处理成功的逻辑时,拿不到本地文件的下载路径

/* Sent as the last message related to a specific task.  Error may be* nil, which implies that no error occurred and this task is complete. */
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)taskdidCompleteWithError:(nullable NSError *)error;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1619497.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Typecho开启全站Pjax

原文地址:Typecho开启全站Pjax 前言 因为上次更新后加入民音乐插件,但是有个问题就是在页面跳转的时候由于页面已经刷新了,所以音乐就不会继续播放了,就想着去引入Pjax来解决这个问题,同时引入pjax后比较直观的改变就…

rk3588编译Ubuntu固件,Linux SDK开发

基础认知 Linux SDK 是由 Firefly 官方提供的 Linux 软件开发工具包,旨在方便用户基于其进行模块开发与系统定制。 SDK 目录树 各个芯片平台的 Linux SDK 目录树可能略有差异,但一般如下: ├── app # 存放上层应用 app,主要是 qcamera/qf…

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/127783966 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

Uniapp集成熊猫播放器

先源码分析 后续增加集成的例子 相关链接 官方文档:https://www.yuque.com/lahuayouyiliushuiwuqing/csqxe2插件地址:https://ext.dcloud.net.cn/plugin?id=6715 源码分析删掉不需要的组件 不知道路径问题

wordpress html音乐,【WordPress插件】QPlayer音乐播放器插件html5音乐插件

音乐播放器,这个大家不陌生了,wordpress也是可以直接插入的,但是不够美观,而且只支持本地的,今天给大家推荐一款自动解析各大音乐网站的播放器,界面美观,支持歌词显示。 使用方法: D…

QPlayer2-资源网各大程序背景音乐插件

介绍: QPlayer2一款简洁小巧的HTML5底部悬浮音乐播放器,支持网易云音乐解析,由GitHub用户Jrohy开发,最新版本为v1.3.4.2,更新于三年前,已不再更新。 如今,MoeShin将代码优化后制成QPlayer2&…

三款QPlayer2-背景音乐插件

简介: 一款简洁小巧的 HTML5 底部悬浮音乐播放器,支持云音乐,现已支持WordPress、Typecho、Z-Blog。 网盘下载地址: http://kekewangLuo.net/iTqbm3fJQ6y0 图片:

week6刷题

题解: 使用二分查找 class Solution { public:int minArray(vector<int>& numbers) {int low 0;int high numbers.size() - 1;while (low < high) {int pivot low (high - low) / 2;if (numbers[pivot] < numbers[high]) {high pivot;}else if (numbers…

[组图]一切从零开始 Symbian智能机之软件入门(转)

购买NOKIA智能手机的朋友们会发现&#xff0c;NOKIA采用的是一种叫做Symbian的操作系统。Symbian由摩托罗拉、西门子、诺基亚等几家大型移动通讯设备商共同出资组建的一个合资公司&#xff0c;专门研发手机操作系统。而Symbian操作系统的前身是EPOC&#xff0c;而EPOC是Electro…

S60十大优秀软件

众所周知&#xff0c;智能手机是手机发展的一大趋势。由业界老大诺基亚领衔的symbian智能手机在市场上独占鳌头。占据绝对多数的市场份额。symbian智能操作系统中由以S60平台应用最广&#xff0c;最受消费者青睐。很多消费者选购了基于S60平台的symbian智能后&#xff0c;面对数…

2021高考放榜,还能无脑选计算机专业吗?

前言 古语有云&#xff1a;“久旱逢甘霖&#xff0c;他乡遇故知&#xff0c;洞房花烛夜&#xff0c;金榜题名时。”此为人生四大乐事也。 前段时间高考刚落下帷幕&#xff0c;虽说人生中最重要的考试已经过去 &#xff0c;但如何填报志愿也不能掉以轻心&#xff0c;这不仅关乎…

DebugInfo 模型功能系统介绍 文本上色 文本与表格对齐 分隔线 秒表计算器 语义日期

背景 今天系统性的为大家介绍一下 DebugInfo 模块。这个模块提供了一些丰富的基本功能的封装&#xff0c;希望能给有需要的人带来些许帮助。 文本上色 DebugInfo 模块引入了 colorama提供文本颜色支持。 # -*- coding:UTF-8 -*-# region 引入必要依赖 from DebugInfo.DebugI…

时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)

时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价) 目录 时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现基于TSO-XGBoost金枪鱼算…

视频播放花屏问题

h264裸流播放视频&#xff0c;出现如下画面有可能是屏的线序问题

音视频问题汇总--视频花屏

最近工作上碰到两个问题&#xff0c;都是播放时候出现花屏现象&#xff0c;因此汇总一下&#xff0c;方便后续防止踩坑。 问题一 第一个是设备播放特定文件时出现花屏现象。 碰见类似问题&#xff0c;一般会进行问题怀疑点预设&#xff0c;初步猜想可能发生的原因&#xff1a;…

Compose - 交互组合项

按钮 Button OutLinedButton带外边框、TextButton只是文字、IconButton只是图标形状。 Button(onClick { }, //点击回调modifier Modifier,enabled true, //启用或禁用interactionSource MutableInteractionSource(),elevation ButtonDefaults.elevatedButtonElevation( /…

各种RTMP直播流播放权限_音视频_数据花屏_问题检测与分析工具EasyRTMPClient

之前的一篇博客《网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient》&#xff0c;我们介绍了RTSP流的检测和分析工具EasyRTSPClient&#xff0c;可以说已经是深入了我的平时运维工作中了&#xff0c;当我们发现有任何RTSP源或者摄像…

PPStream、PPlive等播放器花屏之解决办法

PPStream、PPlive等播放器花屏之解决办法 解决方法1&#xff1a;打开“Windows Meida Player”播放器&#xff0c;找到“工具”->“选项”->“性能”->“视频加速”&#xff0c;把“完全”滑块放到中间&#xff08;如果仍不行可调整到无&#xff09;&#xff0c;然后按…

传奇花屏Win10登陆游戏时花屏的解决方法

随着win10的流行&#xff0c;原来很多传奇版本不能适应&#xff0c;必竟传奇是一款比较老的游戏&#xff0c;很多电脑现在初装都已经是Win10了&#xff0c;win10系统&#xff0c;玩单机时点开始游戏就出现花屏&#xff0c;换分辩率800X600没有用。 Win10系统花屏是因为登陆器不…

用户观看视频业务出现花屏故障

组网情况 如图所示&#xff0c;Switch的一端和组播服务器相连&#xff0c;并且将GE1/0/0加入Eth-Trunk 0&#xff0c;另一端下挂用户终端&#xff0c;并且将GE1/0/2加入Eth-Trunk 1。在Switch上部署了组播业务&#xff0c;下挂用户终端可以进行视频点播。 现象描述 用户终端…