视频播放器

效果图

2011060223453628.jpg

知识要点

 surfaceView.getHolder().setFixedSize(176, 144);//设置分辨率
        surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//设置surfaceview不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前
        surfaceView.getHolder().addCallback(new SurceCallBack());//对surface对象的状态进行监听

mediaPlayer.reset();//重置为初始状态
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置音乐流的类型
    mediaPlayer.setDisplay(surfaceView.getHolder());//设置video影片以surfaceviewholder播放
    mediaPlayer.setDataSource(file.getAbsolutePath());//设置路径
    mediaPlayer.prepare();//缓冲
    mediaPlayer.start();//播放

相关代码

ContractedBlock.gifExpandedBlockStart.gifstrings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, VodeoPlayActivity!</string>
<string name="app_name">视频播放器</string>
<string name="filename">视频文件</string>
<string name="sdcarderror">sd卡不存在</string>
</resources>
ContractedBlock.gifExpandedBlockStart.gifmain.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
android:background
="#ffffff"
>
<TextView
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
android:text
="@string/filename"
/>
<EditText android:layout_width="fill_parent"
android:layout_height
="wrap_content"
android:text
="oppo.mp4"
android:id
="@+id/filename"
/>
<LinearLayout
android:orientation
="horizontal"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
>
<ImageButton android:layout_width="wrap_content"
android:layout_height
="fill_parent"
android:src
="@drawable/play"
android:id
="@+id/play"
/>
<ImageButton android:layout_width="wrap_content"
android:layout_height
="fill_parent"
android:src
="@drawable/pause"
android:id
="@+id/pause"
/>
<ImageButton android:layout_width="wrap_content"
android:layout_height
="fill_parent"
android:src
="@drawable/stop"
android:id
="@+id/stop"
/>
<ImageButton android:layout_width="wrap_content"
android:layout_height
="fill_parent"
android:src
="@drawable/reset"
android:id
="@+id/reset"
/>
</LinearLayout>
<SurfaceView android:layout_width="fill_parent"
android:layout_height
="fill_parent"
android:id
="@+id/surfaceview"
/>
</LinearLayout>
ContractedBlock.gifExpandedBlockStart.gifVodeoPlayActivity
package com.tjp.vodeoplay;

import java.io.File;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

public class VodeoPlayActivity extends Activity {
/** Called when the activity is first created. */
private EditText filenamEditText;
private MediaPlayer mediaPlayer;
private String filename;
private SurfaceView surfaceView;
private final static String TAG="VodeoPlayActivity";
private int prosition=0;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
filenamEditText
=(EditText) this.findViewById(R.id.filename);
surfaceView
=(SurfaceView)this.findViewById(R.id.surfaceview);
surfaceView.getHolder().setFixedSize(
176, 144);//设置分辨率
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//设置surfaceview不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前
surfaceView.getHolder().addCallback(new SurceCallBack());//对surface对象的状态进行监听
mediaPlayer=new MediaPlayer();

ButtonOnClikListiner buttonOnClikListinero
=new ButtonOnClikListiner();
ImageButton start
=(ImageButton) this.findViewById(R.id.play);
ImageButton pause
=(ImageButton) this.findViewById(R.id.pause);
ImageButton stop
=(ImageButton) this.findViewById(R.id.stop);
ImageButton replay
=(ImageButton) this.findViewById(R.id.reset);
start.setOnClickListener(buttonOnClikListinero);
pause.setOnClickListener(buttonOnClikListinero);
stop.setOnClickListener(buttonOnClikListinero);
replay.setOnClickListener(buttonOnClikListinero);
}

/* @Override
protected void onPause() {
if(mediaPlayer.isPlaying()){
prosition=mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
super.onPause();
}

@Override
protected void onResume() {
if(prosition>0&&filename!=null){
play();
mediaPlayer.seekTo(prosition);
prosition=0;
}
super.onResume();
}
*/

private final class ButtonOnClikListiner implements View.OnClickListener{

@Override
public void onClick(View v) {
if(Environment.getExternalStorageState()==Environment.MEDIA_UNMOUNTED){
Toast.makeText(VodeoPlayActivity.
this, "sd卡不存在", Toast.LENGTH_SHORT).show();
return;
}
filename
=filenamEditText.getText().toString();
switch (v.getId()) {
case R.id.play:
play();
break;
case R.id.pause:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}
else{
mediaPlayer.start();
}
break;
case R.id.reset:
if(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(
0);
}
else{
play();
}
break;
case R.id.stop:
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
}

}



}

