"Can't play this video" 在 Android Studio 上使用 VideoView...尝试了很多方法,但仍然无效

"Can't play this video" using VideoView on Android Studio...tried many things and it still doesn't work

您好,我正在尝试在 Android Studio 应用程序上使用帧布局中的相对布局播放 432x320 .mp4 视频(我已将其手动转换为 .mp4 H.264 格式)。我不断收到 "Can't play this video error."

这是我的 .xml 文件(请注意,我在 post 中省略了很多 buttons/imagebuttons,因为它们无关紧要,占用了很多 space)...

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="com.example.kenneth.alphieii.AlphieII">

<ImageView
    android:id="@+id/Robot"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:src="@drawable/alphie_robot1"
    android:scaleType="fitCenter"/>

<TextView android:id="@+id/mytexttester"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:layout_marginTop="19dp"
    android:visibility="gone"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />


...a bunch of buttons here including Yellowb0...this is not an error

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

       <VideoView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/videoView"
        android:layout_width="250dp"
        android:layout_height="150dp"

        android:layout_above="@+id/Yellowb0"
        android:layout_centerHorizontal="true"
        android:visibility="visible" />



</RelativeLayout>

</FrameLayout>

我在此处 post 提供了实际视频,可以轻松下载...

!https://streamable.com/y01zy

并且我有一张当前界面的图片(注意videoview大小需要调整)

我已经尝试了很多东西,例如...

 mVideoView.setVideoPath("android.resource://com.example.s3project/raw/" +
 R.raw.alphie_vidprompt);
 mVideoView.start();

和...

    String uriPath = "android.resource://" +
    "com.android.engineersdream.ed_video/" + R.raw.alphie_vidprompt;
    Uri uri = Uri.parse(uriPath);
    mVideoView.setVideoURI(uri);
    mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {

  mVideoView.start();
    }
});

尽管尝试了针对在使 videoview 视频正常工作时遇到类似问题的人提出的建议,但我仍然无法正常工作。还有其他建议我可能会失踪吗?我的视频格式不正确吗?在 Android Studio 上是否有其他更简单的播放视频的方法?谢谢。

编辑: 我尝试按照建议将视频 .mp4 文件复制到 SD 卡,但它仍然不起作用。我已将它们放在 Android Manifest.xml 文件中: android.permission.READ_EXTERNAL_STORAGE 和 android.permission.WRITE_EXTERNAL_STORAGE.

这是我的 OnCreate...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.alphie_ii);
    mVideoView = (VideoView)findViewById(R.id.videoView);
    push = (ImageButton) findViewById(R.id.On);
    //imgButton.setOnClickListener(imgButtonHandler);
    final int[] mvids = new int[] { R.raw.alphie_vidprompt, R.raw.alphie_vidcorrect };
    for (int i = 0; i < mvids.length; i++) {
        try {
            String path = Environment.getExternalStorageDirectory() + "/Alphie";
            File dir = new File(path);
            if (dir.mkdirs() || dir.isDirectory()) {
                String str_song_name = i + ".mp4";
                CopyRAWtoSDCard(mvids[i], path + File.separator + str_song_name);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

private void CopyRAWtoSDCard(int id, String path) throws IOException {
    InputStream in = getResources().openRawResource(id);
    FileOutputStream out = new FileOutputStream(path);
    byte[] buff = new byte[1024];
    int read = 0;
    try {
        while ((read = in.read(buff)) > 0) {
            out.write(buff, 0, read);
        }
    } finally {
        in.close();
        out.close();
    }
}

这就是我以前对视频的称呼...

 Uri vidFile = Uri.parse(
 Environment.getExternalStorageDirectory().getAbsolutePath()
 + "alphie/alphie_vidprompt");

    mVideoView.setVideoURI(vidFile);
    mVideoView.start();

我仍然收到相同的消息 "Can't play this video" 虽然我还有很多东西要学习,但我仍然不明白为什么必须将视频复制到 SD 卡中。我希望从 res/raw 目录中 运行 它会很容易。

您提供了错误的包名称(com.example.s3projectcom.android.engineersdream.ed_video)。您的布局应该是 com.example.kenneth.alphieiicom.example.kenneth。但是您应该使用上下文中的包名称,例如:

getPackageName();

所以在你的情况下你应该使用

"android.resource://".concat(getPackageName()).concat("/raw/").concat(R.raw.alphie_vidprompt);