2011-06-01 70 views
5

我的理解,安卓3.0及以上能进行播放广播流M3U8 - http://developer.android.com/guide/appendix/media-formats.html如何在Android上玩m3u8?

我把这个链接 - http://content.mobile-tv.sky.com/content/ssna/live/ssnraudio.m3u8到的MediaPlayer,但在logcat中我得到:

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. 

这是我的源代码:

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

你可以看到这个帖子:[videoview] [1] [1]:http://stackoverflow.com/questions/17697670/android-does-not-display-m3u8-format-in -videoview-only-sound – evan 2013-10-23 08:24:01

回答

3

也许你可以试试Vitamio插件,http://vov.io/vitamio/

Vitamio是适用于所有Android设备的多媒体框架。 Vitamio像Android的默认MediaPlayer一样工作,除了它包含更多强大的功能。它是完全免费的! 网络协议

以下网络协议都支持音频和视频播放:

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

在这里检查Vitamio https://github.com/yixia/VitamioBundle – AB1209 2012-12-17 12:32:08

+0

只需从Git hub中下载代码..但无法编译代码,因为videoView.setPath未定义(将ZI和Bundle添加为库项目)..请帮助我 – 2013-01-02 07:25:10

+0

Vitamio的问题:它对某些流不流畅。 – mxg 2013-02-09 12:02:06

4

下面这个链接线索: 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)

给出了最终答案:

基本上都在Android的V2.3 & V3.0,使用非标准httplive://方案, 在3.1中使用http://,但是如何在媒体框架中调用相关方法时使用一些代码解决方法。

+1

那么,你是如何解决这个问题的?只改变了http:// httplive:// ??? – 2012-06-15 15:18:50

+0

我自己并没有尝试过,但我引用的链接表明,它应该在2.3和3.0版本中使用“httplive”url方案和正常的“http”for v3.1 + – Maks 2012-06-17 03:42:40

4

这是我如何在Android的发挥.M3U8流

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

我看到很多人在播放.M3U8时遇到问题,这取决于流媒体使用的编解码器以及与设备的兼容性,例如,某些.m3u8文件仅支持1200 x800或更高屏幕的设备。

2

尝试ExoMedia,数据流是一样容易:

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

我M3U8效果很好。