AVPlayer支持的视频格式

发现很多人对视频格式存在一些误解,之前写的一篇文章讲AVPlayer的支持格式也有一些问题,所以这里单独出一篇文章讲一下,希望大家能明白。

基本概念

一个在线视频能够播放,大致是经过了如下步骤:

可以总结为:拉数据->解协议->解封装->音视频解码->音视频同步->播放。 下面就针对这几个概念一一做下解释:

播放协议

一般点播采用HTTP,而直播的话,大部分还是采用RTMP或者私有协议,原因是延时会比较小,RTMP本身也是为了直播设计的。常见的流媒体协议:

简写 全称 推出机构 目前使用领域
HLS HTTP Live Streaming 苹果 多应用于苹果
RTP 实时传输协议 IETF 范围较广
RTCP 实时传输控制协议 IETF 范围较广
RTSP 实时串流协议 RealNetworks等 范围较广
RTMP 实时消息协议 Adobe 较流行
MMS 串流媒体协议 Microsoft 范围较广

RTP/RTSP/RTCP的区别

RTSP发起/终结流媒体、RTP传输流媒体数据 、RTCP对RTP进行控制,同步。

HLS(Http Live Streaming) HLS是苹果推出,实现的基于HTTP的流媒体传输协议: 优点: 1、通过m3u8索引文件可实现针对当前浏览设备的智能选择播放源, 2、通过m3u8索引文件可实现添加备份索引文件,防止服务器崩溃视频播放失败 3、和http视频一样 不需要太多服务器额外配置 缺点: 1、并非真正实时视频,30s左右时间差 2、需要视频处理 3、因为需要请求索引文件(ts视频文件)请求次数相对较多,对服务器负载较大

视频编码

所谓视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。它是一种为了减少视频体积,同时保证画面质量的压缩技术,常见的视频编码有:

名称 推出机构 推出时间 目前使用领域
HEVC(H.265) MPEG/ITU-T 2013 研发中
H.264 MPEG/ITU-T 2003 各个领域
MPEG4 MPEG 2001 不温不火
MPEG2 MPEG 1994 数字电
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AVPlayer可以用于播放HLS(HTTP Live Streaming)视频,并且支持AES加密。在iOS 8.4及以上版本中,可以使用AVPlayerItem和AVAsset来实现视频加密。 下面是一个使用AVPlayer播放AES加密视频的示例代码: ```swift import AVFoundation // 创建AVPlayerItem对象,传入.m3u8索引文件的URL let url = URL(string: "https://example.com/video.m3u8")! let asset = AVAsset(url: url) let playerItem = AVPlayerItem(asset: asset) // 设置AES加密的密钥和IV let key = "0123456789abcdef" // 16字节的密钥 let iv = "0123456789abcdef" // 16字节的IV let keyData = key.data(using: .utf8)! let ivData = iv.data(using: .utf8)! playerItem.asset.add(AVAssetResourceLoadingRequestor.self, for: AVAssetResourceLoadingRequestor.self, keyContext: &keyData, valueContext: &ivData) // 创建AVPlayer对象并将AVPlayerItem设置为其当前项目 let player = AVPlayer(playerItem: playerItem) // 创建AVPlayerLayer对象并将其添加到视图层次结构中 let playerLayer = AVPlayerLayer(player: player) playerLayer.frame = CGRect(x: 0, y: 0, width: 320, height: 240) view.layer.addSublayer(playerLayer) // 开始播放视频 player.play() ``` 在上述代码中,我们首先创建了一个AVPlayerItem对象,并将.m3u8索引文件的URL传递给它。然后,我们设置了AES加密的密钥和IV,这些信息将用于解密视频数据。最后,我们创建了一个AVPlayer对象,并将AVPlayerItem设置为其当前项目。然后,我们创建了一个AVPlayerLayer对象,并将其添加到视图层次结构中。最后,我们调用`player.play()`方法开始播放视频

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值