gpt4 book ai didi

android - OnVideoSizeChanged 从未调用过

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:25 25 4
gpt4 key购买 nike

我正在使用 VideoView 来显示视频流。因为我需要将 MediaController 附加到 View 本身,并且我想防止由 videoview 引起的黑屏闪烁。我已经在我的 Nexus 7 上测试了以下代码,效果非常好。但是现在我在我的 SGS2 上测试了它,并且出于某种原因从未调用过 OnVideoSizeChanged。

@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
Log.i("ONPREP", "called");
mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {

videoview.setMediaController(mc);
mc.setAnchorView(videoview);
videoview.setBackgroundColor(Color.TRANSPARENT);

Log.i("ONSIZECHANGE", "called");
}
});
}

视频播放正常,我通过删除 OnVideoSizeChangedListener 并将代码放在 onPrepared 方法中进行了测试,但这又带来了屏幕闪烁问题并使 mediacontroller 处于未连接状态。此行为也由 LogCat 中的日志信息显示,ONPREP 标记显示但从不显示 ONSIZECHANGE。在我的N7上都显示,很明显是因为背景颜色改变了。

这是设置和启动视频的代码:

videoview.setOnPreparedListener(MainActivity.this);
mc = new MediaController(MainActivity.this);
mc.setMediaPlayer(videoview);
videoview.setVideoURI(videourI);
videoview.start();

那么为什么它在一台设备上调用而不在另一台设备上调用呢?

编辑:在我的 Note 2 上测试过,与 SGS2 上的问题相同。

最佳答案

onVideoSizeChanged 由来自低级播放器实现的事件触发,在不同平台上可能不同。播放器在 onPrepared 之前调用 onVideoSizeChanged 是完全合法的。

实际上,VideoView 正在设置自己的 OnVideoSizeChangedListener 回调来管理表面大小,因此您可能根本不应该使用它。从你的例子中我不清楚你为什么要使用它,setMediaController 应该在 onPrepared 中调用,而不是 onVideoSizeChanged (可以调用多次)。

关于android - OnVideoSizeChanged 从未调用过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18558223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com