android 3.0 m3u8,在Android中播放m3u8视频

我想直播视频,并且它采用m3u8格式。所以,我想下面的代码在Android中播放m3u8视频

public class StreamingPlayer extends Activity implements

OnBufferingUpdateListener, OnCompletionListener,

OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback{

private static final String TAG = StreamingPlayer.class.getSimpleName();

private int mVideoWidth;

private int mVideoHeight;

private MediaPlayer mMediaPlayer;

private SurfaceView mPreview;

private SurfaceHolder holder;

private String path;

private boolean mIsVideoSizeKnown = false;

private boolean mIsVideoReadyToBePlayed = false;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.mediaplayer_2);

mPreview = (SurfaceView) findViewById(R.id.surface);

holder = mPreview.getHolder();

holder.addCallback(this);

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

private void playVideo() {

doCleanUp();

try {

/*

* TODO: Set path variable to progressive streamable mp4 or

* 3gpp format URL. Http protocol should be used.

* Mediaplayer can only play "progressive streamable

* contents" which basically means: 1. the movie atom has to

* precede all the media data atoms. 2. The clip has to be

* reasonably interleaved.

*

*/

path = "httplive://xboodangx.api.channel.livestream.com/3.0/playlist.m3u8";

if (path == "") {

// Tell the user to provide a media file URL.

Toast

.makeText(

this,

"Please edit MediaPlayerDemo_Video Activity,"

+ " and set the path variable to your media file URL.",

Toast.LENGTH_LONG).show();

}

Log.e("PATH", "Path = " + path);

// Create a new media player and set the listeners

mMediaPlayer = new MediaPlayer();

mMediaPlayer.setDataSource(path);

mMediaPlayer.setDisplay(holder);

mMediaPlayer.setOnBufferingUpdateListener(this);

mMediaPlayer.setOnPreparedListener(this);

mMediaPlayer.prepare();

mMediaPlayer.setOnCompletionListener(this);

mMediaPlayer.setOnVideoSizeChangedListener(this);

mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

} catch (Exception e) {

Log.e(TAG, "error: " + e.getMessage(), e);

}

}

public void onBufferingUpdate(MediaPlayer arg0, int percent) {

Log.d(TAG, "onBufferingUpdate percent:" + percent);

}

public void onCompletion(MediaPlayer arg0) {

Log.d(TAG, "onCompletion called");

}

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {

Log.v(TAG, "onVideoSizeChanged called");

if (width == 0 || height == 0) {

Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")");

return;

}

mIsVideoSizeKnown = true;

mVideoWidth = width;

mVideoHeight = height;

if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {

startVideoPlayback();

}

}

public void onPrepared(MediaPlayer mediaplayer) {

Log.d(TAG, "onPrepared called");

mIsVideoReadyToBePlayed = true;

if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {

startVideoPlayback();

}

}

public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {

Log.d(TAG, "surfaceChanged called");

}

public void surfaceDestroyed(SurfaceHolder surfaceholder) {

Log.d(TAG, "surfaceDestroyed called");

}

public void surfaceCreated(SurfaceHolder holder) {

Log.d(TAG, "surfaceCreated called");

playVideo();

}

@Override

protected void onPause() {

super.onPause();

releaseMediaPlayer();

doCleanUp();

}

@Override

protected void onDestroy() {

super.onDestroy();

releaseMediaPlayer();

doCleanUp();

}

private void releaseMediaPlayer() {

if (mMediaPlayer != null) {

mMediaPlayer.release();

mMediaPlayer = null;

}

}

private void doCleanUp() {

mVideoWidth = 0;

mVideoHeight = 0;

mIsVideoReadyToBePlayed = false;

mIsVideoSizeKnown = false;

}

private void startVideoPlayback() {

Log.v(TAG, "startVideoPlayback");

holder.setFixedSize(mVideoWidth, mVideoHeight);

mMediaPlayer.start();

}

}

在logcat的它显示onBufferingUpdate percent:100但我不能看视频。

音频正在工作,但突然它被击中。

在上面的链接显示视频无法播放的消息。

+0

您是否试过在真实设备上进行测试?有时模拟器在处理HTTP直播流时很糟糕。 –

+0

@yorkw感谢您的回复。是我在真实设备中测试过,而不是仿真器。 –

+0

URI h t t p://myvideo.m3u8对我来说很奇怪,你在哪里主持媒体?远程服务器?如果您可以访问服务器端的广播代码,请尝试将其更改为更加稳定的URL,例如hdo t://domain-name/service-name/myvideo.m3u8。不知道这项工作,但值得去尝试。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值