Android基础之网络视频播放器
来源:互联网 发布:win10系统优化软件 编辑:程序博客网 时间:2024/05/19 23:03
版权声明:本文为博主原创文章,未经博主允许不得转载。
开发步骤:
视频播放器
1.一般视频播放器的界面是横屏的 全屏
2.准备好视频文件(暂停)
3.视频播放器=MediaPlayer播放音频+界面
4.SurfaceView Surface表皮/皮肤 双缓冲视图
java.lang.IllegalArgumentException: The surface has been released
说人话:SurfaceView被释放了--->SurfaceView压根就没有---->SurfaceView还没初始化
因为SurfaceView是用来播放视频的 在内部需要先准备一下数据 才能去播放(需要一段时间)
5.什么时候SurfaceView准备完? holder.addCallback()
6.播放的正常情况下应该有个进度条?
7.拖动之后没有效果
8.当没人去触摸界面的时候 进度条会自动隐藏掉 当再次点击屏幕的时候 进度条会出现 然后过了一会后继续隐藏
网络视频:
1.远程服务器下的视频数据在加载的时候 可能没那么快 导致了黑屏
2.出现了黑白屏(缓冲数据)---->应该在中间设置一个加载框
MediaPlayer的操作:
1.new MediaPlayer()--->IDLE空闲状态
2.设置数据源 setDataSource()
3.准备播放的数据 prepare()
4.开始播放 start()-------------------------------->正在播放视频
如果你想播放其他的音乐 但是已经有音乐在播放了--->reset() 重置播放器 释放原有资源
stop()停止
pause()暂停--->是可以恢复的--->start()
音乐播放完成--->也是可以恢复的--->start()
* 如果是网络数据 一般调用准备播放的数据 prepareAsync()
当OnPreparedListener.onPrepared()被调用的时候 说明数据就准备完毕了
* 当资源不再使用 或者说 播放器不想要了 可以调用release()去释放资源
* 为了提供用户的体验 当播放失败的时候 提醒用户 可以调用OnErrorListener.onError();
修改主题
1.一般视频播放器的界面是横屏的 全屏
2.准备好视频文件(暂停)
3.视频播放器=MediaPlayer播放音频+界面
4.SurfaceView Surface表皮/皮肤 双缓冲视图
java.lang.IllegalArgumentException: The surface has been released
说人话:SurfaceView被释放了--->SurfaceView压根就没有---->SurfaceView还没初始化
因为SurfaceView是用来播放视频的 在内部需要先准备一下数据 才能去播放(需要一段时间)
5.什么时候SurfaceView准备完? holder.addCallback()
6.播放的正常情况下应该有个进度条?
7.拖动之后没有效果
8.当没人去触摸界面的时候 进度条会自动隐藏掉 当再次点击屏幕的时候 进度条会出现 然后过了一会后继续隐藏
网络视频:
1.远程服务器下的视频数据在加载的时候 可能没那么快 导致了黑屏
2.出现了黑白屏(缓冲数据)---->应该在中间设置一个加载框
MediaPlayer的操作:
1.new MediaPlayer()--->IDLE空闲状态
2.设置数据源 setDataSource()
3.准备播放的数据 prepare()
4.开始播放 start()-------------------------------->正在播放视频
如果你想播放其他的音乐 但是已经有音乐在播放了--->reset() 重置播放器 释放原有资源
stop()停止
pause()暂停--->是可以恢复的--->start()
音乐播放完成--->也是可以恢复的--->start()
* 如果是网络数据 一般调用准备播放的数据 prepareAsync()
当OnPreparedListener.onPrepared()被调用的时候 说明数据就准备完毕了
* 当资源不再使用 或者说 播放器不想要了 可以调用release()去释放资源
* 为了提供用户的体验 当播放失败的时候 提醒用户 可以调用OnErrorListener.onError();
public class MainActivity extends Activity implements OnSeekBarChangeListener,OnTouchListener {private MediaPlayer mMediaPlayer;private SurfaceView mSurfaceView;private SeekBar mVedioSkb;protected Timer mTimer;private Timer mVedioSkbTimer;private ProgressBar mLoadingPb;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mSurfaceView = (SurfaceView) findViewById(R.id.surfaceview);// 给SurfaceView设置一个触摸的监听器mSurfaceView.setOnTouchListener(this);mLoadingPb = (ProgressBar) findViewById(R.id.loading_pb);mVedioSkb = (SeekBar) findViewById(R.id.vedio_skb);// 给SeekBar设置一个拖动事件的监听器mVedioSkb.setOnSeekBarChangeListener(this);// 过了2秒后 进度条自动隐藏hideVedioSkbAfter2Seconds();// SurfaceHolder管理界面播放的一个控制器SurfaceHolder holder = mSurfaceView.getHolder();// 给holder设置一个SurfaceView准备数据的监听器holder.addCallback(new Callback() {@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}// mSurfaceView 准备完毕的时候调用的@Overridepublic void surfaceCreated(final SurfaceHolder holder) {try {if (mMediaPlayer == null) {mMediaPlayer = new MediaPlayer();// 设置网络视频数据Uri uri = Uri.parse("http://192.168.14.130:8080/oppo.3gp");mMediaPlayer.setDataSource(MainActivity.this, uri);mMediaPlayer.prepareAsync();// 异步加载数据的情况下 需要给mMediaPlayer设置一个异步准备数据的操作// 以避免加载框转动的时候出现卡顿mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {// 异步准备数据完毕后 该方法就会被调用@Overridepublic void onPrepared(MediaPlayer mp) {//播放之前 需要隐藏加载框mLoadingPb.setVisibility(View.GONE);mMediaPlayer.start();// 关联音频与界面mMediaPlayer.setDisplay(holder);// 设置进度条总进度mVedioSkb.setMax(mMediaPlayer.getDuration());// 创建一个定时器 设置进度条的当前进度mTimer = new Timer();mTimer.schedule(new TimerTask() {// 该方法是运行在子线程中的@Overridepublic void run() {// 在子线程中调用mVedioSkb的setProgress()// 它在内部会返回主线程操作UImVedioSkb.setProgress(mMediaPlayer.getCurrentPosition());}}, 500, 500);}});}else{mMediaPlayer.setDisplay(holder);}} catch (Exception e) {e.printStackTrace();}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format,int width, int height) {}});}private void hideVedioSkbAfter2Seconds() {mVedioSkbTimer = new Timer();mVedioSkbTimer.schedule(new TimerTask() {@Overridepublic void run() {runOnUiThread(new Runnable() {@Overridepublic void run() {mVedioSkb.setVisibility(View.GONE);}});}}, 2 * 1000);}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {// TODO Auto-generated method stub}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stub}// 在拖动完成后 首先获取SeekBar当前进度 修改视频的播放进度@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {int progress = seekBar.getProgress();mMediaPlayer.seekTo(progress);}@Overridepublic boolean onTouch(View v, MotionEvent event) {// 首先让mVedioSkb显示出来mVedioSkb.setVisibility(View.VISIBLE);// 过了2秒后再次隐藏hideVedioSkbAfter2Seconds();return false;}@Overrideprotected void onRestart() {// 恢复播放mMediaPlayer.start();super.onRestart();}@Overrideprotected void onStop() {// 暂停播放器,mMediaPlayer.pause();super.onStop();}/* * 退出销毁资源 */@Overrideprotected void onDestroy() {mMediaPlayer.stop();mMediaPlayer.release();mMediaPlayer=null;super.onDestroy();}}
修改主题
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.m520it.httpPlayer.MainActivity" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:screenOrientation="landscape" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
阅读全文
0 0
- Android基础之网络视频播放器
- android基础--视频播放器
- Android 网络视频播放
- android播放网络视频
- Android 播放网络视频
- android之视频播放器
- Android之视频播放器
- Android网络视频播放器DEMO
- android MediaPlayer SurfaceView 网络视频播放器
- Android自定义视频播放器(网络/本地)
- Android简单网络视频播放器
- 网络视频播放器
- android流媒体之云视频播放-android视频播放器SDK-视频播放不在犯困
- Android之视频播放
- android之视频播放
- android之播放视频
- android 之 视频播放
- Android 播放网络视频
- 禅道数据复原
- poj 图相关之2485Highways
- 手把手教你搭建 Selenuim 自动化环境
- 简单模拟资料管理器
- 谈谈自己对比特币脚本的理解
- Android基础之网络视频播放器
- 文章标题
- 换皮肤?系列工厂/抽象工厂(模式)的实现
- Java阶段性学习重点
- CodeChef MOU2H
- ubuntu下ftp服务器的配置
- css排版和元素分类
- opencv学习笔记(6)----鼠标操作
- 2017年四川省赛 -- G题 2017 【容斥定理】