如何解决如何在Android上播放m3u8?
| 据我了解,Android 3.0及更高版本可以播放电台流m3u8-http://developer.android.com/guide/appendix/media-formats.html 我把这个链接-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();
}
}
});
}
解决方法
遵循此链接跟踪:
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://,但是在如何调用媒体框架中的相关方法方面有一些代码变通办法。
, 这是我如何在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/irina_delivery@117489/master.m3u8\";
runOnUiThread(new Runnable() {
@Override
public void run() {
myVideoView.setVideoURI(Uri.parse(urlStream));
}
});
}
}
我已经看到很多人在播放.M3U8时遇到问题,这取决于用于流传输的编解码器以及与设备的兼容性,例如,某些.m3u8文件仅在屏幕1200 x800及更高的设备中受支持。
, 尝试使用ExoMedia,流式传输非常简单:
emVideoView.setVideoURI(Uri.parse(\"https://archive.org/download/Popeye_forPresident/Popeye_forPresident_512kb.mp4\"));
我与m3u8配合良好。
, 也许您可以尝试Vitamio插件,http://vov.io/vitamio/
Vitamio是适用于所有Android设备的多媒体框架。 Vitamio的工作方式类似于Android的默认MediaPlayer,但是Vitamio包括更强大的功能。而且它是完全免费的!
网络协议
支持以下网络协议进行音频和视频播放:
MMS
RTSP (RTP,SDP)
HTTP progressive streaming
HTTP live streaming (M3U8),for Android 2.1+
, 您可以使用FFmpegMediaPlayer:
https://github.com/wseemann/FFmpegMediaPlayer
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。