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。不知道这项工作,但值得去尝试。 –
android 3.0 m3u8,在Android中播放m3u8视频相关推荐
- android7.1.2彩蛋,在Android 7.0牛轧糖中解锁秘密猫收集复活节彩蛋 | MOS86
我们已经向您展示了Android 5.0棒棒糖和6.0棉花糖中的Flappy Bird复活节彩蛋,现在我们为Android 7.0牛轧糖提供了一个新彩蛋. 如果您是Android用户,并且您的设备运行 ...
- 安卓(android)6.0高通平台下设备树专题视频讲解【全国独家+设备树视频教程】
安卓(android)6.0高通平台下设备树专题视频讲解[全国独家+设备树视频教程] 独家拥有 ...
- 链接h5代码_H5中播放的视频如何有效的进行视频加密
视频类网站.云课堂类网站.云点播类网站以及一系列培训类网站,处于对自有视频的一些保护,越来越多的开始选择H5视频加密方案.但还是有不少人对H5中做加密和早几年一样持一种怀疑态度,认为不够成熟. 其实现 ...
- android exoplayer在您的应用中播放视频,例如youtube
视频应用程序的重要性(The Importance of Video Apps) There's a constant need for video-playing apps for entertai ...
- Android 9.0 (P版本) SystemServer中的服务配置se linux权限
## 1. SystemServer 的服务定义 Android P_9.0\frameworks\base\services\java\com\android\server\SystemServer ...
- Android 9.0及以上版本中,关于多进程问题对于WebView的影响
"Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView" 以上为官方给出的说明,用白话来说就是,一个app中,如果有多个进程A.B.C,并且在A ...
- Android提高第二十一篇之MediaPlayer播放网络视频
本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 上次讲解了MediaPlayer播放网络音频,介绍了MediaPlayer关于网络音频的缓冲和进度条控制的方法 ...
- Android10.0(Q) 实现通话中播放音乐/通话背景音(答录机/魔音功能)
前言 这个功能大体意思类似机器人交互的效果,一般多应用到客服接听场景中,电话接通自动播放一段录音给 对方听,根据选项操作录音解析等完成一整个流程.这里面电话接通播放声音给对方听普通应用是做不到的, 因 ...
- android 7.0拷贝文件,Android 7.0应用间共享文件----FileProvider
应用间经常需要将自己的私有文件共享给其他的app,如某应用想要共享图库的图片用来编辑用户的头像,或者文件管理app允许用户在不同目录下复制粘贴文件等等,但为了保护私有文件的安全性,在targetSdk ...
最新文章
- python猜数游戏在程序中预设一个_一道Python简单程序结构练习题
- 图像的打开、修改、显示和保存示例(OpenCV 2.0)
- shell中$0,$?,$!等的特殊用法
- 复习(二)—— Makefile工具使用
- Yii基于角色的访问控制(非Rbac)
- java get set 注解_java技能提升,用Lombok甩掉get和set,让代码变得更简洁
- chown –r mysql:mysql,mysql部署,操作及异常处理
- python与机械教育初探_Python公开课-机械学习之手写识别
- 通过php jq ajax 提交form表单
- Xbox One:未来的客厅主角
- 在Mac端的 几种文本操作技巧
- 台式机设成仅计算机,如何把台式电脑设置成wifi热点
- 2014暑假ACM13级一批集训内容
- 信号系统一些基本概念
- ​谁是信创担当——《2021中国信创生态市场研究报告》正式发布
- jupyter的使用
- 失业的时候大家都在干什么?
- RTSP服务器:RTP传输AAC流
- 安装最新的文泉驿字体[z]
- 有没有命令让服务器cpu占用升高,怎样通过iisapp命令查找pid来解决IIS的cpu占用率过高问题...
热门文章
- Leetcode 437.路径总和III
- 【BZOJ4069】[Apio2015]巴厘岛的雕塑 按位贪心+DP
- Java语法基础,课后实践
- Unity3D面试问题
- mysql中怎样查看和删除唯一索引
- PHP-线程安全与非线程安全版本的区别
- vs 2005 多語言
- 英文版Windows2k服务器无法正常返回中文的问题
- python使用phantomJS循环for爬取多个页面时,解决内存持续变大而报错“ConnectionResetError: [WinError 10054]远程主机强迫关闭了一个现有的连接”的问题
- 虚拟机网络驱动(共享文件夹)不见了的解决方案-适用于win7~win10 and Windows Server 2008~Windows Server 2012R2