¿Es Android 2.2 HTTP streaming progresivo = HTTP Live Streaming?
El framework de medios Stagefrigh (Android 2.2) admite la transmisión progresiva de HTTP.
¿Que significa eso? Es decir, esto es una realización del protocolo HTTP Live Streaming?
Y cómo usar HTTP Live Streaming en Android, me refiero a lo que es el cliente – navegador web, MediaPlayer o simplemente "en-SDK" realización y tengo que heredar de alguna clase?
- SurfaceView, SurfaceTexture y MediaPlayer no pueden reproducir mi video en android
- Android: el video se puede reproducir desde la galería pero cuando lo reproduzco usando el video de tipo Intent.ACTION_VIEW, no se puede reproducir
- ¿Cómo subir videos a youtube en android?
- ¿Cómo podemos reproducir código incrustado de YouTube en una aplicación de Android mediante webview?
- Cómo manejar la orientación del vídeo desde dispositivos móviles
- Obtención de pantalla en negro cuando se agrega ExoPlayer a GLSurfaceView
- Cómo subir un video desde un teléfono Android (como Android) mientras se está grabando
- Android no puede usar hdmi en la pestaña creativa y necesita ser notificado en todos los dispositivos (máximo) tan pronto como hdmi esté conectado
- Inconsistencias con el video HTML5 en un WebView de Android
- Pruebe a grabar vídeo utilizando la shell de adb screenrecord Android 4.4
- ¿Cómo puedo reproducir video html5 en línea en un WebView?
- Cómo hacer que una videoview NO se inicie automáticamente después de preparado
- Recorte de vídeo mediante "com.android.camera.action.TRIM" (paquete Gallery2)
Una gran diffrencia práctica es que Stagefright media Framework soporta mpeg3 streaming, que el viejo motor no lo hizo. Así que puedes usar (shoutcast) mp3streams por ejemplo.
Aquí hay un ejemplo sencillo de implementación, que transmite una URL de shoutcast: http://fr3.ah.fm:9000 . Tenga en cuenta que esto sólo funciona en Android 2.2 y versiones posteriores.
import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class SimpleMusicStream extends Activity implements MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnBufferingUpdateListener { private String TAG = getClass().getSimpleName(); private MediaPlayer mp = null; private Button play; private Button pause; private Button stop; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); play = (Button) findViewById(R.id.play); pause = (Button) findViewById(R.id.pause); stop = (Button) findViewById(R.id.stop); play.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { play(); } }); pause.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { pause(); } }); stop.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { stop(); } }); } private void play() { Uri myUri = Uri.parse("http://fr3.ah.fm:9000/"); try { if (mp == null) { this.mp = new MediaPlayer(); } else { mp.stop(); mp.reset(); } mp.setDataSource(this, myUri); // Go to Initialized state mp.setAudioStreamType(AudioManager.STREAM_MUSIC); mp.setOnPreparedListener(this); mp.setOnBufferingUpdateListener(this); mp.setOnErrorListener(this); mp.prepareAsync(); Log.d(TAG, "LoadClip Done"); } catch (Throwable t) { Log.d(TAG, t.toString()); } } @Override public void onPrepared(MediaPlayer mp) { Log.d(TAG, "Stream is prepared"); mp.start(); } private void pause() { mp.pause(); } private void stop() { mp.stop(); } @Override public void onDestroy() { super.onDestroy(); stop(); } public void onCompletion(MediaPlayer mp) { stop(); } public boolean onError(MediaPlayer mp, int what, int extra) { StringBuilder sb = new StringBuilder(); sb.append("Media Player Error: "); switch (what) { case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK: sb.append("Not Valid for Progressive Playback"); break; case MediaPlayer.MEDIA_ERROR_SERVER_DIED: sb.append("Server Died"); break; case MediaPlayer.MEDIA_ERROR_UNKNOWN: sb.append("Unknown"); break; default: sb.append(" Non standard ("); sb.append(what); sb.append(")"); } sb.append(" (" + what + ") "); sb.append(extra); Log.e(TAG, sb.toString()); return true; } public void onBufferingUpdate(MediaPlayer mp, int percent) { Log.d(TAG, "PlayerService onBufferingUpdate : " + percent + "%"); } }
Main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:text="Play" android:id="@+id/play" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Pause" android:id="@+id/pause" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Stop" android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout>
Leer más http://developer.android.com/guide/topics/media/index.html check Asynchronous Preparation
El streaming progresivo HTTP es como reproducir archivos multimedia mientras se descarga el archivo.
No es la realización. 1st, stagefright no contiene ningún controlador de archivos .m3u8. 2nd, stagefright no soporta el formato de archivo .ts.
Actualmente, puede reimplementar su reproductor multimedia para reproducir en vivo.
- R desaparecidos después de crear el proyecto android desde una fuente existente
- Barra de acción android onNavigationItemSelected