5

ListView'de video oynatmak için TextureView kullanıyorum. TextureView'ın kendisi mükemmel çalışıyor, ancak, ev düğmesine bastığımda ve uygulamayı birkaç kez yeniden girersem, TextureView siyah olur (ses çalmaya devam etse de). Tekrar çıkıp tekrar girersem, TextureView beyaza döner (veya beyaz, arka planımın rengi beyazdır).TextureView oynatma videosu onop sonra siyah döner.

holder.instagramTextureView 
    .setSurfaceTextureListener(new SurfaceTextureListener() { 

     @Override 
     public void onSurfaceTextureUpdated(
       SurfaceTexture surface) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onSurfaceTextureSizeChanged(
       SurfaceTexture surface, int width, int height) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public boolean onSurfaceTextureDestroyed(
       SurfaceTexture surface) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public void onSurfaceTextureAvailable(
       SurfaceTexture surface, int width, int height) { 
      final Surface s = new Surface(surface); 

      try { 
       holder.mMediaPlayer = new MediaPlayer(); 
       holder.mMediaPlayer.setDataSource(post 
           .getMedias().get(0) 
           .getMediaUrlVideomp4StandardRes()); 
       holder.mMediaPlayer.setSurface(s); 
       holder.mMediaPlayer.prepare(); 

       holder.instagramVideoVolume = 0f; 
       holder.mMediaPlayer.setVolume(
         holder.instagramVideoVolume, 
         holder.instagramVideoVolume); 
       //holder.mMediaPlayer.setOnBufferingUpdateListener(this); 

       holder.mMediaPlayer 
        .setOnCompletionListener(new OnCompletionListener() { 
         @Override 
         public void onCompletion(
           MediaPlayer mp) { 

          // To play: 
          mp.reset(); 
          try { 
           mp.setDataSource(post 
            .getMedias() 
            .get(0) 
            .getMediaUrlVideomp4StandardRes()); 
           mp.prepare(); 

          } catch (IllegalArgumentException e) { 
           // TODO Auto-generated catch 
           // block 
           e.printStackTrace(); 
          } catch (SecurityException e) { 
           // TODO Auto-generated catch 
           // block 
           e.printStackTrace(); 
          } catch (IllegalStateException e) { 
           // TODO Auto-generated catch 
           // block 
           e.printStackTrace(); 
          } catch (IOException e) { 
           // TODO Auto-generated catch 
           // block 
           e.printStackTrace(); 
          } 
          // <--- Here comes a call to 
          // "To Resize" which is shown 
          // right above this code 
          mp.start(); 
         } 
       }); 

       // holder.mMediaPlayer.setOnPreparedListener(this); 
       //holder.mMediaPlayer.setOnVideoSizeChangedListener(this); 

       holder.mMediaPlayer 
        .setAudioStreamType(AudioManager.STREAM_MUSIC); 
       holder.mMediaPlayer.start(); 

       holder.instagramTextureView 
        .setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
          if (holder.instagramVideoVolume == 1) { 
           holder.instagramVideoVolume = 0f; 
           holder.mMediaPlayer 
            .setVolume(
             holder.instagramVideoVolume, 
             holder.instagramVideoVolume); 
          } else { 
           holder.instagramVideoVolume = 1f; 
           holder.mMediaPlayer 
            .setVolume(
             holder.instagramVideoVolume, 
             holder.instagramVideoVolume); 
            } 
          } 
       }); 

      } catch (IllegalArgumentException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (SecurityException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
}); 
+0

üzerinde her zamanki şeyler gerçekleştirmek;' android projelerde, yerine 'Log.e ("UNIQUE_TAG", "hata yapıyor kullanın ... ", e);" Böylece [logcat] aracılığıyla yardımcı hata bilgileri alabilirsiniz (http://developer.android.com/tools/help/logcat.html) – petey

+0

Her zaman onSurfaceTextureAvailable çağrılıyor mu? Medya oynatıcısını her seferinde başlatıyorsanız, nerede duruyorsunuz? – fadden

+0

Yorumunuzu cevaplamak bir cevaptı, cevap gerçekten de üzerindeydiSurfaceTextureAvailable – Userrrrrrrrr

cevap

1

Sorun yeni MediaPlayer yüzey kullanılabilir her zaman yapıyordu:

İşte benim kodudur. Bunun nasıl çalıştığından tam olarak emin değilim, ama sorun buydu. Bunun yerine, bu dinleyicinin dışındaki mediaplayer'ı yaratıyorum.

0

Araştırmamda textureView.getSurfaceTexture(), onResume() null değerini döndürür. Yaptığım şey, onResume() numaralı telefona bir dinleyici yerleştirdi.

TextureView textureView; 

/*.... 
Usual stuff 
*/ 

public void onPause(){ 
    super.onPause(); 

    //... destroy or disable image producer 
} 

public void onResume(){ 
    super.onResume(); 

    textureView.setSurfaceTextureListener(/*another listener*/); 
} 

Sonra `e.printStackTrace() do kullanımını yok onSurfaceTextureAvailable()

İlgili konular