我有一个MediaPlayerActivity,代码如下:
此代码基本上尝试从http url获取视频流并加载它但由于某种原因它不断崩溃.
public class MediaPlayerActivity extends Activity { @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentVIEw(R.layout.vIDeo_player); SurfaceVIEw v = (SurfaceVIEw) findVIEwByID(R.ID.surface_vIDeo); SurfaceHolder holder = v.getHolder(); holder.setFixedSize(400,300); MediaPlayer mp = MediaPlayer.create(this, Uri.parse("http://stream-url.com/playList.m3u8")); mp.setdisplay(holder); //mp.setAudioStreamType(2); try { //mp.prepare(); mp.start(); } catch (IllegalStateException e) { // Todo auto-generated catch block e.printstacktrace(); } }}
vIDeo_player.xml:
<?xml version="1.0" enCoding="utf-8"?> <linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:orIEntation="vertical" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" > <SurfaceVIEw androID:ID="@+ID/surface_vIDeo" androID:layout_wIDth="250px" androID:layout_height="250px"> </SurfaceVIEw> <linearLayout androID:orIEntation="horizontal" androID:layout_height="wrap_content" androID:layout_wIDth="fill_parent" androID:padding="10dip" > </linearLayout> </linearLayout>
当我使用以下代码进行此活动时,它会崩溃:
Intent myIntent = new Intent(HomeActivity.this, MediaPlayerActivity.class); HomeActivity.this.startActivity(myIntent);
我究竟做错了什么?
解决方法:
没有日志,有两个建议:
>尝试实现SurfaceHolder.Callback.surfaceCreated().
>尝试使用接受SurfaceHolder的MediaPlayer.create()
细节(1)
调用start()时,可能还没有创建表面.只有在创建表面后才应使用MediaPlayer.setdisplay()和MediaPlayer.start().为此,您应该添加overrIDeSurfaceHolder.Callback.surfaceCreated()`.例如,您的代码可能如下所示.
public class MediaPlayerActivity extends Activity implements SurfaceHolder.Callback { MediaPlayer mp; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentVIEw(R.layout.vIDeo_player); SurfaceVIEw v = (SurfaceVIEw) findVIEwByID(R.ID.surface_vIDeo); SurfaceHolder holder = v.getHolder(); holder.setFixedSize(400,300); holder.addCallback(this). mp = MediaPlayer.create(this, Uri.parse("http://stream-url.com/playList.m3u8")); @OverrIDe public voID surfaceCreated(SurfaceHolder holder) { mp.setdisplay(holder); try { mp.start(); } catch (IllegalStateException e) { e.printstacktrace(); } }}
细节(2)
似乎有其他MediaPlayer.create()接受SurfaceHolder作为参数之一 – 您可以尝试它:http://developer.androID.com/reference/androID/media/MediaPlayer.HTML#create(androID.content. Context,androID.net.Uri,androID.vIEw.SurfaceHolder)
总结以上是内存溢出为你收集整理的Android SDK:媒体播放器 – 从HTTP网址加载视频流全部内容,希望文章能够帮你解决Android SDK:媒体播放器 – 从HTTP网址加载视频流所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)