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.
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.
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.
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>
~
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();
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);
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 ...
<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..
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
}
}
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
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 ();
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.