gpt4 book ai didi

VideoView中的Android纵向视频方向错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:36 24 4
gpt4 key购买 nike

我在 Android 设备上以纵向拍摄新视频,如下所示:

Intent intent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE); 
startActivityForResult(intent, 1886);

它给了我这个文件:“/mnt/sdcard/DCIM/Camera/video-2012-02-02-10-45-48.mp4”

然后我这样玩:

private VideoView videoView = (VideoView) findViewById(R.id.videoView);
String videoUrl = "/mnt/sdcard/DCIM/Camera/video-2012-02-02-10-45-48.mp4";
videoView.setMediaController(new MediaController(this));
videoView.setVideoURI(Uri.parse(videoUrl));
videoView.start();

这是我的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<VideoView
android:id="@+id/videoView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true" />

</RelativeLayout>

当我在标准 Android 画廊中播放时,方向是正确的。但是当我在上面的 VideoView 中播放视频时,它旋转了 90 度。横向效果很好,唯一的问题是纵向视频。

如何在 VideoView 中旋转此视频?
另外,如何以编程方式确定方向?

最佳答案

您需要初步确定捕获视频的方向。大多数新智能手机都使用横向相机,但也有使用纵向的版本。要确定方向,您可以取框架的长度和宽度,然后比较它们。当你开始检查那个 Activity 方向视频时,视 Activity 方向的变化而定。

代码示例:

public class MainActivity extends ActionBarActivity {

String videoUrl = "/mnt/sdcard/DCIM/100ANDRO/MOV_9195.mp4";
int videoWidth;
int videoHeight;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getVideoAspectRatio();
if (isVideoLandscaped()) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

setContentView(R.layout.activity_main);
VideoView videoView = (VideoView) findVewById(R.id.videoView);
videoView.setMediaController(new MediaController(this));
videoView.setVideoURI(Uri.parse(videoUrl));
videoView.start();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

private void getVideoAspectRatio() {
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(this, Uri.parse(videoUrl));
String height = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
String width = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
videoWidth = Integer.parseInt(width);
videoHeight = Integer.parseInt(height);
}

private boolean isVideoLandscaped() {
if (videoWidth > videoHeight) {
return true;
} else return false;
}
}

不要忘记在样式中或以编程方式在 Activity 中隐藏 ActionBar。

关于VideoView中的Android纵向视频方向错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9118380/

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