ALAssetCocoaHTTPServer
基于CocoaHTTPServer iOS HTTP 服务器的相册资源共享服务框架
说明及注意事项
- FFmpeg Version 2.8
- FFmpeg 仅编译部必需的功能
- FFmpeg 需要导入的动态库
libz.tbd,libiconv.tbd,libbz2.tbd - iOS 10 + 需要添加相册访问权限,否则无法访问相册资源
- iOS 9 + 使用HTTP请求需要在Info.plist中添加 NSAllowsArbitraryLoads 为YES
- 若需要媒体共享服务被访问期间可后台运行,需要在 Info.plist中添加 Required background modes 添加条目选择App plays audio or streams audio/video using AirPlay
- 必需在同一局域网下方可访问
如何使用
1. CocoaPods集成
1 | platform :ios, '7.0' |
2. 使用范例
1 |
|
3. 打开调试打印
1 |
|
4. 请求url样式
若当前IP为192.168.1.100
tag:0.0.2版
系统视频资源url:assets-library://asset/asset.mp4?id=8F308A6B-EE6F-471B-B2CD-DB6CB625C9BE&ext=mp4
0.0.1版 url:
http://192.168.1.100:12345/8F308A6B-EE6F-471B-B2CD-DB6CB625C9BE.mp4不可用默认访问 url为:http://192.168.1.100:12345/8F308A6B-EE6F-471B-B2CD-DB6CB625C9BE.mp4.m3u8 若播放器支持,可根据当前网络带宽多流适配,访问合适分辨率的视频资源
若访问 url为:http://192.168.1.100:12345/8F308A6B-EE6F-471B-B2CD-DB6CB625C9BE.mp4.
type.m3u8。type表示画质的高低可为:low、 mid、high、super,其中low表示画质最差,所需网络带宽最小,压缩程度最大;super表示原有画质,所需网络带宽最大,不进行压缩处理。
图片url创建方式不变
tag:0.0.1版
系统视频资源url:assets-library://asset/asset.mp4?id=8F308A6B-EE6F-471B-B2CD-DB6CB625C9BE&ext=mp4
则访问 url为:http://192.168.1.100:12345/8F308A6B-EE6F-471B-B2CD-DB6CB625C9BE.mp4系统图片资源url:assets-library://asset/asset.PNG?id=4091A22F-3BA9-42F6-85C6-7B0992A75457&ext=PNG
则访问url为:http://192.168.1.100:12345/4091A22F-3BA9-42F6-85C6-7B0992A75457.PNG
实现原理
1.图片文件请求
图片文件的获取比较简单,直接通过url定位到系统相册资源后通过调用系统接口获取对应数据
2.视频请求流程简介
1 | st=>start: 客户端 |
1 | sequenceDiagram |
iOS文件只能访问沙盒路径内的资源,在通过将http请求相册视频资源文件时,可通过系统接口来获取; 为了解决系统部分mov格式视频部分平台播放器解码不支持的问题,在获取资源文件后将原文件转码为了mp4格式; 为了使转码后的文件不占用太多的内存空间,转码时根据请求文件的大小,只将部分请求的文件转换为mp4格式;
获取m3u8文件
通过url定位到系统相册资源
根据资源文件时长计算出分片策略
文件信息,分片时长创建ts切片对应url
生成相应m3u8文件
获取ts切片资源
播放器解析m3u8文件解析获取ts分片视频资源url
生成ts切片
根据url获取视频文件信息,切片时长和序列号
通过系统接口获取到对应时间段的视频切片数据
若为mov格式,则将其转换为mp4格式
使用FFmpeg将mp4格式切片数据转换为ts封装格式