2016-08-16 5 views
1

У меня проблема. Мой EmVideoView не показывает мой пользовательский визуализатор на фрагменте я использую EmVideoView от ExoPlayer.Мой EMVideoView не отображает визуализатор

это мой класс с Визуализации

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

} 

и следующий я создать его в XML

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

и последний шаг инициализации и прогресс в играть. Мой код выглядит следующим образом:

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

      } 

Im не имеют каких-либо ошибок. Любой sugestion?

ответ

0

После очистки Project все работает хорошо, поэтому у вас есть простой код для VisualizatorView с получением данных из EmVideoView. наслаждаться

EDIT: если и есть информация, как:

"Невозможно инициализировать ошибки визуализации 1-2-3-4" есть варианты, как Android 6.0> разрешений во время выполнения под названием ANDROID M андроид 6.0 < разрешения AUDIO_RECORD и MODIFY_AUDIO_SETTINGS

Смежные вопросы