- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的问题似乎只发生在 android 4.2.2 上
我这样做空闲状态 -> 初始化状态 -> prepareAsync() -> 并在 onPrepared 中调用 seekTo,但在这个 android 版本上媒体播放器返回
“试图寻找到文件末尾:request = {int>0},durationMs = 0”
然后从头开始播放,因为我无法捕捉到它,也没有任何听众,它只是将这条消息写入日志,我无法对此做出真正的 react 。
更奇怪的是,如果我在 onPrepared() 中调用 mediaPlayer.getDuration(),它会返回正确的值而不是 0。
您认为这是一个媒体播放器错误,还是有更好的地方调用 seekTo ?或者也许是一种如何知道 seekTo 失败的方法?如果当前位置小于所需位置,我想避免定期检查当前位置并尝试调用 seek ,因为这种方法有很多不同的问题。
这是一个流畅的流媒体视频内容
最佳答案
我目前正在尝试找到解决同一问题的方法。到目前为止,我想到的最好的方法如下。
在 4.2 上,我注意到收到了以下回调:
1) onVideoSizeChanged() - 其中高度和宽度 = 0
2) onPrepared()
3) onVideoSizeChanged() - 适当的高度和宽度
您不能在 (1) 中调用 seekTo,因为播放器尚未准备好。
如您所述,如果您在 (2) 中调用 seekTo,媒体播放器会生成警告“尝试搜索到文件末尾”
如果调用了 MediaPlayer.start(),您只会收到 (3),但此时您可以成功调用 seekTo()。
MediaPlayer mMediaPlayer = new MediaPlayer(); // + some initialisation code
boolean mVideoSizeIsSet = false;
boolean mMediaPlayerIsPrepared = false;
public void onPrepared(MediaPlayer mediaplayer) {
Log.d(TAG, "onPrepared called");
mMediaPlayerIsPrepared = true;
if (mVideoSizeIsSet) {
mMediaPlayer.seekTo();
}
mMediaPlayer.start()
}
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
Log.d(TAG, "onVideoSizeChanged called");
if (width == 0 || height == 0) {
Log.d(TAG, "invalid video width(" + width + ") or height(" + height + ")");
} else {
mVideoSizeIsSet = true;
if (mMediaPlayerIsPrepared) {
mMediaPlayer.seekTo();
}
}
}
(我个人不喜欢使用 boolean guards,但如果你看一下 sdk 提供的媒体播放器示例,它会做类似的事情)。
跨一系列设备/操作系统版本进行测试,这提供了一个通用的解决方案。但是,4.2 有一个错误。对 mMediaPlayer.start() 的调用似乎导致视频的前几帧在 seekTo() 发生之前开始播放,这在我的情况下几乎看不到,但对您来说可能更明显。我目前正在考虑以某种方式隐藏我的表面 View ,直到我收到 onSeekComplete() 事件,但这并不理想。
如果有人有更好的解决方案,适用于所有操作系统版本,我很乐意听到。
关于android mediaplayer seekTo inside onPrepared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15898089/
我想根据我正在运行的功能在我的 onPrepare 函数中运行不同的函数。我还希望能够从命令行设置功能。例如,我现在通过输入“Protractor ”来运行每个测试套件。我正在寻找诸如“protrac
我在使用 MediaPlayer 时遇到了一点问题。问题出现在 Android 4.0.3 - 4.0.4 上。发生的事情是我的 onPrepare() 方法在这两个版本上根本没有被触发。在 4.3
我通过按钮(播放/停止流)在服务和 Activity 中使用媒体播放器。 我正在尝试做这样一件事: Activity 启动时仅启动一次服务,而不是使用 UI 部分与服务中的媒体播放器一起操作(启动、停
下面是我的音乐播放器的服务类,实现的onPrepared()方法从来没有被调用过,所以我必须使用setOnPreparedListener来完成这些事情。我想从未实现的部分执行它。 public cl
我在登录应用程序的 conf.js 文件中有 onPrepare。我的理解是每次运行 1 个或多个测试套件时,它首先执行 onPrepare 中的任何内容。这很棒,因为我在运行测试之前使用 onPre
如标题所述,未调用 onPrepared() 重写方法。 mediaPlayer = new MediaPlayer(); mediaPlayer.setOnPreparedListener(new
我正在使用 angular 9 并尝试设置一些端到端测试。我见过许多 onPrepare 示例,它们在浏览器上得到了帮助。甚至他们的评论文档也显示了一个不起作用的示例。 知道为什么浏览器未定义吗? 这
我试图在本地 Protractor 配置的 onPrepare 方法中调用自定义函数,该函数扩展了全局 Protractor 配置,但无法使其工作。为了使它更简单一点,我在 protractor.co
我的 Protractor 测试套件中有一个 conf.js 文件。 起初只有一个 onPrepare 条目,但现在我想添加第二个条目。 我正在努力确保语法正确,以便 onPrepare 后面的内容不
我希望每个测试都在干净的浏览器 (Firefox) 上运行,因此我使用 restartBrowserBetweenTests:true 选项。因为我使用非 Angular 演示应用程序,所以在 onP
我的问题似乎只发生在 android 4.2.2 上 我这样做空闲状态 -> 初始化状态 -> prepareAsync() -> 并在 onPrepared 中调用 seekTo,但在这个 andr
我的全局 Protractor 配置中有一个 onprepare 函数 module.exports = { ..... onPrepare: function() { // At
基本上与此相同:https://stackoverflow.com/questions/25163674/can-you-do-multiple-onprepares-per-browser-inst
在我的应用程序中,我在 RecyclerView 列表中有一堆 VideoView。当从 MediaPlayer 接收 onPrepared 回调时,我有时会在 Android SDK 的 Video
我试图在 onprepare 状态下调用一个函数(promise),它将返回一个包含所有需要运行的测试的 specs 数组;我需要将其传递给配置文件中的规范 var Excel_Input = req
我正在创建我的第一个 Protractor 框架,并在我的配置文件中设置我的 on prepare。 我一直收到错误的 X 符号,我不知道为什么。 exports.config = { selen
一段时间以来,我一直在尝试重现我的 QA 团队所说的“随机暂停错误”。今天在logcat on调试的时候重现了三遍。它间歇性地出现,并且只在网络不佳的情况下出现。 用户体验到音频暂停,直到他们触摸他们
我在一台慢速机器上运行 Protractor ,我需要 Protractor 来减慢每次按键和每个 Action 的速度。 Action 部分完成了,但是按键部分怎么办呢? 我有一个本地解决方案是:
我的 Protractor 配置文件需要执行一些异步工作(例如,下载库和额外的文件系统准备)。在所有这些异步工作完成之前,我如何强制 Protractor 阻塞。 这是我所拥有的和我需要的简化: va
我最初隐藏了 VideoView,当加载视频时,我正在显示 VideoView。但是,如果 VideoView 最初是 invisible,则永远不会调用 onPrepared。但是,如果 Video
我是一名优秀的程序员,十分优秀!