Видео не отображается на 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 в плеере.

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

- - - - - я попытался перейти по ссылке, но все равно не повезло ----

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

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

10 ответов


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

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

video_view.setZOrderOnTop(true);

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


Решение 1:

videoView.setZOrderOnTop(true);

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

решение 2:

videoView.setBackgroundColor(Color.TRANSPARENT);

решение 3:

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


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

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

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>
~                                                                                           

попробуйте это :

<?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>

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


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

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(); 

У меня была такая же проблема, за исключением того, что я добавлял свое видео программно. Я заметил, проверяя иерархию представлений, что родительская 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);

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

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, не раньше.


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

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


<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);


    }

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

надеюсь, что это помогает..


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