2011-06-01 84 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效果很好。