2011-06-01 12 views
5

Según entendí, Android 3.0 y superior son capaces de Radio juego de streaming M3U8 - http://developer.android.com/guide/appendix/media-formats.html¿Cómo se juega m3u8 en Android?

pongo este enlace - http://content.mobile-tv.sky.com/content/ssna/live/ssnraudio.m3u8 en MediaPlayer pero en LogCat me sale:

06-01 09:04:44.287: INFO/LiveSession(33): onConnect 'http://content.mobile-tv.sky.com/content/ssna/live/ssnraudio.m3u8' 
06-01 09:04:44.287: INFO/NuHTTPDataSource(33): connect to content.mobile-tv.sky.com:80/content/ssna/live/ssnraudio.m3u8 @0 
06-01 09:04:44.747: INFO/NuHTTPDataSource(33): connect to content.mobile-tv.sky.com:80/content/ssna/live/ssnraudio.m3u8 @0 
06-01 09:04:45.019: INFO/NuHTTPDataSource(33): connect to content.mobile-tv.sky.com:80/content/ssna/live/ssnraudio/ssnr_052311_071632_78731.aac @0 
**06-01 09:04:45.817: ERROR/LiveSession(33): This doesn't look like a transport stream...** 
06-01 09:04:45.967: INFO/HTTPLiveSource(33): input data EOS reached. 

Este es mi código fuente:

mp = new MediaPlayer();   
    start.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub    
      try { 

       mp.setDataSource("http://content.mobile-tv.sky.com/content/ssna/live/ssnraudio.m3u8"); 
       mp.prepare(); 
       mp.start(); 

      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 

    stop.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      try { 

       mp.stop(); 
       mp.reset(); 

      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 
+0

se puede ver este mensaje: [VideoView] [1] [1]: http://stackoverflow.com/questions/17697670/android-does-not-display-m3u8-format-in -videoview-only-sound – evan

Respuesta

3

Tal vez usted puede probar el plugin Vitamio, http://vov.io/vitamio/

Vitamio es un marco multimedia para todos los dispositivos Android. Vitamio funciona como el MediaPlayer predeterminado de Android, excepto que incluye características mucho más potentes. ¡Y es absolutamente gratis! protocolos de red

Los siguientes protocolos de red son compatibles para audio y vídeo de reproducción:

MMS 
RTSP (RTP, SDP) 
HTTP progressive streaming 
HTTP live streaming (M3U8), for Android 2.1+ 
+1

Compruebe aquí para Vitamio https://github.com/yixia/VitamioBundle – AB1209

+0

Simplemente descargue el código de Git hub .. pero no puede compilar el código ya que videoView.setPath no está definido (se agregó ZI y Bundle como biblioteca proyecto) .. pls help me –

+0

El problema con Vitamio: no es fácil para algunas transmisiones. – mxg

4

Siguiendo este enlace ruta: http://code.google.com/p/android/issues/detail?id=14646

->

http://code.google.com/p/android/issues/detail?id=16884

->

http://code.google.com/p/android/issues/detail?id=17118

(! ARGGGGH)

da la respuesta en el final:

básicamente en Android v2.3 & v3.0, utilice el httplive no estándar: // esquema, en 3.1 use http: // pero con alguna solución de código en cómo llama a los métodos relevantes en el marco de medios.

+1

Entonces, ¿cómo resolviste esto? acabo de cambiar el http: // por httplive: // ??? –

+0

No lo he probado, pero los enlaces a los que hice referencia sugieren que debería funcionar en 2.3 y 3.0 usando el esquema de URL "httplive" y el "http" normal para v3.1 + – Maks

4

Este es mi ejemplo de cómo jugar .M3U8 Transmisión en Android

activity_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="wrap_content" 
    android:orientation="vertical" > 

    <VideoView 
     android:id="@+id/myVideoView" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

Main.java

package com.grexample.ooyalalive; 

import java.net.URL; 
import android.app.Activity; 
import android.net.Uri; 
import android.os.Bundle; 
import android.widget.MediaController; 
import android.widget.VideoView; 

public class Main extends Activity { 

    private String urlStream; 
    private VideoView myVideoView; 
    private URL url; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_vv);//*************** 
      myVideoView = (VideoView)this.findViewById(R.id.myVideoView); 
      MediaController mc = new MediaController(this); 
      myVideoView.setMediaController(mc);   
      urlStream = "http://jorgesys.net/i/[email protected]/master.m3u8"; 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        myVideoView.setVideoURI(Uri.parse(urlStream)); 
       } 
      }); 
    } 
} 

He visto a mucha gente tener problemas para jugar .M3U8, depende de los códecs utilizados para la transmisión y la compatibilidad con el dispositivo, por ejemplo, algunos de mis archivos .m3u8 solo son compatibles con dispositivos con pantallas de 1200 x 800 o más.

2

Trate ExoMedia, el streaming es tan fácil como:

emVideoView.setVideoURI(Uri.parse("https://archive.org/download/Popeye_forPresident/Popeye_forPresident_512kb.mp4")); 

que funciona bien con M3U8.

Cuestiones relacionadas