2016-10-07 8 views
0

私は、VideoViewとMediaPlayerを使ってAssetsからビデオを再生するのに苦労しています。Xamarin android:VideoViewはSurfaceCreatedを呼び出さない

ビルドバージョン:アンドロイド6.0.1マシュマロAPI 23

デバッグ装置:NVIDIA SHIELDタブレットK1

問題:機能 "SurfaceCreatedは" と呼ばれることはありませんので、私のVideoViewは、表面を作成しないように見えますデバッグ中に

実際の結果:アクティビティが読み込まれると、画面がグレーになり、正しいビデオの音声が聞こえます。ここで

は私のコードです:

public class VideoTestActivity : Activity, MediaPlayer.IOnPreparedListener, ISurfaceHolderCallback 
    { 
     MediaPlayer player; 
     VideoView _myVideoView; 

     protected override void OnCreate(Bundle savedInstanceState) 
     { 
      base.OnCreate(savedInstanceState); 

      SetContentView(Resource.Layout.VideoTest); 

      player = new MediaPlayer(); 

      _myVideoView = FindViewById<VideoView>(Resource.Id.video); 

      _myVideoView.Start(); 
      _myVideoView.SetZOrderOnTop(true); // tried from Q&A, display a grey screen 

      var descriptor = Assets.OpenFd("video.mp4");// the data is correctly loaded 
      player.SetDataSource(descriptor.FileDescriptor, descriptor.StartOffset, descriptor.Length); 
      player.Prepare(); 
      player.Start(); 
     } 


     public void OnPrepared(MediaPlayer mp) 
     { 
      throw new NotImplementedException(); 
     } 

     public void SurfaceChanged(ISurfaceHolder holder, [GeneratedEnum] Format format, int width, int height) 
     { 
      throw new NotImplementedException(); 
     } 

     public void SurfaceCreated(ISurfaceHolder holder) 
     { 
      player.SetDisplay(_myVideoView.Holder); // never called 
     } 

     public void SurfaceDestroyed(ISurfaceHolder holder) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

そして、ここで私のAXMLです:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:p1="http://schemas.android.com/apk/res/android" 
    p1:minWidth="25px" 
    p1:minHeight="25px" 
    p1:layout_width="match_parent" 
    p1:layout_height="match_parent" 
    p1:id="@+id/relativeLayout1"> 
    <VideoView 
     p1:layout_width="fill_parent" 
     p1:layout_height="fill_parent" 
     p1:id="@+id/video"/> 
</RelativeLayout> 

私が試してみました何/確認:

  • 私VideoViewは異なるwidht /高さを持っています0
  • ディスクリプタが正しくロードされている
  • SetZOrderOnTop()(スタート後に呼び出されている)
  • videoViewが正しくFindViewById(によってロードされている)

私はまだanwserを探していますが、私はすべてのポスト関連のを確認しているので、 stackOverflow、私はこのポストを開いた。

あなたの時間と知識をお寄せいただきありがとうございます。

答えて

0

私はビデオを再生するソリューションを見つけましたが、Surfaceはロードできませんでした。

生のフォルダを作成するのが解決策でした。ここ

新しいコード(以前のものから他のフィールドは空白になっている)である。

protected override void OnCreate(Bundle savedInstanceState) 
     { 
      base.OnCreate(savedInstanceState); 

      SetContentView(Resource.Layout.VideoTest); 

     VideoView view = (VideoView)FindViewById(Resource.Id.videoPacificRim); 
      String path = "android.resource://" + PackageName + "/" + Resource.Raw.pacificrim_file; 
      view.SetVideoURI(Android.Net.Uri.Parse(path)); 
      view.Start(); 
     } 

私は元の質問に応答がない場合でも、対象を閉じます。

関連する問題