Подтвердить что ты не робот

Видео не отображается в VideoView, но я слышу его звук

  • На моем нажатии кнопки я написал следующий код для воспроизведения видео с мой SDCARD (mp4).

    video_view = (VideoView)findViewById(R.id.video_view);
    video_view.setVideoPath("/sdcard/myvideo.mp4");
    video_view.setMediaController(new MediaController(this));
    video_view.start(); 
    
  • Я могу воспроизводить записанное видео с SDCARD в проигрывателе.

  • Но когда я запускаю его в своем приложении в видеоизображении, я слышу только звук.
  • Проблема: Я не вижу видео.

---- Я попытался выполнить ссылку SO, но все равно не повезло ----

  • ссылка 1
  • ссылка 2

  • Кто-нибудь сталкивался с такой проблемой? Если да, то как это решить?

4b9b3361

Ответ 1

Я пробовал каждый метод выше, но никто из них не мог работать.

Наконец, я попытался вызвать эту функцию, затем появилось видео.

video_view.setZOrderOnTop(true);

Надеюсь, это также сработает для вас.

Ответ 2

РЕШЕНИЕ 1:

videoView.setZOrderOnTop(true);

это установит видеоизображение на верхний слой; Другими словами: заблокируйте все под ним.

РЕШЕНИЕ 2:

videoView.setBackgroundColor(Color.TRANSPARENT);

РЕШЕНИЕ 3:

иногда это связано с вашей apptheme; В моем случае я изменил apptheme от @style/AppTheme до @android:style/Theme.NoTitleBar.Fullscreen исправил свою проблему.

Ответ 3

Вы можете попробовать?

video_view = (VideoView)findViewById(R.id.video_view);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(video_view);
mediaController.setMediaPlayer(video_view); //you probably don't need this
video_view.setVideoPath("/sdcard/myvideo.mp4");
video_view.setMediaController(mediaController);
video_view.start(); 

Ответ 4

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

Я пытался установить видимость, и это сработало, не знаю почему. Это может помочь кому-то, кто сталкивался с этим сообщением и сталкивается с проблемой как я

videoView = (VideoView) findViewById(R.id.viewLiveStream);
videoView.setVisibility(View.VISIBLE);

Вот мой XML, не уверен, почему видимость была проблемой.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/activity_bg1"
    android:orientation="vertical">

    <Button
        android:layout_marginTop="10dp"
        android:layout_gravity="center"
        android:id="@+id/btnStreaming"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/start_streaming" />
    <TextView
        android:layout_marginTop="10dp"
        android:layout_gravity="center"
        android:id="@+id/txtStreamingUrl"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:lines="2" />
    <VideoView
        android:id="@+id/viewLiveStream"
        android:layout_width="640dp"
        android:layout_height="480dp"/>
    <Button
        android:id="@+id/btnPlay"
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/play"
        android:layout_gravity="center_vertical|center_horizontal"/>
</LinearLayout>
~                                                                                           

Ответ 5

попробуйте следующее:

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

    <VideoView 
        android:id="@+id/view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"/>

</RelativeLayout>

это может помочь вам...

Ответ 6

У меня была такая же проблема, за исключением того, что я добавлял свое видео-просмотр программно. Я заметил, что при проверке иерархии представлений родительская ViewGroup имела тип слоя, установленный для программного обеспечения.

Так как кодовая база, с которой я работаю, является общей, и я не заметил, что тип слоя устанавливал программное обеспечение в подклассе родительской ViewGroup.

Итак, попробуйте установить тип слоя родительских представлений на None или Hardware

// Remove this if your parent ViewGroup has this set
//setLayerType(View.LAYER_TYPE_SOFTWARE, null);

// Or set this layer type if the above is not present
setLayerType(View.LAYER_TYPE_NONE, null);

Ответ 7

Вы можете сделать это

video_view = (VideoView)findViewById(R.id.video_view);
video_view.setZOrderMediaOverlay(true);
video_view.setVideoPath("/sdcard/myvideo.mp4");
video_view.setMediaController(new MediaController(this));
video_view.start();
video_view.videoView.setZOrderOnTop(true);

поместите метод setZorderOnTop (true) после того, как вы запустили videoView, а не раньше.

Ответ 8

Мое решение заключалось в размещении элемента управления VideoView в верхней части макета, независимо от того, установлено ли свойство видимости.

Эта работа для меня на S6 с Android 6.0

Ответ 9

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


public class Videoplay extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_videoplay);
         VideoView vidView = (VideoView)findViewById(R.id.myVideo);

        MediaController vidControl = new MediaController(this);

        String vidAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4";
        Uri vidUri = Uri.parse(vidAddress);

        Toast.makeText(Videoplay.this, "Loading Teaser",Toast.LENGTH_LONG).show();
        vidView.setVideoURI(vidUri);
          vidView.start();   
        vidControl.setAnchorView(vidView);

        vidView.setMediaController(vidControl);


    }

Здесь я играю видео по одной из ссылок.. У меня отлично работает.

Надеюсь это поможет..

Ответ 10

Черный экран и воспроизведение звука произошли со мной, когда я не выпустил объект MediaPlayer. Когда вы воспроизводите видео в Activity с помощью медиаплеера, вы должны разблокировать его, когда активность будет уничтожена. И когда вы откроете его снова, будет создан новый экземпляр медиаплеера, который будет использовать уже освобожденные ресурсы.

MediaPlayer.release();

Ответ 11

Я попробовал все приведенные выше ответы, но не смог добиться успеха после просмотра некоторого кода. Я прошу сосредоточиться на просмотре видео. И это теперь работает на всех устройствах, надеюсь, это будет работать для некоторых разработчиков!

private var mediaController: MediaController? = null
private fun prepareVideo() {
    val uri = Uri.fromFile(File(recordedVideoPath))
    mediaController = MediaController(this)
    mediaController?.setAnchorView(videoView)
    videoView.setMediaController(mediaController)
    videoView.requestFocus()
    videoView.setVideoURI(uri)
    videoView.seekTo(2)
    videoView.setZOrderOnTop(true)

    videoView.setOnPreparedListener {
        try {
            mediaController?.show(0)
        } catch (e: Exception) {
            System.out.println("Error in Video")
        }
    }
    videoView.setOnErrorListener { _, _, _ ->
        true
    }
}

Ответ 12

Я думаю, вы используете плохой формат mp4. Использует специфический для Android формат mp4.