2016-08-16 5 views
1

問題が発生しました。私のEmVideoViewは私のカスタムビジュアライザを表示しません 私はExoPlayerからEmVideoViewを使用しています。EMVideoViewにビジュアライザーが表示されない

これは私がXML

<com.anta.exoplaytutorial.ui.VisualizerView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/visualizer_view"/> 

でそれを作成し、最後のステップは、初期化し、演奏上の進歩である視覚化

public class VisualizerView extends View { 

    private byte[] mBytes; 
    private float[] mPoints; 
    private Rect mRect = new Rect(); 
    private Paint mForePaint = new Paint(); 

    public VisualizerView(Context context) { 
     super(context); 
     init(); 
    } 

    public VisualizerView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public VisualizerView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    private void init() { 
     mBytes = null; 
     mForePaint.setStrokeWidth(1f); 
     mForePaint.setAntiAlias(true); 
     mForePaint.setColor(Color.WHITE); 
    } 

    public void updateVisualizer(byte[] bytes) { 
     mBytes = bytes; 
     invalidate(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     if (mBytes == null) { 
      return; 
     } 
     if (mPoints == null || mPoints.length < mBytes.length * 4) { 
      mPoints = new float[mBytes.length * 4]; 
     } 
     mRect.set(0, 0, getWidth(), getHeight()); 
     for (int i = 0; i < mBytes.length - 1; i++) { 
      mPoints[i * 4] = mRect.width() * i/(mBytes.length - 1); 
      mPoints[i * 4 + 1] = mRect.height()/2 
        + ((byte) (mBytes[i] + 128)) * (mRect.height()/2)/128; 
      mPoints[i * 4 + 2] = mRect.width() * (i + 1)/(mBytes.length - 1); 
      mPoints[i * 4 + 3] = mRect.height()/2 
        + ((byte) (mBytes[i + 1] + 128)) * (mRect.height()/2) 
        /128; 
     } 
     canvas.drawLines(mPoints, mForePaint); 
    } 

} 

、次のと私のクラスです。以下のように私のコードを見て:

private void initAudio() { 
    setupVisualizerFxAndUI(); 
    mVisualizer.setEnabled(true); 
} 

private void setupVisualizerFxAndUI() { 


    mVisualizer = new Visualizer(0); 
    mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); 
    mVisualizer.setDataCaptureListener(
      new Visualizer.OnDataCaptureListener() { 
       public void onWaveFormDataCapture(Visualizer visualizer, 
                byte[] bytes, int samplingRate) { 
        visualizerView.updateVisualizer(bytes); 
       } 

       public void onFftDataCapture(Visualizer visualizer, 
              byte[] bytes, int samplingRate) { 
       } 
      }, Visualizer.getMaxCaptureRate()/2, true, false); 
} 

と私はここ許可(また、許可された)をチェックウィットそれを初期化:

private void playPauseVideo() { 
    switch (videoState) { 
     case STATUS_PLAYING: 
      playVideo(); 
      if (ContextCompat.checkSelfPermission(context, 
        Manifest.permission.RECORD_AUDIO) 
        != PackageManager.PERMISSION_GRANTED) { 
       if(ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.RECORD_AUDIO)){ 
        initAudio(); 
       }else{ 
        ActivityCompat.requestPermissions(activity, 
          new String[]{Manifest.permission.RECORD_AUDIO},RECORD_AUDIO_PERMISIONS_REQUEST 
          ); 
       } 

      } 

イムすべてのエラーを持っていません。どんな服薬?

答えて

0

クリーンなプロジェクトのすべてがうまくいくので、VisualizatorViewの簡単なコードでEmVideoViewからデータを取得できます。

EDITを楽しむ:uはのような情報を得た場合:

"見える化エラー1-2-3-4を初期化できません" >は、実行時の権限はAUDIO_RECORDアンドロイドM アンドロイド6.0 <権限を アンドロイド6.0のようなオプションと呼ばれ、 MODIFY_AUDIO_SETTINGS

関連する問題