找过好过视频播放器的例子,但是都特么给一半代码,不给一半代码!

还有的

我也是醉了!把自己以前的笔记发一下吧,

虽然有缺陷:

1,横屏切换的时候,线程会死掉,不能激活...  (已经搞定了!谢谢各位dalao!)

2,停止的时候,线程释放了资源,但是还是有一张图片在

3,待机状态,还有有声音播放的。

现在还没有解决,希望公布代码后,有人提出改进建议...

暂时实现了:

1,进度条绑定播放器的进度

2,三个按钮:播放,暂停,停止

3,视频从SD卡读取,就在根目录,当前是hand.mp4(其他格式嘛?应该不支持吧....)

4、切换屏幕的时候,仍然可以播放,线程没有死掉!播放也继续进度!

这是布局:

播放:

暂停:

1、TestVedioActivity.java

package com.open_open.android_ch14_2;import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;/* 视频播放器 素材:1280x 720 ,来自sd卡Surface:原始图形缓冲区,Surface是管理显示内容的数据,储存数据的交换*/
public class TestVedioActivity extends Activity {private SurfaceView sfview;   //在Surface的基础上,显示视频private SurfaceHolder holder; //在Surface的基础上,控制尺寸大小和格式private SeekBar sb;   //进度条private MediaPlayer mp; //媒体播放器@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test_vedio);sb=(SeekBar)findViewById(R.id.sb);sfview=(SurfaceView)findViewById(R.id.sfView);holder=sfview.getHolder();sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {if(mp!=null)mp.seekTo(seekBar.getProgress());}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}});}public void doPlay(View view){if(mp!=null)return;mp=new MediaPlayer();String path=Environment.getExternalStorageDirectory().getAbsolutePath()+"/hand.mp4";try {mp.setDataSource(path);mp.setAudioStreamType(AudioManager.STREAM_MUSIC);mp.setDisplay(holder);mp.prepare();sb.setMax(mp.getDuration());mp.start();//控制进度条new Thread(new Runnable() {@Overridepublic void run() {while(mp.getCurrentPosition()<=sb.getMax()){sb.setProgress(mp.getCurrentPosition());//设置进度条当前进度SystemClock.sleep(200);}}});} catch (Exception e) {e.printStackTrace();}}public void doPause(View view){if(mp!=null&&mp.isPlaying()){mp.pause();//暂停((Button)view).setText("继续播放");}else if(mp!=null&&mp.isPlaying()==false){mp.start();//播放((Button)view).setText("暂停");}}public void doStop(View view){if(mp!=null){sb.setProgress(0);mp.stop();mp.release();mp=null;}}}

2、xml布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><SeekBarandroid:id="@+id/sb"android:layout_width="match_parent"android:layout_height="wrap_content"/><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="播放"android:onClick="doPlay"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="暂停"android:onClick="doPause"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="停止"android:onClick="doStop"/></LinearLayout><SurfaceViewandroid:id="@+id/sfView"android:layout_width="match_parent"android:layout_height="300sp"/>
</LinearLayout>

3、Android Manifest.xml 权限开启:

<! - 权限开启:增加文件卸载,允许写入SD卡,允许打开摄像头,允许录音 - >
<uses-permission android :name = “android.permission.MOUNT_UNMOUNT_FILESYSTEMS” /><uses-permission android :name = “android.permission.WRITE_EXTERNAL_STORAGE” /><uses-permission android :name = “android.permission.CAMERA” / ><uses-permission android :name = “android.permission.RECORD_AUDIO” />

TestVedioActivity :这里的四个 属性,让切换屏幕的时候线程没有死掉!

<activity android:name=".TestVedioActivity"
    android:configChanges="orientation|screenLayout|keyboardHidden|screenSize"/>

要是有所改进,我会发第二篇 改进的博客的。

【Android SurfaceView】视频播放器 简单例子相关推荐

  1. android 播放器 素材,【图片】【Android SurfaceView】视频播放器 简单例子_二次元的程序员吧_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.TestVedioActivity.Java package com.open_open.android_ch14_2; import android ...

  2. Android SurfaceView视频播放器

    视频播放器其实本质上与音乐播放器大同小异,说到底本质上就是音频源的不同,所以我就不像上一篇将音乐播放器那样详细了,只用手机内存卡中的视频做示范. 音乐播放器博客地址http://blog.csdn.n ...

  3. Android 自定义视频播放器

    由于录像之后,原先选用的腾讯VOD点播播放器显示出来竖屏都变横屏了,虽然选中了现在的腾讯VOD点播,还是把Android视频播放器了解了一番. Android自定义视频播放器有以下三种: 一.Medi ...

  4. Android FFmpeg视频播放器三 音频封装格式解码播放

    Android FFmpeg视频播放器一解封装 Android Android FFmpeg视频播放器二 视频封装格式解码播放 视频解封装之后就会得到音频流和视频流,解封状得到的数据是AVPackag ...

  5. android 音乐视频播放器(github上十二款最著名的Android播放器开源项目)

    1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...

  6. Android本地视频播放器开发 - 搜索本地视频(1)

    这一章的主要内容是搜索手机本地视频,添加到ListView列表里,每一个表项含有这个视频的缩略图,视频的播放时间,视频的标题,在搜索本地视频(1)中我们先制作搜索功能.   Video.java--视 ...

  7. 实现在Android本地视频播放器开发

    在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...

  8. Android本地视频播放器开发--视频解码

    在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...

  9. 基于android的视频播放器,基于Android的视频播放器的设计与实现-.doc

    基于Android的视频播放器的设计与实现- 基于Android的视频播放器的设计与实现 中 文 摘 要 如今,随着基于Android的智能手机的,.因此,设计一个基于android手机的多功能播放器 ...

最新文章

  1. 利用Sql Server2005发送邮件
  2. sql 临时表_原创 | SQL优化之合理使用临时表
  3. c语言样本,C语言样本教案 第二章
  4. 4月 .NET 线上 Meetup,快来报名
  5. 学计算机后悔转专业,大学转专业容易吗 会后悔吗
  6. Yarn调度器和调度算法(FIFO、容量调度器 与 公平调度器)
  7. 将中国标准时间转换成标准格式的代码
  8. ANDROID STUDIO系列教程二--基本设置与运行
  9. POJ1275Cashier Employment(查分约束系统)
  10. hdu 2069 1 5 10 25 50 这几种硬币 一共100个(母函数)
  11. OC 和 swift 小结
  12. 解决libc.so.6: version `GLIBC_2.14#39; not found问题
  13. 如何通过文献名称获取相应的DOI号?
  14. 群晖第三方套件中心地址
  15. Shell判断路径是否存在
  16. OA项目之会议排座和送审
  17. openssl生成ras证书
  18. 充电宝建议买多大的?充电宝有多大的
  19. 宽带和流量是分开的吗_带宽与宽带的区别。
  20. 一文搞定B站弹幕生成云图

热门文章

  1. spring @RequestBody注解无法接收x-www-form-urlencoded 解决方案
  2. 机器学期——贝叶斯分类实战
  3. 吃鸡是python写的吗_吃鸡手游竟是这个编程语言所写,它荣登最流行的编程语言榜首...
  4. linux递归修改文件权限
  5. 功能游戏,先“功能”还是先“游戏”?
  6. MySQL和pymysql安装 linux ubuntu
  7. java冒泡排序算法代码降序_java实现冒泡排序算法
  8. 裸辞4个月,面试了30家公司,终于找到了理想的工作,同时也刷了1万字的经验给你...
  9. asp.net mvc源码分析-Controllerl篇 ControllerDescriptor
  10. Android模拟器启动慢解决办法