it-swarm.com.de

Video wird nicht in VideoView angezeigt, aber ich kann den Ton hören

  • Beim Klicken auf die Schaltfläche habe ich den folgenden Code zum Abspielen von Videos von Meiner SDCARD (mp4) geschrieben.

    video_view = (VideoView)findViewById(R.id.video_view);
    video_view.setVideoPath("/sdcard/myvideo.mp4");
    video_view.setMediaController(new MediaController(this));
    video_view.start(); 
    
  • Ich kann aufgezeichnete Videos von SDCARD im Player abspielen.

  • Wenn ich es jedoch in meiner Anwendung im Videoview ausführen, höre ich nur Ton.
  • Problem: Ich kann das Video nicht sehen.

---- Ich habe versucht, SO link zu folgen, aber immer noch kein Glück ----

  • link 1
  • link 2

  • Steht jemand jemals vor dieser Art von Problemen? Wenn ja, wie kann es gelöst werden?

19
Dhruvil Patel

Ich habe alle oben genannten Methoden ausprobiert, aber keine davon konnte funktionieren.

Schließlich habe ich versucht, diese Funktion aufzurufen, dann erschien das Video.

video_view.setZOrderOnTop(true);

Hoffe das funktioniert auch für dich.

52
SeaStar

LÖSUNG 1:

videoView.setZOrderOnTop(true);

dadurch wird die Videoansicht auf die oberste Ebene gesetzt. Mit anderen Worten: Blockiere alles darunter.

LÖSUNG 2:

videoView.setBackgroundColor(Color.TRANSPARENT);

LÖSUNG 3:

manchmal bezieht sich dies auf Ihr Element. In meinem Fall habe ich das Programm von @style/AppTheme in @Android:style/Theme.NoTitleBar.Fullscreen geändert, um mein Problem zu beheben.

10
liu zhiyuan

Ich hatte das gleiche Problem, meine Videoansicht wurde auf die erwartete Videoauflösung skaliert, aber auf dem Bildschirm ist nichts zu sehen. Ich habe versucht, die oben genannten Lösungen zu verwenden, aber es hat nichts funktioniert.

Ich habe versucht, die Sichtbarkeit einzustellen und das hat funktioniert, nicht sicher, warum. Dies könnte jemandem helfen, der auf diesen Beitrag stößt und vor einem Problem wie mir steht

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

Hier ist mein XML, nicht sicher, warum Sichtbarkeit ein Problem war.

<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

Kannst du das mal ausprobieren?

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

Ich hatte genau das gleiche Problem, nur dass ich meine Videoansicht programmgesteuert hinzufügte. Bei der Überprüfung der Ansichtshierarchie ist mir aufgefallen, dass für den übergeordneten ViewGroup-Typ der Layer auf Software festgelegt wurde. 

Da die Codebase, an der ich arbeite, gemeinsam genutzt wird, habe ich nicht bemerkt, dass der Ebenentyp auf Software in einer Unterklasse der übergeordneten ViewGroup festgelegt wurde.

Setzen Sie also den Layer-Typ der übergeordneten Ansichten auf Keine oder 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);
1
dsmflyer

versuche dies :

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

es kann dir helfen ...

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


    }

Hier spiele ich das Video von einem der Links ab. Es funktioniert perfekt für mich.

Hoffe das hilft..

0
vithika

Ich habe alle oben genannten Antworten ausprobiert, habe aber nach dem Betrachten eines Codes keinen Erfolg erzielt. Ich fordere den Fokus für meine Videoansicht an. Und es funktioniert jetzt auf allen Geräten. Hoffe, dass dies bei einigen Entwicklern funktioniert !!

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
    }
}
0
amit bansode

Meine Lösung bestand darin, das VideoView-Steuerelement ganz oben im Layout zu platzieren und unabhängig davon , Wenn Sie die Sichtbarkeitseigenschaft festlegen.

Das funktioniert für mich auf einem S6 mit Android 6.0

0
adrian

Der schwarze Bildschirm und die Audiowiedergabe passierte bei mir, als ich das MediaPlayer-Objekt nicht freigab. Wenn Sie ein Video in Activity with Media Player abspielen, müssen Sie es freigeben, wenn die Aktivität zerstört wird. Wenn Sie es erneut öffnen, wird eine neue Instanz von Media Player erstellt, und die bereits freigegebenen Ressourcen werden verwendet.

MediaPlayer.release ();

0
Mohammad Sayed

Du kannst das

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

setzen Sie die setZorderOnTop (true) -Methode nach dem Start von videoView, nicht vorher.

0
Leslie Morejon