TextureView在Nexus4上自动旋转视频流(但不在Galaxy S4上)

时间:2013-08-23 23:50:23

标签: android video rotation textureview

在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度。

现在我无法管理设备之间的这种行为差异。 有没有人有相同的经验,知道如何解决它,我真的很感谢你的帮助。

0 个答案:

没有答案