- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在初始化一个 AVPlayerItem
,它有一个参数 automaticallyLoadedAssetKeys
,它指示在加载之前需要加载哪些 AVAsset
键标记为“准备播放”。
我见过有人将 duration
属性作为这些键之一传递的示例。
但是在 AVPlayerItem
的文档中,它讨论了 duration
属性,以及如何确保它有效。
The value of this property will be reported as kCMTimeIndefinite until the duration of the underlying asset has been loaded. There are two ways to ensure that the value of duration is accessed only after it becomes available:
Wait until the
status
of the player item isreadyToPlay
另一种方法是注册一个 KVO,这很好。但是这第一条评论向我表明我不需要要求自动加载duration
,因为它应该已经加载了。(?)
如果这是真的,我不明白为什么有人会传入 duration
作为自动加载的标志,因为看起来就是这样。我在这里遗漏了什么吗?
最佳答案
有些人这样做是因为存在 iOS 错误(包括在 iOS 12.1.4 中),有时会导致 AVPlayerItem.duration 为 nan,即使状态为 readyToPlay。示例 here和 here .
但是,我的经验是在 automaticallyLoadedAssetKeys 中指定“duration”并不能解决问题——尽管 Apple 的文档 AVPlayerItem :
The value of each key in automaticallyLoadedAssetKeys will automatically be loaded by the underlying AVAsset before the player item achieves the status AVPlayerItem.Status.readyToPlay; i.e. when the item is ready to play, the value returned by invoking the asset property’s statusOfValue(forKey:error:) method will be one of the terminal status values
我可以获得 AVPlayerItem.Status.readyToPlay,其中 statusOfValue(forKey: "duration") 返回 .loaded,持续时间为 nan。
我发现每次都有效的唯一解决方案是同时 KVO AVPlayerItem.status(对于 .readyToPlay)和 AVPlayerItem.duration(对于有效数字),并且当任一触发时,检查两者:
if item.status != AVPlayerItem.Status.readyToPlay || !item.duration.isUsableNumber() {
return // not ready yet (for addBoundaryTimeObserver, seek to end, etc.)
}
isUsableNunber() 只是:
func isUsableNumber() -> Bool {
return isValid && isNumeric && !isIndefinite && !isNegativeInfinity && !isPositiveInfinity
}
关于ios - 使用 automaticallyLoadedAssetKeys 和 "duration"初始化 AVPlayerItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48963946/
我正在尝试使用普通的 Windows Metro 风格应用程序执行以下操作: public class MyButton : Button { public Duration Duration
有下表 "CREATE TABLE IF NOT EXISTS user_preferences (" + " user_id text,"
假设我有: t := 10 * time.Second // 10s, 当 time.Second 再次应用时,幕后发生了什么? tt := t * time.Second // -2346317h4
在 Java 8 中, Duration 类(class)提供了 toDays 方法,返回总天数作为与日历天无关的 24 小时时间块的计数。 在 Java 9 中,Duration上课得心应手 to…
这很奇怪,经过数小时的测试我仍然无法弄清楚。 好的,这就是我要做的:合并两个视频,也就是一个接一个地追加。 我拍摄了两个视频,然后有两个网址。然后我使用以下方法创建了两个 AVURLAsset: A
正如标题所说,我得到一个字符串'01:23.290',它看起来像一个Duration,但不是。现在我需要用它来与真实的 Duration 进行比较,而我不知道如何处理它。有什么方法吗? 最佳答案 使用
std::chrono::duration的默认构造函数定义如下: constexpr duration() = default; (例如,参见 cppreference.com 或 libstdc+
我正在尝试在我的应用程序中录制视频,我注意到在显示它们的duration 时,我看到了错误的分钟\秒。只有通过以下代码录制的视频才会发生这种情况。通过其他应用录制的视频,时长显示在右侧: publi
我对 AVPlayer.timeControlStatus 属性进行 KVO 处理,播放器有一个 AVPlayerItem。 该视频是托管在远程服务器上的 mpeg4 编码的 10 秒视频文件: le
我正在使用 Spring Reactor Core 3.0.6 并且我有一个返回 Flux 的方法: public Flux createFlux(){ return Flux.,String
当然,我在这里做了一些愚蠢的事情,但我在编译我的简单秒表类时遇到了问题。错误是: /usr/include/c++/4.9/chrono:246:2: error: static assertion
此代码在 gcc-4.8 上编译但在 clang-3.3 上失败?以及如何使这段代码可以在 clang 上编译? =\ #include #include #include void sleep
我正在尝试编写一个允许用户指定 chrono::duration 的函数,例如 chrono::seconds 并返回 chrono 的结果::duration::count. 我可以使用以下模板函数
我不明白在 Go 中划分一个 time.Duration 是什么意思。 例如,这是 super 可爱的: d,_ := time.ParseDuration("4s") fmt.Println(d/4
我是一个初学者程序员,在 scala 中有一个非常简单的问题,我想将一个 long var 转换为 Duration (import scala.concurrent.duration.Duratio
我想知道这两者之间的区别是什么 boost::timed_mutex _mutex; if(_mutex.timed_lock(boost::get_system_time() + boost::po
我正在尝试实现 JUnit 测试来测试参与者。 我有这个 ActorTest : import org.junit.Test; import play.libs.Akka; import playte
假设您有一个涉及两个 Web 应用程序的项目(将共享 DAL/DAO/BO 程序集和一些 OSS 库): 一个半复杂的管理应用程序,使用 Windows Live ID 进行身份验证,并且还能够与各种
根据 moment.js documentation您可以创建 moment 的本地实例,以使用全局设置以外的其他语言环境来格式化日期。 使用 format() 效果很好,但我如何在本地实例上使用 d
我的项目提示“调用中有一个额外的参数‘duration’”。这是它发生的地方 required init(coder aDecoder: NSCoder) { workout = Workou
我是一名优秀的程序员,十分优秀!