我正在尝试开发电视流媒体(HLS)应用程序。使用下面的代码我在2.3.3,3.0和4.0.1版Android设备上测试了流,但遇到了几个问题。在Android 2.3.3流上播放> 1分钟然后停止。在Android 3.0上它运行良好,在Android 4.0.3上显示消息'此文件无法播放'(如果我没记错的话)。所以我的问题是:如何在没有流播放问题的情况下在这些设备的以太网上播放流?或者我在哪里可以阅读更多关于这些问题的解决方案(尝试搜索但没有发现任何有用的东西)?
Main_Activity中的代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
VideoView player = (VideoView)findViewById(R.id.player);
String httpLiveUrl = "http://aj.lsops.net/live/aljazeer_en_high.sdp/playlist.m3u8";
//for Android 2.3.3 I used httplive:// prefix
player.setVideoURI(Uri.parse(httpLiveUrl));
player.setMediaController(new MediaController(this));
player.requestFocus();
player.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
xml中的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<VideoView
android:id="@+id/player"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />
</RelativeLayout>
对不起,如果我的英语很差。谢谢。
这不会解决所有流媒体问题。但是你应该做的一件事是在MediaPlayer准备就绪时调用player.start()
。 this SO post的选定答案会在MediaPlayer对象上设置一个侦听器,以便在调用start()
时运行onPrepared(MediaPlayer mp)
。
将此代码插入AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />