Cómo adjuntar MediaPlayer con SurfaceView en android?
Estoy construyendo reproductor de vídeo con el objeto de reproductor de medios de android. Puedo oír el audio pero el vídeo no aparece en surfaceView. Aquí está mi código
public class PlayerActivity extends Activity implements SurfaceHolder.Callback { String path; private MediaPlayer mp; private SurfaceView mPreview; private SurfaceHolder holder; boolean pausing = false; public static String filepath; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_player); getWindow().setFormat(PixelFormat.UNKNOWN); mPreview = (SurfaceView)findViewById(R.id.surfaceView); holder = mPreview.getHolder(); holder.setFixedSize(176, 144); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mp = new MediaPlayer(); mp.setDisplay(holder); try { Intent intent = getIntent(); Uri fileuri = intent.getData(); filepath=fileuri.getPath(); } catch(Exception e) {} try { mp.setDataSource(filepath); mp.prepare(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mp.start(); } }
Target es android 2.3 y superior. Cómo solucionarlo por favor ayúdame ..
- Evite dibujar más allá del lienzo con SurfaceView
- Obtener información de GPU en Android sin SurfaceView
- Android Take Captura de pantalla de Vista de superficie muestra negro
- Android Surfaceview Hilos y fugas de memoria
- Android: toma fotos sin vista previa
- Android: dibujo en un nuevo lienzo
- Android: hilo deteniéndose intermitentemente
- Color de fondo de relleno de lienzo de Android (aplicación de lona)
- SurfaceView y ANownWindow
- Uso de surfaceView para capturar un video
- Tomar una foto lo más rápido posible con la API de la cámara en Android
- Efecto de zoom en Android SurfaceView
- Cómo cambiar la cámara Android a la vertical en la vista de superficie?
Finalmente lo arreglé yo mismo. Simplemente llamado mp.setDisplay(holder);
Dentro de la función surfaceCreated (). Y el código final es
public class PlayerActivity extends Activity implements SurfaceHolder.Callback { String path; private MediaPlayer mp; private SurfaceView mPreview; private SurfaceHolder holder; boolean pausing = false; public static String filepath; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_player); getWindow().setFormat(PixelFormat.UNKNOWN); mPreview = (SurfaceView)findViewById(R.id.surfaceView); holder = mPreview.getHolder(); holder.setFixedSize(800, 480); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mp = new MediaPlayer(); try{ Intent intent = getIntent(); Uri fileuri = intent.getData(); filepath=fileuri.getPath(); }catch(Exception e){} } protected void onPause(){ super.onPause(); mp.release(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub mp.setDisplay(holder); play(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } void play(){ try { mp.setDataSource(filepath); mp.prepare(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mp.start(); } }
No está funcionando para mí, lanzando error ilegal estado excepción en
surfaceCreated()
método en la líneamp.setDisplay(holder);
Declare mp.setDisplay(holder)
como se indica a continuación:
@Override public void surfaceCreated(SurfaceHolder holder) { mediaPlayer.setDataSource(this,uri); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.prepare(); mp.setDisplay(holder); mp.start; }
- ¿Cómo obtener la identificación única del usuario de One Signal en Mobile?
- Throwing OutOfMemoryError "pthread_create (1040KB stack) falló: Intenta de nuevo" al hacer posts asíncronos usando Volley