- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 html5 视频,我试图在播放期间的特定时间间隔设置回调。使用 video.play()
从 javascript 开始播放视频。现在我的代码监听 'loadedmetadata'
事件,然后查询持续时间并设置这些回调。在移动版 Safari 上运行良好,但在 Android(2.3.4 和 2.3.7)上运行不佳。
在 Android 上,'loadedmetadata'
似乎在持续时间实际可用之前发出。为了对此进行测试,我在我的代码中记录了加载过程的每一步的持续时间,以查看可以实际读取它的位置。在 video.play()
之前和一个 'timeupdate'
事件之后,video.duration
属性为 6000,与正在使用的视频无关。我用一个 mp4 文件和一个 3gp 文件对此进行了测试。一旦满足这些条件,就可以获得实际持续时间。
我发现这篇文章也有类似的问题 [1]。未被接受的最高投票答案是我最初的设置方式,它在 iOS 上运行良好。接受的答案也不起作用,并表明这是一个 webkit 问题。我记录了 video.readyState
属性并看到它在视频开始播放之前是 '4'
,但是持续时间在开始播放之前仍然不可用,并且第一个 'timeupdate'
事件。
我们当前的解决方法是查询 video.duration
值,并且仅在 video.duration !== 6000
时设置事件回调。这太丑陋了,我想查个水落石出,以免这个 hack 卷土重来。这里的讨论 [2] 似乎表明该问题可能与编码有关。也就是说,编码不正确,android 在文件加载之前不会正确读取元数据,或者可能根本不会正确读取元数据,并且它会以另一种方式计算持续时间。
有什么我可以做的让这个更干净,还是我现在被 hack 困住了?
[1] Problem retrieving HTML5 video duration
[2] http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/
最佳答案
我使用调用函数的 setTimeout 来递归地检查持续时间是否可用。
这样一来,该函数就可以在任何信息可用时立即显示持续时间等。
关于javascript - Android video.duration 直到 video.play() 才会加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9880012/
我正在尝试使用普通的 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
我是一名优秀的程序员,十分优秀!