【发布时间】:2013-01-12 17:47:09
【问题描述】:
我编写了一个重现问题的示例应用程序:
https://github.com/blundell/VideoRatioProblemPerDevice
VideoView 文档指出:
显示视频文件。 ... 负责从视频中计算其测量值,以便可以在任何布局管理器中使用它,并提供各种显示选项,例如缩放
问题是三星 Galaxy S3 对视频做了奇怪的事情,并且不尊重视频的比例。(也发生在 HTC 设备上)。
带有全屏片段的活动:
我发现在三星 Galaxy S3 上播放视频时,它会以不正确的比例播放。看起来它已经被拉伸到视图的高度,而不考虑原始视频的比例。
这里:
但是,如果我在 Samsung Galaxy Nexus 上播放视频,则视频的比例正确。
这里:
如果我强制视频占据片段的完整大小,它在 S3 上看起来没问题(因为屏幕的比例就是视频的比例)。但是我不想这样做,因为它搞砸了在其他地方(例如平板电脑)使用的片段。
代码是:
带有片段和 VideoView 的 Activity。可以看这里:GITHUB CODE LINK
如果你想要一些代码在这里是hte VideoPlayerFragment:
public class VideoPlayerFragment extends Fragment {
private static final String TAG = "VideoPlayer";
private FitVideoView videoView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_video_player, container, false);
videoView = (FitVideoView) root.findViewById(R.id.surface);
return root;
}
public void playVideo() {
Uri uri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.test_vid);
Log.d(TAG, "Uri is: " + uri);
setVideoLocation(uri);
if (!videoView.isPlaying()) {
videoView.start();
}
}
private void setVideoLocation(Uri uri) {
try {
videoView.setVideoURI(uri);
} catch (Exception e) {
Log.e(TAG, "VideoPlayer uri was invalid", e);
Toast.makeText(getActivity(), "Not found", Toast.LENGTH_SHORT).show();
}
}
public void pauseVideo() {
if (videoView.isPlaying()) {
videoView.pause();
}
}
}
【问题讨论】:
-
您是否尝试从
VideoView切换到MediaPlayer和SurfaceView? -
@CommonsWare 我没有,你认为有那么大的区别?我会试一试的。意味着我必须更多地自己照顾国家。
-
制造商在某个地方进行了修补。他们可以修补的一个相对容易让你恢复的地方是,如果他们修补了
VideoView。您甚至可以获取VideoView源代码,将其放入您的项目中(重构到您的包中),切换到使用您的副本,然后看看会发生什么。如果问题得到解决,请坚持使用您的私人VideoView。如果问题仍然存在,那么问题就在于媒体播放的问题(a.k.a.,“这里有龙”)。 -
@CommonsWare 是的。尝试拉入
VideoView,需要MediaPlayer,需要Metadata,这没关系。然而,MediaPlayerSystem.loadLibrary("media_jni");加载了一个本地库并给了我一个unsatisfied link error。所以我打算试试MediaPlayer和SurfaceView路线。 -
哇,
VideoView比我上次看到的要复杂得多。它曾经是大约 200 行代码,只是MediaPlayer和SurfaceView的包装。很抱歉在这方面将您引向错误的方向。
标签: android android-fragments media-player android-videoview