Почему я не могу воспроизвести свое видео из VideoView?

#java #android #android-videoview

#java #Android #android-videoview

Вопрос:

Я очень близко подобрался к воспроизведению своего видео, но все еще сталкиваюсь с проблемой. Вот мой код из MainActivity.java :

 public void my_vid(View view){
setContentView(R.layout.my_vid);
        VideoView vid = findViewById(R.id.video_view);
        String vid_path = "/sdcard/Download/Track_horizontal_plane.mp4";
        Uri uri = Uri.parse(vid_path);
        vid.setVideoURI(uri);
        MediaController mediaController = new MediaController(this);
        vid.setMediaController(mediaController);
        mediaController.setAnchorView(vid);

    }
 

Вот мой соответствующий макет:

 <VideoView
        android:id="@ id/video_view"
        android:layout_width="411dp"
        android:layout_height="667dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
 

Наконец, вот ошибка, которую я получаю:

 2020-12-16 12:40:15.204 25622-25622/com.android.choice D/MediaPlayerNative: getMetadata
2020-12-16 12:40:26.286 25622-25654/com.android.choice E/MediaPlayerNative: error (100, 2)
2020-12-16 12:40:26.287 25622-25622/com.android.choice E/MediaPlayer: Error (100,2)
2020-12-16 12:40:26.287 25622-25622/com.android.choice D/VideoView: Error: 100,2
2020-12-16 12:40:26.302 25622-25654/com.android.choice E/MediaPlayerNative: error (1, -2147479551)
2020-12-16 12:40:26.401 25622-25622/com.android.choice E/MediaPlayer: Error (1,-2147479551)
2020-12-16 12:40:26.401 25622-25622/com.android.choice D/VideoView: Error: 1,-2147479551
 

Когда я открываю макет содержимого, содержащий видеообзор, MediaController работает и даже правильно сообщает мне длину выбранного мной видео. Как только я нажимаю play на mediacontroller, он сообщает мне, что видео не может быть воспроизведено. Файл — это mp4 файл, поэтому я думаю, что проблем быть не должно. Есть идеи, где я ошибаюсь? Спасибо за помощь.

Ответ №1:

1. пожалуйста, убедитесь, что вы анализируете URI из жестко заданной строки правильно. было бы лучше, если бы вы попробовали использовать фактический URI. здесь вы можете увидеть пример получения видео из галереи.

   fun chooseVideoFromGallery() {
    val intent = Intent()
    intent.type = "video/mp4"
    intent.action = Intent.ACTION_GET_CONTENT
    startActivityForResult(
        Intent.createChooser(intent, "Select Video"),
        REQUEST_TAKE_GALLERY_VIDEO
    )
}


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == REQUEST_TAKE_GALLERY_VIDEO) {
            val uri: Uri? = data!!.data
         
        }
    } 
}
 

2. если проблема не в URI, было бы лучше, если бы вы использовали Exo player (созданный Google) вместо видеопроигрывателя, чтобы он поддерживал широкий спектр видео- и аудиоконтейнеров.