private void play() {
try {
File file
=new File(Environment.getExternalStorageDirectory(),filename);
mediaPlayer.reset();
//重置为初始状态
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置音乐流的类型
mediaPlayer.setDisplay(surfaceView.getHolder());//设置video影片以surfaceviewholder播放
mediaPlayer.setDataSource(file.getAbsolutePath());//设置路径
mediaPlayer.prepare();//缓冲
mediaPlayer.start();//播放
} catch (Exception e) {
Log.e(TAG, e.toString());
e.printStackTrace();
}
}

private final class SurceCallBack implements SurfaceHolder.Callback{

/**
* 画面修改
*/
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}

/**
* 画面创建
*/
@Override
public void surfaceCreated(SurfaceHolder holder) {
if(prosition>0&&filename!=null){
play();
mediaPlayer.seekTo(prosition);
prosition
=0;
}

}

/**
* 画面销毁
*/
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(mediaPlayer.isPlaying()){
prosition
=mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}

}

}
}

转载于:https://www.cnblogs.com/tjpfly/archive/2011/06/02/2070134.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编了一个服务器

//服务器代码 / Sever.cpp : Defines the entry point for the console application. // #include <WinSock2.h> //包含Socket 2版本的头文件&#xff1b; #include <windows.h> #include <stdio.h> #pragma comment(lib, "WS2_32.lib")…

计算机学科技术前沿:互联网上信息可信性的现状

互联网的虚假信息很大一部分是由水军造成的。 研究报告显示&#xff0c;越来越常见的网络付费发贴行为虽然有益于商家&#xff0c;但却会影响到普通互联网用户的信息判断&#xff0c;使他们失去对网络信息的信任。 在中国&#xff0c;这些人被称作“网络水军”&#xff1a;一…

asp.net UpdatePanel的简单用法

局部更新是ajax技术的最基本&#xff0c;也是最重要的用法&#xff0c;今天大概把asp.net ajax中的局部更新控件 updatepanel的用法记录下&#xff0c;大家可以共同探讨 UpdatePanel控制页面的局部更新&#xff0c;这个更新功能依赖于scriptManger控件的EnablePartialRendering…

前端需要了解的http知识

http基本概念 http是一个无状态 &#xff0c;无连接的基于TCP协议的单向应用层协议 一、无连接 无连接即每次链接只处理一个请求&#xff0c;请求和应答后就断开链接 二、无状态 http的每次请求都是独立的&#xff0c;不相关的&#xff0c;协议对事物处理没有记忆功能。 HTTP无…

局域网中设备的管理之StackCluster

局域网中设备的管理通常采用 stack 、cluster和snmp等方法。 下面我们来讨论一下stack 和cluster。Stack 也叫作堆叠。堆叠是由一些通过堆叠口相连的以太网交换机组成的一个管理域&#xff0c;其中包括一个主交换机和若干个从交换机。堆叠在一起的以太网交换机可以看作为一个设…

SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)

最近在做邮件发送接口 把遇到的问题和解决方法告诉大家 希望对了解邮件的人有所帮助 原程序部分代码如下 //设置邮件信息 发件人地址、收件人地址、标题、主题 MailMessage mail new MailMessage("xxxxxxxsina.com", "zzzzzzzsina.com", "标题…

google Chrome 浏览器源码地址地址!

1. Google Chrome 源码 SVN 地址&#xff1a;http://src.chromium.org/svn。包含有 Chrome、Gears、Webkit、GCC 等源码以及编译依赖工具。Chrome 浏览器项目的源码&#xff0c;位于目录 http://src.chromium.org/svn/trunk/src/chrome/  2. Google Chrome 源码 Web 浏览地址…

3DMed

1. 当前 小论文&#xff0c; before 5.1 2. linux 需要十天的时间&#xff0c; 5月上旬 3. 中下旬写代码&#xff0c;提取算法 。 6月 三维 建模 7月仿真 4. very helpfully , i found this professional open software. Links 3DMed (www.3dmed.net) www.fingerpass.net MOSE…

