ボタンをクリックして、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から録画したビデオを再生できます。
上記の方法をすべて試しましたが、どれもうまくいきませんでした。
最後に、この関数を呼び出そうとすると、ビデオが表示されました。
video_view.setZOrderOnTop(true);
これもあなたのために働くことを願っています。
解決策1:
videoView.setZOrderOnTop(true);
これにより、ビデオビューがトップレイヤーに設定されます。つまり、その下にあるすべてのものをブロックします。
解決策2:
videoView.setBackgroundColor(Color.TRANSPARENT);
ソリューション3:
これはアプリのテーマに関連している場合があります。私の場合、アプリのテーマを@style/AppTheme
から@Android:style/Theme.NoTitleBar.Fullscreen
に変更して問題を解決しました。
これを試して頂けますか?
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();
同じ問題が発生しました。ビデオビューのサイズが予想されるビデオ解像度に変更されましたが、画面に何も表示されません。上記の解決策を使用しようとしましたが、何も機能しませんでした。
私は可視性を設定しようとしましたが、それはうまくいきましたが、理由はわかりません。これは、この投稿に出くわし、私のような問題に直面している人を助けるかもしれません
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>
~
プログラムでビデオビューを追加したことを除いて、まったく同じ問題が発生しました。親のViewGroupのレイヤータイプがソフトウェアに設定されていることが、ビュー階層を調べているときにわかりました。
私が取り組んでいるコードベースは共有されているため、レイヤータイプが親ViewGroupのサブクラスのソフトウェアに設定されていることに気付きませんでした。
親のビューのレイヤータイプを[なし]または[ハードウェア]に設定してみてください
// 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);
これを試して :
<?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>
それはあなたを助けるかもしれません...
<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);
}
ここでは、リンクの1つからビデオを再生しています。
お役に立てれば..
上記のすべての回答を試しましたが、コードを確認しても成功しませんでした。ビデオビューにフォーカスを要求します。そして、それは現在すべてのデバイスで動作しています、これが一部の開発者で動作することを願っています!!
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
}
}
私の解決策は、レイアウトの上部にVideoViewコントロールを配置することであり、visibilityプロパティを設定するかどうかには関係ありません。
これはAndroid 6.0のS6で私のために働きます
MediaPlayerオブジェクトを解放しなかったときに、黒い画面とオーディオ再生が発生しました。メディアプレーヤーを使用してアクティビティでビデオを再生する場合、アクティビティが破棄されたときにビデオを解放する必要があります。そして再び開くと、メディアプレーヤーの新しいインスタンスが作成され、すでにリリースされているリソースを使用します。
MediaPlayer.release();
あなたはこれを行うことができます
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を開始する前ではなく、開始した後に配置します。