web-dev-qa-db-fra.com

La vidéo ne s'affiche pas sur VideoView mais j'entends son son

  • Sur mon bouton, j'ai écrit le code suivant pour lire une vidéo à partir de My 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(); 
    
  • Je peux lire des vidéos enregistrées à partir de SDCARD dans le lecteur.

  • Mais lorsque je l'exécute sur mon application en mode vidéo, je n'entends que le son.
  • Problème: Je ne parviens pas à voir la vidéo.

---- J'ai essayé de suivre le lien SO mais toujours pas de chance ----

  • lien 1
  • lien 2

  • Est-ce que quelqu'un a déjà été confronté à ce genre de problème? Si oui, comment peut-il le résoudre?

19
Dhruvil Patel

J'ai essayé toutes les méthodes ci-dessus, mais aucune d'entre elles ne pouvait fonctionner.

Enfin, j'ai essayé d'appeler cette fonction, puis la vidéo est apparue.

video_view.setZOrderOnTop(true);

J'espère que cela fonctionne aussi pour vous.

52
SeaStar

SOLUTION 1:

videoView.setZOrderOnTop(true);

cela définira la vidéo sur la couche supérieure; En d'autres termes: bloquez tout en dessous.

SOLUTION 2:

videoView.setBackgroundColor(Color.TRANSPARENT);

SOLUTION 3:

parfois, cela est lié à votre appthème; Dans mon cas, j'ai changé l'apptheme de @style/AppTheme à @Android:style/Theme.NoTitleBar.Fullscreen pour résoudre mon problème.

10
liu zhiyuan

Je suis confronté au même problème: ma vue vidéo est redimensionnée à la résolution vidéo attendue, mais rien ne s'affiche à l'écran. J'ai essayé d'utiliser les solutions mentionnées ci-dessus mais rien n'a fonctionné.

J'ai essayé de définir la visibilité et cela a fonctionné, je ne sais pas pourquoi. Cela pourrait aider quelqu'un qui rencontre ce message et qui est confronté à un problème comme moi

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

Voici mon XML, je ne sais pas pourquoi la visibilité était un problème.

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

Pouvez-vous essayer ceci?

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(); 
1
Pawan Kumar

J'avais exactement le même problème, sauf que j'ajoutais ma vue vidéo par programme. Lors de l'inspection de la hiérarchie des vues, j'ai remarqué que le type de couche du groupe de vues parent était défini sur logiciel. 

Étant donné que la base de code sur laquelle je travaille est partagée et que je n'ai pas remarqué que le type de couche était en cours de configuration par logiciel dans une sous-classe du ViewGroup parent.

Essayez donc de définir le type de couche de vues du parent sur Aucun ou Matériel.

// 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);
1
dsmflyer

essaye ça :

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

c'est peut-être vous aider ...

1
Harshit Rathi
<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);


    }

Ici, je joue la vidéo à partir de l’un des liens. Cela fonctionne parfaitement pour moi.

J'espère que cela t'aides..

0
vithika

Ma solution consistait à placer le contrôle VideoView en haut de la présentation et peu importe Si vous définissez la propriété de visibilité.

Ce travail pour moi sur un S6 avec Android 6.0

0
adrian

L'écran noir et la lecture audio se sont produits avec moi lorsque je n'ai pas libéré l'objet MediaPlayer. Lorsque vous lisez une vidéo dans Activity avec le lecteur multimédia, vous devez la libérer lorsque l'activité est détruite. Et lorsque vous l'ouvrez à nouveau, une nouvelle instance de lecteur multimédia sera créée et utilisera les ressources déjà publiées.

MediaPlayer.release ();

0
Mohammad Sayed

Tu peux le faire

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

mettez la méthode setZorderOnTop (true) après avoir démarré videoView, pas avant.

0
Leslie Morejon