web-dev-qa-db-ja.com

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から録画したビデオを再生できます。

  • しかし、アプリケーションでビデオビューで実行すると、音しか聞こえません。
  • 問題:ビデオが表示されない

---- SO=リンクをたどったが、まだうまくいかない----

  • リンク1
  • リンク2

  • このような問題に直面した人はいますか?はいの場合、それをどのように解決できますか?

21
Dhruvil Patel

上記の方法をすべて試しましたが、どれもうまくいきませんでした。

最後に、この関数を呼び出そうとすると、ビデオが表示されました。

video_view.setZOrderOnTop(true);

これもあなたのために働くことを願っています。

59
SeaStar

解決策1:

videoView.setZOrderOnTop(true);

これにより、ビデオビューがトップレイヤーに設定されます。つまり、その下にあるすべてのものをブロックします。

解決策2:

videoView.setBackgroundColor(Color.TRANSPARENT);

ソリューション3:

これはアプリのテーマに関連している場合があります。私の場合、アプリのテーマを@style/AppThemeから@Android:style/Theme.NoTitleBar.Fullscreenに変更して問題を解決しました。

12
liu zhiyuan

これを試して頂けますか?

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

同じ問題が発生しました。ビデオビューのサイズが予想されるビデオ解像度に変更されましたが、画面に何も表示されません。上記の解決策を使用しようとしましたが、何も機能しませんでした。

私は可視性を設定しようとしましたが、それはうまくいきましたが、理由はわかりません。これは、この投稿に出くわし、私のような問題に直面している人を助けるかもしれません

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

プログラムでビデオビューを追加したことを除いて、まったく同じ問題が発生しました。親の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);
1
dsmflyer

これを試して :

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

それはあなたを助けるかもしれません...

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


    }

ここでは、リンクの1つからビデオを再生しています。

お役に立てれば..

0
vithika

上記のすべての回答を試しましたが、コードを確認しても成功しませんでした。ビデオビューにフォーカスを要求します。そして、それは現在すべてのデバイスで動作しています、これが一部の開発者で動作することを願っています!!

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

私の解決策は、レイアウトの上部にVideoViewコントロールを配置することであり、visibilityプロパティを設定するかどうかには関係ありません。

これはAndroid 6.0のS6で私のために働きます

0
adrian

MediaPlayerオブジェクトを解放しなかったときに、黒い画面とオーディオ再生が発生しました。メディアプレーヤーを使用してアクティビティでビデオを再生する場合、アクティビティが破棄されたときにビデオを解放する必要があります。そして再び開くと、メディアプレーヤーの新しいインスタンスが作成され、すでにリリースされているリソースを使用します。

MediaPlayer.release();

0
Mohammad Sayed

あなたはこれを行うことができます

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を開始する前ではなく、開始した後に配置します。

0
Leslie Morejon