在TextureView上播放视频流时,我在Galaxy S4和Nexus4中看到了不同的行为。
Android以纵向模式录制视频源,因此视频旋转90度。 (Android相机的默认方向是横向,所以要以纵向捕捉视频,我们需要将视频顺时针旋转90度) 因此,在播放时我首先检查视频的方向(通过测量宽度和高度),如果宽度比高度长,则通过下面的代码将TextureView旋转90度。
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(url, new HashMap<String, String>());
String heightString = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
String widthString = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
int videoHeight = Integer.parseInt(heightString);
int videoWidth = Integer.parseInt(widthString);
FrameLayout.LayoutParams l;
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
if(videoWidth > videoHeight){
Log.d(TAG, "Need to rotate by 90");
l = new FrameLayout.LayoutParams(metrics.heightPixels, metrics.widthPixels, Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
textureView.setRotation(90);
}else{
l = new FrameLayout.LayoutParams(metrics.widthPixels, metrics.heightPixels, Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
}
textureView.setLayoutParams(l);
这适用于Galaxy S4或Xepria Z,但不适用于Nexus4或Galaxy S2。 似乎在Nexus4中,TextureView将视频自动旋转90度,因此与下面的代码一起,视频最终旋转了180度。
现在我无法管理设备之间的这种行为差异。 有没有人有相同的经验,知道如何解决它,我真的很感谢你的帮助。