安卓视频播放器
该项目是自己学习阶段研发的,如果有什么不足之处,希望还能共同探,按钮和背景图片,还需要自己找,下面上代码
欢迎动画,WelcomeActivity.Java文件
package https://www.doczj.com/doc/8017800767.html,.iotek;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class WelcomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(https://www.doczj.com/doc/8017800767.html,youtParams.FLAG_FULLSCREEN,
https://www.doczj.com/doc/8017800767.html,youtParams.FLAG_FULLSCREEN);
setContentView(https://www.doczj.com/doc/8017800767.html,yout.welcome);
new MyWelcome().start();
}
class MyWelcome extends Thread{
@Override
public void run() {
try {
sleep(3000);
Intent intent=new Intent(WelcomeActivity.this,VideoPlayerActivity.class);
startActivity(intent);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
protected void onStop() {
finish();
super.onStop();
}
}
欢迎动画配置文件welcome.xml
android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/welcome" android:orientation="vertical" >
三秒后进行跳转,进入界面,利用TabHost,VideoPlayerActivity代码如下
package https://www.doczj.com/doc/8017800767.html,.iotek;
import https://www.doczj.com/doc/8017800767.html,.adapter.OverwriteSimpleCursorAdapter;
import https://www.doczj.com/doc/8017800767.html,.adapter.OverwriterSimAdapter;
import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import https://www.doczj.com/doc/8017800767.html,NotFoundException;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabSpec;
public class VideoPlayerActivity extends TabActivity {
/** Called when the activity is first created. */
static boolean flag;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(https://www.doczj.com/doc/8017800767.html,youtParams.FLAG_FULLSCREEN,
https://www.doczj.com/doc/8017800767.html,youtParams.FLAG_FULLSCREEN);
setContentView(https://www.doczj.com/doc/8017800767.html,yout.main);
try {
//获取ShareActivity上下文
VideoList.context = createPackageContext("https://www.doczj.com/doc/8017800767.html,.iotek", Context.CONTEXT_IGNORE_SECURITY);
VideoList.share = VideoList.context.getSharedPreferences("setupadapter", VideoList.context.MODE_WORLD_READABLE);
VideoList.editor = VideoList.share.edit();
} catch (NameNotFoundException e) {
e.printStackTrace();
}
if (VideoList.share.getString("setupadapter", "off").equals("on")) {
flag = true;
}
if (VideoList.share.getString("setupadapter", "off").equals("off")) {
flag = false;
}
VideoList.helper=new Dbhelper(this, "/mnt/sdcard/videoinfo.db", null, 1);
//设置为可读
// VideoList.db=VideoList.helper.getReadableDatabase();
TabHost tabHost = getTabHost();
//创建选项卡
TabSpec localVideo=tabHost.newTabSpec("localvideo");
TabSpec videoList=tabHost.newTabSpec("videoList");
//设置选项卡名称
localVideo.setIndicator("加载本地文件");
videoList.setIndicator("播放列表");
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
}
});
Intent intentLocal = new Intent(getApplicationContext(),ShowList.class);
Intent intentList = new Intent(getApplicationContext(),VideoList.class);
localVideo.setContent(intentLocal);
videoList.setContent(intentList);
// 添加选项卡
tabHost.addTab(localVideo);
tabHost.addTab(videoList);
//设置监听
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
boolean f = tabId.equals("videoList");
boolean b = tabId.equals("localvideo");
if (f) {
if (flag) {
VideoList.db=VideoList.helper.getReadableDatabase();
String sql="select * from videoinfo";
VideoList.cursor=VideoList.db.rawQuery(sql, null);
VideoList.adapter=new
OverwriteSimpleCursorAdapter(getApplicationContext(), https://www.doczj.com/doc/8017800767.html,yout.show, VideoList.cursor,
new String[]{"path","videoname"},
new int[]{R.id.picture,R.id.videoname});
VideoList.videoList.setAdapter(VideoList.adapter);
}if(!flag){
VideoList.db=VideoList.helper.getReadableDatabase();
String sql="select * from videoinfo";
VideoList.cursor=VideoList.db.rawQuery(sql, null);
VideoList.adapter=new SimpleCursorAdapter(getApplicationContext(), https://www.doczj.com/doc/8017800767.html,yout.show, VideoList.cursor,
new String[]{"path","videoname"},
new int[]{R.id.picture,R.id.videoname});
VideoList.videoList.setAdapter(VideoList.adapter);
}
}
if (b) {
if (flag) {
OverwriterSimAdapter adapter = new OverwriterSimAdapter(
getApplicationContext(), ShowList.listItems, https://www.doczj.com/doc/8017800767.html,yout.filelist,
new String[] { "filename", "icon", "modify" }, new int[] {
R.id.file_name, R.id.icon, R.id.file_modify });
ShowList.filesList.setAdapter(adapter);
}if(!flag){
SimpleAdapter adapter = new SimpleAdapter(
getApplicationContext(), ShowList.listItems, https://www.doczj.com/doc/8017800767.html,yout.filelist,
new String[] { "filename", "icon", "modify" }, new int[] {
R.id.file_name, R.id.icon, R.id.file_modify });
ShowList.filesList.setAdapter(adapter);
}
}
}
});
}
@Override
protected void onDestroy() {
// VideoList.db.close();
// VideoList.cursor.close();
super.onDestroy();
}
}
配置文件main.xml
android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp"> android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#00000000" /> android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp" />
遍历内存卡ShowList代码
package https://www.doczj.com/doc/8017800767.html,.iotek;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import https://www.doczj.com/doc/8017800767.html,.adapter.OverwriterSimAdapter;
import android.app.Activity;
import android.content.Context;
import https://www.doczj.com/doc/8017800767.html,NotFoundException;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.T extView;
import android.widget.Toast;
public class ShowList extends Activity {
private TextView filepath;
static ListView filesList;
private Button backButton;
LinearLayout localBack;
// 记录当前的父文件夹
File floderParent;
int i ;
// 记录当前路径下的所有文件夹的文件数组
File[] dirFiles;
static List
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(https://www.doczj.com/doc/8017800767.html,yout.showlist);
localBack = (LinearLayout)findViewById(R.id.localback);
localBack.setBackgroundResource(R.drawable.bleach3);
VideoList.helper=new Dbhelper(this, "/mnt/sdcard/videoinfo.db", null, 1);
//设置为可读
// VideoList.db=VideoList.helper.getReadableDatabase();
filesList = (ListView) this.findViewById(R.id.filesList);
filepath = (TextView) this.findViewById(R.id.filepath);
backButton = (Button) this.findViewById(R.id.backButton);
VideoList.helper=new Dbhelper(this, "/mnt/sdcard/videoinfo.db", null, 1);
// VideoList.db=VideoList.helper.getReadableDatabase();
try {
//获取ShareActivity上下文
VideoList.context = createPackageContext("https://www.doczj.com/doc/8017800767.html,.iotek", Context.CONTEXT_IGNORE_SECURITY);
VideoList.share = VideoList.context.getSharedPreferences("setupadapter", VideoList.context.MODE_WORLD_READABLE);
VideoList.editor = VideoList.share.edit();
} catch (NameNotFoundException e) {
e.printStackTrace();
}
//对背景进行判断
if (VideoList.share.getString("picture", "卡通").equals("卡通")) {
localBack.setBackgroundResource(R.drawable.haizei);
}
if (VideoList.share.getString("picture", "卡通").equals("风景")) {
localBack.setBackgroundResource(R.drawable.suround2);
}
if (VideoList.share.getString("picture", "卡通").equals("明星")) {
localBack.setBackgroundResource(R.drawable.xuanya);
}
// 获取系统的SDCard的目录
File root = new File("/mnt/sdcard/");
// 如果SD卡存在的话
if (root.exists()) {
floderParent = root;
dirFiles = root.listFiles();
// 使用当前目录下的全部文件、文件夹来填充ListView
inflateListView(dirFiles);
}
filesList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> adapterView, View view,
int position, long id) {
// 如果用户单击了文件,直接返回,不做任何处理
if (dirFiles[position].isFile()) {
i = position;
if
(dirFiles[position].getPath().endsWith(".3gp")||dirFiles[position].getPath().endsWith(".mp4")
||dirFiles[position].getPath().endsWith(".mp3")||dirFiles[position].getPath().endsWith(".rm vb")) {
/* if
(currentFiles[position].getPath().equals(VideoList.cursor.getString(1))) {
Toast.makeText(getApplicationContext(), "你妹啊,路径名相同了", 1000).show();
}else{*/
VideoList.db=VideoList.helper.getReadableDatabase();
String sqlSelect = "select * from videoinfo where path=?";
VideoList.cursor = VideoList.db.rawQuery(sqlSelect, new String[]{dirFiles[position].getPath()});
if(!VideoList.cursor.moveToNext()){
// 放入数据库
String sql="insert into videoinfo values(null,?,?)";
VideoList.db.execSQL(sql,new
String[]{dirFiles[position].getPath(),dirFiles[position].getName()});
Toast.makeText(getApplicationContext(), "文件加载成功", 1000).show();
}else{
Toast.makeText(getApplicationContext(), "路径名相同了", 1000).show();
}
// }
}
return;
// 也可自定义扩展打开这个文件等
}
// 获取用户点击的文件夹下的所有文件
File[] tem = dirFiles[position].listFiles();
if (tem == null || tem.length == 0) {
Toast.makeText(ShowList.this,
"空文件夹", Toast.LENGTH_LONG).show();
} else {
// 获取用户单击的列表项对应的文件夹,设为当前的父文件夹
floderParent = dirFiles[position];
// 保存当前的父文件夹内的全部文件和文件夹
dirFiles = tem;
// 再次更新ListView
inflateListView(dirFiles);
}
}
});
// 获取上一级目录
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (!floderParent.getCanonicalPath().equals("/mnt/sdcard")) {
// 获取上一级目录
floderParent = floderParent.getParentFile();
// 列出当前目录下的所有文件
dirFiles = floderParent.listFiles();
// 再次更新ListView
inflateListView(dirFiles);
}
} catch (Exception e) {
// TODO: handle exception
}
}
});
}
/**
* 根据文件夹填充ListView
*
* @param files
*/
private void inflateListView(File[] files) {
listItems = new ArrayList
for (int i = 0; i < files.length; i++) {
Map
if (files[i].isDirectory()) {
// 如果是文件夹就显示的图片为文件夹的图片
listItem.put("icon", R.drawable.dir);
}
if(files[i].isFile()){
//判断是否是视频
if(files[i].getPath().endsWith(".3gp")||files[i].getPath().endsWith(".mp4")||files[i].getPath(). endsWith(".mp3")){
if(files[i].getPath().endsWith(".3gp")||files[i].getPath().endsWith(".mp4")){
if (VideoPlayerActivity.flag) {
listItem.put("icon", files[i].getAbsolutePath());
listItem.put("modify"
,size(files[i].length())+"");
}if (!VideoPlayerActivity.flag) {
listItem.put("icon", R.drawable.avi);
listItem.put("modify"
,size(files[i].length())+"");
}
}
}else if(files[i].getPath().endsWith(".mp3")){
listItem.put("icon", R.drawable.mp3);
}else{
listItem.put("icon", R.drawable.els);
}
}
// 添加一个文件名称
listItem.put("filename", files[i].getName());
listItems.add(listItem);
}
// 判断是否使用缩略图
if (VideoPlayerActivity.flag) {
OverwriterSimAdapter adapter = new OverwriterSimAdapter(
ShowList.this, listItems, https://www.doczj.com/doc/8017800767.html,yout.filelist,
new String[] { "filename", "icon", "modify" }, new int[] {
R.id.file_name, R.id.icon, R.id.file_modify });
filesList.setAdapter(adapter);
}
if(!VideoPlayerActivity.flag){
SimpleAdapter adapter = new SimpleAdapter(
ShowList.this, listItems, https://www.doczj.com/doc/8017800767.html,yout.filelist,
new String[] { "filename", "icon", "modify" }, new int[] {
R.id.file_name, R.id.icon, R.id.file_modify });
filesList.setAdapter(adapter);
}
try {
filepath.setText("当前路径为:" + floderParent.getCanonicalPath());
//tvpath.setText("文件如下:");
} catch (Exception e) {
e.printStackTrace();
}
}
public String size(long size){
long mysize;
if(size<1024*1024){
mysize = size/1024;
return mysize+"Kb";
}else{
mysize = size/(1024*1024);
return mysize+"Mb";
}
}
@Override
protected void onRestart() {
if (VideoList.share.getString("picture", "卡通").equals("卡通")) { localBack.setBackgroundResource(R.drawable.haizei);
}
if (VideoList.share.getString("picture", "卡通").equals("风景")) { localBack.setBackgroundResource(R.drawable.suround2);
}
if (VideoList.share.getString("picture", "卡通").equals("明星")) { localBack.setBackgroundResource(R.drawable.xuanya);
}
super.onRestart();
}
@Override
protected void onDestroy() {
// VideoList.db.close();
// VideoList.cursor.close();
super.onDestroy();
}
@Override
protected void onStop() {
super.onStop();
}
}
配置文件showlist.xml
android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/localback" > android:id="@+id/filepath" android:layout_gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="20dip" /> android:layout_width="wrap_content" android:layout_height="wrap_content" >
核心内容,MediaPlayer和SurfaceView实现比方视频,PlayVideo代码package https://www.doczj.com/doc/8017800767.html,.iotek;
import java.io.IOException;
import java.util.Random;
import android.app.Activity;
import android.content.Context;
import https://www.doczj.com/doc/8017800767.html,NotFoundException; import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.view.GestureDetector.OnGestureListener;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import https://www.doczj.com/doc/8017800767.html,youtParams;
import android.widget.PopupWindow;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.T extView;
import android.widget.Toast;
public class PlayVideo extends Activity implements
OnGestureListener,
OnClickListener,// 监听
OnBufferingUpdateListener,// 当网络缓冲数据流变化的时候唤起的播放事件
OnCompletionListener,// 当媒体资源在播放的时候到达终点时唤起的播放事件
MediaPlayer.OnPreparedListener,
SurfaceHolder.Callback// 回调函数
{
// 视频高和宽
int videoWidth;
int videoHeight;
// 按钮
ImageButton play;
//定义快进按钮
ImageButton fastPlay;
//定义快退按钮
ImageButton fastBack;
// 控制栏
LinearLayout layout_control;
LinearLayout layout_prograss;
LinearLayout videoBack;
// 用来播放媒体
MediaPlayer mediaPlayer;
// 显示媒体
SurfaceView surView;
// 用来控制SurfaceView
SurfaceHolder surHolder;
// 路径
String path;
// 是否是播放状态
boolean boTing = true;
//获取播放的位置
int num;
//点击屏幕次数
int count;
//第一次点击
int firClick;
//第二次点击
int secClick;
//通过flag判断是否全屏boolean flag;
//播放进度条
SeekBar seekbar;
//显示时间组建
TextView showTime;
//播放文件的时间
int minute;
int second;
//进度条进度
int progress;
//线程控制
MyThread mt;
//声音控制
SeekBar sound;
//声音进度
int soundId;
//显示音量
TextView showSound;
//接取拖动进度条
int videoLength;
boolean f = true;
//播放尺寸
//按钮隐藏时间
int hint = 5000;
//用于接取点击ListView位置int position;
//声称随机数
Random random;
//通过buttonFlag判断按钮背景boolean buttonFlag = true;
//显示视频总时间
TextView allTime;
TextView distant; PopupWindow popuWindow;
View view;
boolean popFlag ;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(https://www.doczj.com/doc/8017800767.html,youtParams.FLAG_FULLSCREEN,
https://www.doczj.com/doc/8017800767.html,youtParams.FLAG_FULLSCREEN);
setContentView(https://www.doczj.com/doc/8017800767.html,yout.video);
// 产生对象
view = this.getLayoutInflater().inflate(https://www.doczj.com/doc/8017800767.html,yout.popuwindow, null);
//得到布局的ID
videoBack = (LinearLayout)view.findViewById(R.id.videoback);
// 产生对象
play = (ImageButton) view.findViewById(R.id.video_bu_bofang);
layout_control = (LinearLayout)findV iewById(https://www.doczj.com/doc/8017800767.html,yout_control);
layout_prograss= (LinearLayout)findViewById(https://www.doczj.com/doc/8017800767.html,yout_prograss);
seekbar = (SeekBar)view.findViewById(R.id.seekbar);
showTime = (TextView)view.findViewById(R.id.showtime);
fastPlay = (ImageButton)view.findViewById(R.id.fastplay);
fastBack = (ImageButton)view.findViewById(R.id.fastback);
sound = (SeekBar)view.findViewById(R.id.sound);
showSound = (TextView)view.findViewById(R.id.showsound);
surView = (SurfaceView) findViewById(R.id.surfaceview_1);
allTime = (TextView)view.findViewById(R.id.alltime);
distant = (TextView)findViewById(R.id.distant);
distant.setHeight(0);
surHolder = surView.getHolder();
popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
// 设置回调函数
surHolder.addCallback(this);
// 设置风格
surHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//bu_boFang.setVisibility(View.INVISIBLE);
// 设置按键监听
play.setOnClickListener(this);
//快进监听
fastPlay.setOnClickListener(this);
//快退按钮监听
fastBack.setOnClickListener(this);
//new随机数对象
random = new Random();
//接取到播放列表中点击的位置
position = VideoList.position;
try {
//获取ShareActivity上下文
VideoList.context = createPackageContext("https://www.doczj.com/doc/8017800767.html,.iotek", Context.CONTEXT_IGNORE_SECURITY);
VideoList.share = VideoList.context.getSharedPreferences("setupadapter", VideoList.context.MODE_WORLD_READABLE);
VideoList.editor = VideoList.share.edit();
} catch (NameNotFoundException e) {
e.printStackTrace();
}
//对读取的信息进行判断
if (VideoList.share.getString("hinttime", "5秒").equals("5秒")) {
hint = 5000;
}
if (VideoList.share.getString("hinttime", "5秒").equals("10秒")) {
hint = 10000;
}
if (VideoList.share.getString("hinttime", "5秒").equals("15秒")) {
hint = 15000;
}
//设置全屏播放
surView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
// handler.sendEmptyMessageAtTime(0x11, 3000);
if(MotionEvent.ACTION_DOWN == event.getAction()){
count++;
if(count == 1){
new countClear().start();
firClick = (int) System.currentTimeMillis();
if (!popFlag) {
// // // popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
popuWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);
popFlag = true;
handler.removeMessages(0x11);
handler.sendEmptyMessageDelayed(0x11, hint);
}
//设置layout显示
// if (!flag) {
/* layout_control.setVisibility(View.VISIBLE);
layout_prograss.setVisibility(View.VISIBLE);*/
//点击surfaceView延时3S发送信息
/* handler.removeMessages(0x11);
handler.sendEmptyMessageDelayed(0x11, hint);*/
// }
} else if (count == 2){
secClick = (int) System.currentTimeMillis();
if(secClick - firClick < 1000){
flag = !flag;
count = 0;
}
if(flag){
distant.setHeight(0);
surView.setLayoutParams(new
https://www.doczj.com/doc/8017800767.html,youtParams(LayoutParams.MATCH_PARENT, LayoutParams.MA TCH_PARENT));
surHolder.setFixedSize(480, 760);
if (!popFlag) {
// popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
popuWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);
popFlag = true;
handler.removeMessages(0x11);
handler.sendEmptyMessageDelayed(0x11, hint);
}
// 开始播放
// mePlayer.start();
}else{
if (VideoList.share.getString("size", "4:3").equals("4:3")) {
surView.setLayoutParams(new
https://www.doczj.com/doc/8017800767.html,youtParams(LayoutParams.MATCH_PARENT, 360));
surHolder.setFixedSize(480, 360);
distant.setHeight(0);
if (!popFlag) {
// popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
popuWindow.showAtLocation(view,
Gravity.BOTTOM, 0, 0);
popFlag = true;
handler.removeMessages(0x11);
handler.sendEmptyMessageDelayed(0x11, hint);
}
}
if (VideoList.share.getString("size", "4:3").equals("16:9")) {
surView.setLayoutParams(new
https://www.doczj.com/doc/8017800767.html,youtParams(LayoutParams.MATCH_PARENT, 270));
surHolder.setFixedSize(480, 270);
distant.setHeight(250);
if (!popFlag) {
// popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
popuWindow.showAtLocation(view,
Gravity.BOTTOM, 0, 0);
popFlag = true;
handler.removeMessages(0x11);
handler.sendEmptyMessageDelayed(0x11, hint);
}
}
}
count = 0;
firClick = 0;
secClick = 0;
}
}
return true;
}
});
//监听进度条进度
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
videoLength = seekBar.getProgress();
// int q = mediaPlayer.getCurrentPosition();
mediaPlayer.seekTo(videoLength);
//获取进度条当前的位置
// int dest = seekBar.getProgress();
//设置播放器当期的播放位置
// mediaPlayer.seekTo(num);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
//得到seekbar的进度
/* seekbar.setProgress(progress);
videoLength = seekBar.getProgress();*/
}
});
sound.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
int i= seekBar.getProgress();
mediaPlayer.setVolume(i/100f,i/100f);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
int i= sound.getProgress();
showSound.setText("音量:"+i);
handler.removeMessages(0x11);
handler.sendEmptyMessageDelayed(0x11, hint);
}
});
}
private void playVideo(){
// 构建MediaPlayer对象
mediaPlayer = new MediaPlayer();
try {
// 设置媒体文件路径
mediaPlayer.setDataSource(VideoList.path);
// 设置通过SurfaceView来显示画面
mediaPlayer.setDisplay(surHolder);
// 准备
mediaPlayer.prepare();
distant.setHeight(200);
// 设置事件监听
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
seekbar.setMax(mediaPlayer.getDuration());
//设置当前播放音量最大
soundId = sound.getProgress();
mediaPlayer.setVolume(soundId, soundId);
showSound.setText("音量:"+soundId);
mt = new MyThread();
mt.start();
handler.sendEmptyMessage(0x13);
int n = mediaPlayer.getDuration();//获得持续时间
seekbar.setMax(n);
n = n/1000;
int m = n/60;
int h = m/60;
int s = n%60;
m = m%60;
allTime.setText(String.format("影片长度:"+"%02d:%02d:%02d", h,m,s));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// MediaPlayer.OnPreparedListener
public void onCompletion(MediaPlayer mp) {
handler.sendEmptyMessage(0x14);
}
import java.awt.*; import java.io.*; import java.util.*; import javax.media.*; import javax.media.format.*; import javax.swing.*; public class VideoPlayer implements ControllerListener { Vector audioCapDevList = null; Vector videoCapDevList = null; CaptureDeviceInfo audioCapDevInfo = null; CaptureDeviceInfo videoCapDevInfo = null; MediaLocator audioCapDevLoc = null; MediaLocator videoCapDevLoc = null; Player audioPlayer; Player videoPlayer; public void initAudioCapDevLoc() { //这里可以填写其它的音频编码格式,具体请看AudioFormat类 audioCapDevList = CaptureDeviceManager.getDeviceList(new AudioFormat( AudioFormat.LINEAR)); if ((audioCapDevList.size() > 0)) { //或许有几个CaptureDevice,这里取第一个 audioCapDevInfo = (CaptureDeviceInfo) audioCapDevList.elementAt(0); audioCapDevLoc = audioCapDevInfo.getLocator(); } else { System.out.println("找不到音频采集设备"); System.exit(0); } } public void initVideoCapDevLoc() { //这里可以填写其它的编码视频格式,具体请看VideoFormat类 videoCapDevList = CaptureDeviceManager.getDeviceList(new VideoFormat( VideoFormat.YUV)); if ((videoCapDevList.size() > 0)) {
1。avi格式 代码片断如下: <object id="video" width="400" height="200" border="0" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> <param name="ShowDisplay" value="0"> <param name="ShowControls" value="1"> <param name="AutoStart" value="1"> <param name="AutoRewind" value="0"> <param name="PlayCount" value="0"> <param name="Appearance value="0 value="""> <param name="BorderStyle value="0 value="""> <param name="MovieWindowHeight" value="240"> <param name="MovieWindowWidth" value="320"> <param name="FileName" value="/Mbar。avi"> <embed width="400" height="200" border="0" showdisplay="0" showc autostart="1" autorewind="0" playcount="0" moviewindowheight="240" moviewindowwidth="320" filename="/Mbar。avi" src="Mbar。avi"> </embed> </object> 2。mpg格式 代码片断如下: <object classid="clsid:05589FA1-C356-11CE-BF01-00AA0055595A" id="ActiveMovie1" width="239" height="250">
ASP视频播放器通用代码 1.avi格式 2.mpg格式
几种在网页中播放FLV视频文件的代码(附FLV播放器) 方法一、js嵌入 直接copy下面代码,修改其中红色部分,即:swf_width、swf_height、texts、files 参数引用 其中: 群英传WEB版宣传视频是标题。 https://www.doczj.com/doc/8017800767.html,/flv/qyzweb.flv是FLV文件地址。 https://www.doczj.com/doc/8017800767.html,/flv/flvplayer.swf 是FLV文件播放器地址(如果你不会制作,可下载别人的然后上传到自己的空间再调用)。
空间播放器代码大全:网页中插入各种格式视频播放代码大全 疯狂代码 https://www.doczj.com/doc/8017800767.html,/ ?:http:/https://www.doczj.com/doc/8017800767.html,/HtmlJiaoCheng/Article19101.html 1.avi格式 代码片断如下: 2.mpg格式 代码片断如下:
网页视频播放器代码大全网页mtv播放器代码 一. RM格式(无边框按钮)RealPlayer 代码如下:
二. RM格式(带边框按钮)RealPlayer 代码如下:
三. WMV格式(带边框按钮)Windows Media Player 代码如下:
网页视频播放器代码大全 1.avi格式 代码片断如下: 2.mpg格式 代码片断如下:
实验10 多媒体与网络编程 【测试题1】 编写代码实现制作一个音频文件播放器。只需要实现如图所示的简单界面,点击打开弹出对话框,打开一个.wav的波形音频文件,点击“播放”按钮开始播放,点击“停止”按钮则停止播放,按“关机”按钮则退出应用程序。 需求分析: 1,项目背景和原因。 波形音频是一种电子数字化的声音,是计算机播放音频的一种重要格式,它存储的是声音的波形信息,当播放波形音频时,不管播放文件的设备是何种类型,都会得到相似的声音,波形音频文件通常wav作为文件扩展名。由于采用波形音频存储电子化声音需要大量的存储空间,因此它一般只用于短时间的声音播放。 通过设计一个简单的波形音频播放器,了解MFC,了解接口类MCI。 2,波形音频播放器的功能 播放器有“打开”,“播放”,“停止”,“关机”三个按钮,同时有一个状态栏,用于显示播放器当前处于的状态。 “打开”按钮用于打开一个波形音频文件; “播放”用于播放选中的波形音频文件; “停止”用于暂停正在播放的音频文件,再次点击“播放”时会从暂停出继续播放; “关机”用于退出播放器。播放器界面如图所示:
3,数据字典 类向导ClassWizard 静态文本Static Text 按钮Command Button ,4,功能列表 “打开”-------------------void CWaverDlg::OnOpen() “播放”-------------------void CWaverDlg::OnPlay() “停止”-------------------void CWaverDlg::OnStop() “关机”-------------------void CWaverDlg::OnExit() 5,具体实现步骤 ,1、首先在VisualC++平台上,选择File->New,新建一个名为WaveAudio.h的头文件。代码如下: #if!defined(WA VE_H_INCLUDED_) #define WA VE_H_INCLUDED_ #include "mmsystem.h" class CWave { public: BOOL m_bPlaying; BOOL m_bOpen; WORD m_wDeviceID; public:
各种网页播放器代码大全 https://www.doczj.com/doc/8017800767.html, 更新日期:2005-03-02 14:54 出处:网页教学网作者: rm文件在线播放
收集最常用的网页中嵌入视频代码大全,各种各样的网页视频播放器代码. 网页中嵌入视频代码综合完全版 1.avi格式 代码片断如下: 程序代码
在线视频播放代码 1.avi格式 2.mpg格式
1.avi格式 代码片断如下: 2.mpg格式 代码片断如下:
视频播放器设计 1 需求分析 由于计算机的普及,极大地改变了人们的生活。随之带来了开发各种软件的需求。家用型计算机主要用于家用软件、学习软件、游戏软件和多媒体和多媒体软件,以及播放CD、VCD、DVD、MP3等多媒体信息。然而多媒体播放器的开发仍然不能满足人们的需求,多媒体文件格式多样,但却没有一款播放器能够满足所有格式的解码。人们渴望解码能力更强大,功能更完备的多媒体播放器。 “多媒体”是一种新型的信息处理与传播技术。有人认为它是信息及其传输媒介方面的一场根本革命。人们对新技术的渴望和欢迎、新奇感和占有欲、宣传热情和赞美态度,是发自内心的。特别是计算机多媒体技术的功能,令人大开眼界,惊叹不已。它在商业、信息检索、文化娱乐和教育等方面的应用效果明显,前景广阔。 由多媒体播放器的开发现状看来,并没有哪一款播放器能适应所有多媒体文件的解读,随着视频、音频的迅猛发展,媒体文件的格式层出不穷,由过往美国在线(AOL)公司的Nullsoft部门开发的Winamp独占鳌头,到Real Networks公司的Real Player和微软公司的Windows Media Player风靡全球,再到如今播放器开发的百花齐放的竞争时代,多媒体播放器的开发经历了许多风浪和变化,但是,仍然没有出现全能的播放器,始终没有跨越编码格式的局限,随着多媒体技术的不断发展,人们对多媒体软件的要求也不断高涨,所以对多媒体软件的开发也成为当今计算机开发的重要课题。目前的音频、视频格式繁多,研制格式覆盖面广的多媒体播放器前景非常广泛。 随着计算机、家电、通信等技术的不断发展,多媒体技术有着广泛的开发前景,尤其是多媒体播放器的开发,开发格式覆盖面更广,兼容性更好,功能更完备的播放器势在必行。本文主要采用C++ Builder2009作为开发工具,设计并实现一个多媒体播放器。可播放MP3,AVI,WMV,WMA,RM,RMVB,SWF等多种格式的多媒体文件,并且能够控制播放,暂停,停止,快进,后退,音量控制的调节,选择上一曲,选择下一曲,图像的显示,文件的计时,列表文件的添减操作等多种播放控制功能,界面简明,操作简单。 2 系统总体设计 2.1DirectShow概述 DirectShow是一种通过自定义或内置的大量的Filter(过滤器)来处理多媒体 数据的体系结构。这些Filter大致分三类:Source Filter(源过滤器)、Transform Filter(转换过滤器)、Render Filter(呈现过滤器)。源过滤器主要负责获取数据,数据源可以是文件、网络、计算机采集卡或数字摄像机里的,然后数据向下传输到Transform Filter,它主要负责数据的格式转换,然后继续向下传输到Render Filter,它主要负责数据的最终去向,将数据送给显卡声卡进行播放或输出变成文件存储起来,见图2-1。
package https://www.doczj.com/doc/8017800767.html,.iotek; import java.io.IOException; import java.util.Random; import android.app.Activity; import android.content.Context; import https://www.doczj.com/doc/8017800767.html,NotFoundException; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnBufferingUpdateListener; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.os.Handler; import android.view.GestureDetector.OnGestureListener; import android.view.Gravity; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.ImageButton; import android.widget.LinearLayout; import https://www.doczj.com/doc/8017800767.html,youtParams; import android.widget.PopupWindow; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast; public class PlayVideo extends Activity implements OnGestureListener, OnClickListener,// 监听 OnBufferingUpdateListener,// 当网络缓冲数据流变化的时候唤起的播放事件 OnCompletionListener,// 当媒体资源在播放的时候到达终点时唤起的播放事件 MediaPlayer.OnPreparedListener, SurfaceHolder.Callback// 回调函数 {