2017-09-12 66 views
0

嘿家伙视频流我正在开发一个电视台现场直播的Android应用程序现在我有流引擎看起来的URL http://197.243.19.131:1935/rtv/rtv/playlist.m3u8未能加载安卓

有人能帮助我了解如何从播放视频URL中的Android,请帮助我试图写一些代码在这里:

String stream_url="http://197.243.19.131:1935/rtv/rtv/playlist.m3u8"; 
View rootView = inflater.inflate(R.layout.fragment_two, container, false); 
videoView=(VideoView)rootView.findViewById(R.id.videoStream); 
Uri uri= Uri.parse(stream_url); 
videoView.setVideoURI(uri); 
videoView.start(); 
+1

此流在外部应用上适合您吗?浏览器? VLC播放器?另外,你在测试哪个设备?所有Android操作系统和设备都不支持HLS。 – Gil

+0

yes此流在vlc网络流上运行 – realfair

回答

1

你需要多一点潜入媒体和流媒体,虽然你已经声明视图渲染你还没有处理媒体然而视频。 你需要使用Android提供的媒体播放器API来流式传输这个m3u8.it很简单,播放实时内容遵循这个代码。

public class PlayerActivity extends AppCompatActivity implements 
     SurfaceHolder.Callback, MediaPlayer.OnPreparedListener { 


    private String Downloadurl; 
    private int playminute; 
    private SurfaceView mSurfaceView; 
    private MediaPlayer mMediaPlayer; 
    private SurfaceHolder mSurfaceHolder; 
    ProgressBar p_bar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.player); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    View decorView = getWindow().getDecorView(); 
    // Hide both the navigation bar and the status bar. 
    // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as 
    // a general rule, you should design your app to hide the status bar whenever you 
    // hide the navigation bar. 
    int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_FULLSCREEN; 
    decorView.setSystemUiVisibility(uiOptions); 

    //  thumburl = getIntent().getStringExtra("thumburl"); 
    //  p_bar=(ProgressBar)findViewById(R.id.p_bar); 
    // entryid = getIntent().getStringExtra("entryid"); 
    // playminute = getIntent().getIntExtra("playminute",0); 
    //fragmenttype = getIntent().getStringExtra("fragmenttype"); 
    // Downloadurl = getIntent().getStringExtra("Downloadurl"); 
    Downloadurl = "http://197.243.19.131:1935/rtv/rtv/playlist.m3u8"; 
    // Description = getIntent().getStringExtra("Description"); 
     Log.e("kanish","Download Url inside player:"+Downloadurl); 
    mSurfaceView = (SurfaceView) findViewById(R.id.surface_view); 
    mSurfaceHolder = mSurfaceView.getHolder(); 
    mSurfaceHolder.addCallback(PlayerActivity.this); 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
    p_bar.setVisibility(View.VISIBLE); 
    mMediaPlayer = new MediaPlayer(); 
    mMediaPlayer.setDisplay(mSurfaceHolder); 
    try { 
     mMediaPlayer.setDataSource(Downloadurl); 
     mMediaPlayer.prepare(); 
     mMediaPlayer.setOnPreparedListener(PlayerActivity.this); 
     //mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
    } 

    @Override 
    public void onBackPressed() { 
    super.onBackPressed(); 

    } 

    @Override 
    public void onPrepared(MediaPlayer mp) { 
    p_bar.setVisibility(View.GONE); 
    mMediaPlayer.start(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     releaseMediaPlayer(); 
     } 

    @Override 
    protected void onDestroy() { 
    super.onDestroy(); 
    releaseMediaPlayer(); 
    } 

    private void releaseMediaPlayer() { 
     if (mMediaPlayer != null) { 
     mMediaPlayer.release(); 
     mMediaPlayer = null; 
    } 
    } 

} 

让我知道它是否有帮助。

测试电视模拟器,那么流: Streaming on emulator

+0

如果有帮助,您可以选择正确答案。它会帮助其他人登陆这个问题找到工作解决方案 – DevKRos

+0

它没有发挥说日志说,ava.io.IOException:准备失败:状态= 0x64 09-15 05:03:06.397 22633-22633/COM .dukire.dukireapp W/System.err:在android.media.MediaPlayer._prepare(Native方法) – realfair

0

你缺少OnPreparedListener

videoview.setOnPreparedListener(new OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) { 
     videoview.start(); 
    } 
}); 

按照这个tutorial