我想直播视频,并且它采用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。不知道这项工作,但值得去尝试。 –

android 3.0 m3u8,在Android中播放m3u8视频相关推荐

  1. android7.1.2彩蛋,在Android 7.0牛轧糖中解锁秘密猫收集复活节彩蛋 | MOS86

    我们已经向您展示了Android 5.0棒棒糖和6.0棉花糖中的Flappy Bird复活节彩蛋,现在我们为Android 7.0牛轧糖提供了一个新彩蛋. 如果您是Android用户,并且您的设备运行 ...

  2. 安卓(android)6.0高通平台下设备树专题视频讲解【全国独家+设备树视频教程】

    安卓(android)6.0高通平台下设备树专题视频讲解[全国独家+设备树视频教程]                                                      独家拥有 ...

  3. 链接h5代码_H5中播放的视频如何有效的进行视频加密

    视频类网站.云课堂类网站.云点播类网站以及一系列培训类网站,处于对自有视频的一些保护,越来越多的开始选择H5视频加密方案.但还是有不少人对H5中做加密和早几年一样持一种怀疑态度,认为不够成熟. 其实现 ...

  4. android exoplayer在您的应用中播放视频,例如youtube

    视频应用程序的重要性(The Importance of Video Apps) There's a constant need for video-playing apps for entertai ...

  5. Android 9.0 (P版本) SystemServer中的服务配置se linux权限

    ## 1. SystemServer 的服务定义 Android P_9.0\frameworks\base\services\java\com\android\server\SystemServer ...

  6. Android 9.0及以上版本中,关于多进程问题对于WebView的影响

    "Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView" 以上为官方给出的说明,用白话来说就是,一个app中,如果有多个进程A.B.C,并且在A ...

  7. Android提高第二十一篇之MediaPlayer播放网络视频

    本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 上次讲解了MediaPlayer播放网络音频,介绍了MediaPlayer关于网络音频的缓冲和进度条控制的方法 ...

  8. Android10.0(Q) 实现通话中播放音乐/通话背景音(答录机/魔音功能)

    前言 这个功能大体意思类似机器人交互的效果,一般多应用到客服接听场景中,电话接通自动播放一段录音给 对方听,根据选项操作录音解析等完成一整个流程.这里面电话接通播放声音给对方听普通应用是做不到的, 因 ...

  9. android 7.0拷贝文件,Android 7.0应用间共享文件----FileProvider

    应用间经常需要将自己的私有文件共享给其他的app,如某应用想要共享图库的图片用来编辑用户的头像,或者文件管理app允许用户在不同目录下复制粘贴文件等等,但为了保护私有文件的安全性,在targetSdk ...

最新文章

  1. python猜数游戏在程序中预设一个_一道Python简单程序结构练习题
  2. 图像的打开、修改、显示和保存示例(OpenCV 2.0)
  3. shell中$0,$?,$!等的特殊用法
  4. 复习(二)—— Makefile工具使用
  5. Yii基于角色的访问控制(非Rbac)
  6. java get set 注解_java技能提升,用Lombok甩掉get和set,让代码变得更简洁
  7. chown –r mysql:mysql,mysql部署,操作及异常处理
  8. python与机械教育初探_Python公开课-机械学习之手写识别
  9. 通过php jq ajax 提交form表单
  10. Xbox One:未来的客厅主角
  11. 在Mac端的 几种文本操作技巧
  12. 台式机设成仅计算机,如何把台式电脑设置成wifi热点
  13. 2014暑假ACM13级一批集训内容
  14. 信号系统一些基本概念
  15. ​谁是信创担当——《2021中国信创生态市场研究报告》正式发布
  16. jupyter的使用
  17. 失业的时候大家都在干什么?
  18. RTSP服务器:RTP传输AAC流
  19. 安装最新的文泉驿字体[z]
  20. 有没有命令让服务器cpu占用升高,怎样通过iisapp命令查找pid来解决IIS的cpu占用率过高问题...

热门文章

  1. Leetcode 437.路径总和III
  2. 【BZOJ4069】[Apio2015]巴厘岛的雕塑 按位贪心+DP
  3. Java语法基础,课后实践
  4. Unity3D面试问题
  5. mysql中怎样查看和删除唯一索引
  6. PHP-线程安全与非线程安全版本的区别
  7. vs 2005 多語言
  8. 英文版Windows2k服务器无法正常返回中文的问题
  9. python使用phantomJS循环for爬取多个页面时,解决内存持续变大而报错“ConnectionResetError: [WinError 10054]远程主机强迫关闭了一个现有的连接”的问题
  10. 虚拟机网络驱动(共享文件夹)不见了的解决方案-适用于win7~win10 and Windows Server 2008~Windows Server 2012R2