【图像算法】彩色图像分割专题五:提取彩色图像上特定色彩

【图像算法】彩色图像分割专题五&#xff1a;提取彩色图像特定色彩 SkySeraph Jun 8th 2011 HQU Email&#xff1a;zgzhaobogmail.com QQ&#xff1a;452728574 Latest Modified Date&#xff1a;Jun 8th 2011 HQU 一 原理及说明&#xff1a; 1 RGB(red,green,blue)模式是…

标记一下 两个Google Chrome 源码研究的网站

大坡3D软件开发&#xff1a; http://blog.csdn.net/caimouse/archive/2008/09/07/2893806.aspx Venus神庙&#xff1a; http://www.cnblogs.com/duguguiyu/archive/2008/10/02/1303095.html

k8s基础学习-存储卷

存储卷的几种类型&#xff1a; emptyDir -- 用于存储临时数据的简单空目录 hostPath -- 用于将目录从工作节点的文件系统挂载到pod中 gitRepo -- 通过检出Git仓库的内容来初始化的卷 nfs -- 挂载到pod中的NFS共享卷 configMap&#xff0c;secret&#xff0c;downwardAPI--用于将…

SharePoint里如何设置People picker值为当前登录用户值

摘要&#xff1a; 相信很多朋友都遇到过需要将某个People类型的字段值设置为当前登录用户的情况而且已经给出了解决方案&#xff0c;因此本文没有什么新意&#xff0c;算法上也比较冗余&#xff0c;仅仅在博客里算作知识的备份。 思路&#xff1a; 在画面的右上角有一个欢迎控件…

SQL存储过程的导入导出

转贴网址&#xff1a;http://haitao.javaeye.com/blog/782365 近日在研究SQL的存储过程&#xff0c;这里我陆续将我在使用存储过程中碰到的问题及解决办法发布到网上&#xff0c;请各位大虾指正。   SqlServer存储过程的导出导入   打开“企业管理器”&#xff0c;选择需要…

osg指定向量旋转指定角度

向量AB&#xff0c;沿着n旋转10度 osg::Vec3 left AB*osg::Matrix::rotate(osg::inDegrees(10), n); osg::Vec3 right AB*osg::Matrix::rotate(osg::inDegrees(-10), n);//right-left 特殊情况下&#xff0c;可以使用向量叉乘实现&#xff0c;例如旋转90度 osg::Vec3 left n…

android webservice 简单应用

http://www.cnblogs.com/ghj1976/archive/2011/04/26/2028904.html

《Linux内核完全注释》《完全剖析》 » 阅读本书所需的基础知识 -- 再次强调。

转贴网址&#xff1a;http://www.oldlinux.org/oldlinux/viewthread.php?tid2551&extrapage%3D1 [这个贴子最后由redgrid在 2006/08/09 00:45pm 第 17 次编辑]Linux 0.11虽然不是什么“珠穆朗玛峰”&#xff0c;但它肯定还是“华山”或“泰山”。虽然有路但你还是需要最基…

Linux 系统下载网址

网址&#xff1a;http://download.chinaunix.net/disc/linux/

Linux tp5伪静态设置

.htaccess文件写入下面规则 <IfModule mod_rewrite.c>Options FollowSymlinksRewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]</IfModule> 转载于:https://www.cnblogs.com/d…

IT绩效管理消除IT与业务之间的隔阂

近日&#xff0c;惠普公司公布了一项针对亚太地区用户IT绩效考核方式的调查结果&#xff1a;91%的企业高管认为IT绩效考核是一个重要工具&#xff0c;但实际上只有50%的高管在做决策时参考了IT绩效考核数据。企业对IT绩效考核的期望值与考核的实际执行之间为何会有如此大的落差…

WinCE下监视设备插拔的参考代码

在一些项目中&#xff0c;系统需要实时监测U盘或SD卡的插入拔出。当文件系统加载成功后通知特定应用程序&#xff0c;启动自动播放功能。在U盘或其他外部存储设备移除时&#xff0c;也需要立即通知相应的程序&#xff0c;停止访问这些设备&#xff0c;如播放其中的音视频文件&a…