有谁知道是否有可能检测到VideoView何时缓冲?
我想在视频缓冲时显示ProgressDialog.
到目前为止,我尝试使用OnPreparedListener,但这仅在首次加载视频时才有效.如果正在播放视频并且用户将擦洗条移动到不同的点,则视频仍然"准备好",即使它正在缓冲.
我也试过(我知道这很糟糕)AsyncThread只是忙等待isPlaying():
private class BufferTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void...voids) {
final VideoView videoView = (VideoView)findViewById(R.id.video);
while (!videoView.isPlaying()) { }
return null;
}
protected void onPostExecute(Void v) {
// Hide the dialog here...
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为只要你调用start(),即使它正在缓冲,VideoView似乎也被认为是在播放.
我能想到的唯一解决方案是构建一个自定义的VideoView类型类,以便我可以访问它的MediaPlayer实例.
有任何想法吗?谢谢阅读.
我正在尝试收听我创建的媒体播放器的OnInfoListener,以便在缓冲开始和结束时获取.
由于某种原因,事件永远不会发生.
这是我的初始化代码
private void initPlayer(Surface s){
mPlayer = new MediaPlayer();
mPlayer.setSurface(s);
mPlayer.setOnCompletionListener(this);
mPlayer.setOnErrorListener(this);
mPlayer.setOnInfoListener(this);
mPlayer.setOnPreparedListener(this);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mPlayer.setDataSource(file_url);
mPlayer.prepare();
} catch (IllegalArgumentException e) {
OnError(PLAYER_ERRORS.player_not_loaded, e.getMessage() + "");
} catch (SecurityException e) {
OnError(PLAYER_ERRORS.player_not_loaded, e.getMessage() + "");
} catch (IllegalStateException e) {
OnError(PLAYER_ERRORS.player_not_loaded, e.getMessage() + "");
} catch (IOException e) {
OnError(PLAYER_ERRORS.no_connection, e.getMessage() + "");
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的倾听者
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if(what == MediaPlayer.MEDIA_INFO_BUFFERING_START)
{
OnEvent(PLAYER_EVENT.buffering_start);
}
else if(what == MediaPlayer.MEDIA_INFO_BUFFERING_END) …Run Code Online (Sandbox Code Playgroud) MediaPlayer从HTTP URL流式传输时,我无法恢复弹性.
如果我开始播放文件,但随后丢弃连接(例如飞行模式),则MediaPlayer#OnErrorListener生成what=1, extra=-17然后不久what=-38, extra=0.
我没有在API中看到这个表示的文档,除了extra是"通常依赖于实现".我正在使用HTC Hero(好吧,它是T-Mobile UK的G2 Touch).
其他人是否获得相同的值,并且可以安全地捕获这些值,因为连接已经消失了吗?
连接重新出现时,如何才能最好地恢复?(保存当前的搜索偏好,并每5秒重试一次?)
我怎么知道设备何时决定开始播放它正在缓冲的内容 - 是否有回调(除了轮询isPlaying())?
此外,我不完全确定onBufferingUpdate提供什么.我正在使用40分钟的播客MP3 (64kbps bitrate)- 缓冲分为1%,2%,3%.当我寻求大约30分钟,它显示75%,然后当我寻求回到开始回到5% - 这个回调的重点是什么,除了显示大约什么是缓存?
最后 - 有什么方法可以管道流式传输到MP3什么?