ios - 当媒体段数较少时,AVPlayer 是否播放视频块
问题描述
我对此不确定 - 当 AVPlayer 收到没有足够媒体段的播放列表文件时(如播放列表中只有 1 或 2 个媒体段,如下所示)。并根据 Apple 设备文档的 HLS 创作规范
> 7. 媒体细分要求
7.6. 段持续时间名义上应该是 6 秒(例如,NTSC 29.97 可能是 6.006 秒)。
7.7. 媒体片段不得超过目标持续时间超过 0.5 秒。
以下是我的 VOD 示例播放列表文件
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:56
#EXT-X-ALLOW-CACHE:NO
#EXT-X-DISCONTINUITY
#EXTINF:2.009,
http://media.example.com/first.ts
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:56
#EXT-X-ALLOW-CACHE:NO
#EXT-X-DISCONTINUITY
#EXTINF:2.003,
http://media.example.com/Second.ts
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:56
#EXT-X-ALLOW-CACHE:NO
#EXT-X-DISCONTINUITY
#EXTINF:2.003,
http://media.example.com/third.ts
++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:56
#EXT-X-ALLOW-CACHE:NO
#EXT-X-DISCONTINUITY
#EXTINF:2.004,
http://media.example.com/first.ts
#EXTINF:2.007,
http://media.example.com/second.ts
#EXTINF:2.003,
==================================================== ====
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:56
#EXT-X-ALLOW-CACHE:NO
#EXT-X-DISCONTINUITY
#EXTINF:2.009,
http://media.example.com/first.ts
#EXTINF:2.008,
http://media.example.com/second.ts
#EXTINF:2.003,
所以我的问题是 - AVPlayer 是否会仅在所有 3 个媒体片段都可用时播放内容,或者即使 1 或 2 个媒体片段都可用,如上图所示?
解决方案
是的.. AVPlayer 将播放具有一个或多个视频块或 .ts 数据包的播放列表。我在最后尝试过.. 通过在播放列表文件中使用 2 秒的视频块,它确实有效。下面是用于测试的示例代码。
let urlStr = URL(string: "http://100.177.1.101/jumpingBunny.m3u8")
let asset = AVAsset(url: (urlStr ?? nil)!)
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: playerItem)
var playerLayer: AVPlayerLayer?
playerLayer = AVPlayerLayer(player: player)
playerLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
playerLayer!.frame = self.view.frame
self.view!.layer.addSublayer(playerLayer!)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
playerViewController.showsPlaybackControls = true
player.play()
推荐阅读
- android - iOS 或 Android 应用程序可以与其他应用程序交互推送通知交互吗?
- python - 用pandas加载CSV数据时,第一行被误认为是标题
- java - 为什么袋子被认为是无序的?
- c++ - Leetcode 寻找最长单值路径的问题
- javascript - 我正在创建一个测验,并想知道我是否必须获得每个选择的价值,或者是否可以快速完成
- python - 如果我的模式来自另一个字符串,如何用 regex() 表示原始字符串?
- javascript - javascript中的链接运算符如何工作?
- windows - 返回包含特定 Windows 位置中存在的文件的列表 - 使用 SAS EG
- c# - 继承是否也会自动从其父级“继承”命名空间?
- python - 如何在字典中将 NaN 转换为 0,python