VideoView与SurfaceView的使用

视频播放控件SurfaceView与VideoView 既然是播放一段视频,那么不可避免的要涉及到一些开始、暂停、停止等操作, VideoView也为开发人员提供了对应的方法,这里简单介绍一些常用的: //设置数据源 mediaPlayer.setDataSource(context, Uri.parse(uri) );  //准备 mediaPlayer.prepareAsync(); //绑定surfaceview  mediaPla 阅读详情

VideoView

概述:
这个类其实也是继承了SurfaceView 类,集成度高,开发难度小,只是灵活性差。

通过VideoView播放视频的步骤:

1、在界面布局文件中定义VideoView组件,或在程序中创建VideoView组件

2、调用VideoView的如下两个方法来加载指定的视频

setVidePath(String path):加载path文件代表的视频

setVideoURI(Uri uri):加载uri所对应的视频

VideoView的使用:
1.1系统方法

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.android_playvideo.VideoActivity">

    <VideoView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/vv_mian_Video"
        />

</LinearLayout>
package com.example.android_playvideo;

import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class VideoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
         VideoView videoView= (VideoView) findViewById(R.id.vv_mian_Video);
        videoView.setVideoURI(Uri.parse("file://mnt/sdcard/dcim/camera/VID20170211215528.mp4"));
        MediaController mediaController=new MediaController(this);
        mediaController.setMediaPlayer(videoView);
        videoView.setMediaController(mediaController);
    }

}

1.2自定义

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent" tools:context="com.example.android_playvideo.MainActivity">

    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:id="@+id/sfv_mian_surface"
        />

    <SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/sb_mian_seekbar"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="开始"
        android:onClick="start"
        />

</LinearLayout>
package com.example.android_playvideo;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceView;
import android.view.View;
import android.widget.SeekBar;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private SeekBar seekBar;
    private SurfaceView surfaceView;
    private MediaPlayer mediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekBar = (SeekBar) findViewById(R.id.sb_mian_seekbar);
        surfaceView = (SurfaceView) findViewById(R.id.sfv_mian_surface);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                mediaPlayer.seekTo(seekBar.getProgress());
            }
        });

    }
    public void start(View view){
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        if(mediaPlayer==null){
         String path=   Environment.getExternalStorageDirectory().getAbsolutePath();
            Log.i("text",""+path);
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            try {
                mediaPlayer.setDataSource(this, Uri.parse("file://"+path+"/dcim/camera/VID20170211215528.mp4"));
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.setDisplay(surfaceView.getHolder());
             int itme=  mediaPlayer.getDuration();
            Log.i("text",""+itme);
            seekBar.setMax(itme);
            mediaPlayer.start();
            new mySeekbar().start();
        }else if(mediaPlayer.isPlaying()){
            mediaPlayer.pause();
        }else{
            mediaPlayer.start();
        }
        }
    }
    class mySeekbar extends  Thread{
        @Override
        public void run() {
            while(seekBar.getProgress()<seekBar.getMax()){
                seekBar.setProgress(mediaPlayer.getCurrentPosition());
            }
        }
    }
}

配置xml:

 <!--读取内存条的权限-->  
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>  
    <!--设置照相机的权限-->  
    <uses-permission android:name="android.permission.CAMERA"></uses-permission>  
    <!--创建文件的权限-->  
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>  
    <!--写到内存条的权限-->  
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

SurfaceView:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.android_playvideo.CameraActivity">

    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/sfv_mian_View"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="拍照"
        android:onClick="paizhao"
        />

</RelativeLayout>
package com.example.android_playvideo;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;

public class CameraActivity extends AppCompatActivity {

    private SurfaceView surfaceView;
    private Camera camera;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camera);
        surfaceView = (SurfaceView) findViewById(R.id.sfv_mian_View);
        surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                //打开摄像头
             camera=  Camera.open();
                //设置摄像头的参数
               /* Camera.Parameters parameters=camera.getParameters();
                parameters.setPictureFormat(PixelFormat.JPEG);
                parameters.set("jpeg-quality",100);
                camera.setParameters(parameters);*/
                //开启预览效果
                camera.startPreview();
                //将画面展示到surfaceView
                try {
                    camera.setPreviewDisplay(surfaceView.getHolder());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

            }

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                camera.stopPreview();
                camera.release();
            }
        });
    }
    public void paizhao(View view){
        camera.takePicture(null, null, new Camera.PictureCallback() {
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
              Bitmap bitmap= BitmapFactory.decodeByteArray(data,0,data.length);
                Calendar calendar= Calendar.getInstance();
              int year=  calendar.get(Calendar.YEAR);
              int month=  calendar.get(Calendar.MONTH);
              int day= calendar.get(Calendar.DAY_OF_MONTH);
                try {
                    FileOutputStream fos=new FileOutputStream("/mnt/sdcard/dcim/camera/G160628_"+year+(month+1)+day+"_"+System.currentTimeMillis()+".jpg");//保存路径
                    //压缩
                    bitmap.compress(Bitmap.CompressFormat.JPEG,100,fos);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                camera.stopPreview();
                camera.startPreview();
            }
        });
    }
}
Android视频播放实现的三种办法(MediaPlayer+SurfaceView,VideoView,Vitamio框架) 今天来说一下Android中怎么实现视频播放,我主要说三种:1.MediaPlayer+SurfaceView;2.VideoView;3.Vitamio框架。1.MediaPlayer+SurfaceView这种方法是基础,后面的两种方法其实就是把这种方法封装了一下,使用起来更方便些。我认为大家基本都... 阅读详情

相关推荐

Android 音视频开发 - VideoView

VideoView是一个用于播放视频的视图组件,可以方便地在应用程序中播放本地或网络上的视频文件。VideoView可以直接在布局文件中使用,也可以在代码中动态创建。它封装了MediaPlayer和SurfaceView,提供了简单的接口来控制视频的播放和显示。它提供了一系列方法来控制视频的播放、暂停、停止等操作,并且支持全屏播放和视频控制器的显示。VideoView播放视频非常简单,只需要指定视频的URL或本地路径。

赵航的博客 6734

Android 多媒体应用:视频播放之VideoView与SurfaceView

为什么要学习VideoView与SurfaceView VideoView 主函数程序 布局 SurfaceView SurfaceView的介绍 SurfaceView使用 主函数 布局为什么要学习VideoView与SurfaceView  在思考为什么学习VideoView与SurfaceView之前,先想一下为什么不适合实际开发,这是因为VideoView并不是支持播放所有格式的视频,它仅支

liujiaoruiIT的博客 4499

Android开发中使用VideoView实现视频播放详解

随着移动互联网的飞速发展,视频内容已成为现代App不可或缺的交互形式。在Android平台上,视频播放的实现方式多样,涵盖了从基础控件到高级自定义播放器的多种方案。其中,VideoView作为Android SDK原生提供的视频播放组件,因其使用简单、集成快速,广泛适用于入门教学和轻量级业务场景。本章将从整体上介绍Android视频播放的基本原理,概述常见的实现方式,并引出VideoView的核心价值与适用场景,为后续章节的深入实践奠定理论基础。VideoView。

weixin_29867767的博客 1221

surfaceview, videoview,texturalview区别

这个待续

u011025344的专栏 773

【一步到位】Android Studio 实现安卓连接阿里云物联网云平台

最新版本目前是Android Studio Iguana | 2024.1.2,你可以到官网上去找之前的版本,手上有工作项目的不要去轻易尝试,说不定你就编译失败了,失败了也不要担心,解决就可以了。

m0_73799445的博客 1万+

simulink中MIL测试简单理解

输入信号设置如下:选中New Test Case1 ---INPUT。5、新建(选择New,Test from Spreadsheet)6、可以新建也可以导入(Use existing test)Source:Output为自己预测结果。3、右键子系统(Create)打开生成表格,可以自己调试。4、创建测试用例表格。保存路径为模型路径。保存路径在模型路径。8、运行测试设h置。

lingdianhuat的博客 1783

Android - SurfaceView+MediaPlayer、VideoView 2种方法播放视频

Android当中实现视频播放的方式有两种,即:通过VideoView实现或者通过SurfaceView + MediaPlayer实现。 首先为大家介绍SurfaceView+MediaPlayer播放视频的方法,这种方法和我的上一篇博文播放音频差不多,只是需要将媒体播放捕捉的画面展示到surfaceView控件上即可,加一句代码即可 mediaPlayer.setDisplay

Spanluobo的博客 1232

排列显示阿拉伯语、数字及英文时的处理方法

这段时间参与开发沙特阿拉伯的网站模板,模板使用的语言是阿拉伯语,其显示顺序为从右到左,而中文、数字及英文的显示顺序为从左到右 ,所以当遇到一行文字内既有阿拉伯语又有数字和英文时会出现语序混乱的问题,如 期待显示的文案为: 按顺序写入,对应的代码如以下,其中currency_pay为变量,值为356SAR <span>الدفع الفعلي:{{currency_pay}}</span> 显示为 الدفع الفعلي : 356SAR 金额356和货币符号SAR分开了,这样显

llq886的博客 5802

android 播放https 并且可以设置headers

查了很多东西,终于发现一个非常不错的第三方框架分享给大家,直接写用法 1.添加类库 gradle dependencies { # 必选,内部默认使用系统mediaplayer进行解码 implementation 'com.github.dueeeke.dkplayer:dkplayer-java:3.2.6' # 可选,包含StandardVideoController的实现 implementation 'com.github.dueeeke.dkpla...

qq_27591421的博客 2704

Uniapp返回上一页并刷新:亲测有效的 goBack 实现技巧!

这个技巧在实际开发中非常常用,特别适合表单提交后返回列表刷新这类场景。比起依赖onShow或复杂的vuex状态同步,这种方式更直接、好维护,也不容易出 bug。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1841

基于 YOLOv26 的车辆违规停车检测系统:实时监控

本文提出了一种基于YOLOv26的车辆违规停车实时检测系统。系统采用多模块架构,包括视频预处理、YOLOv26目标检测、DeepSORT目标跟踪、停车区域定义、行为分析和违规判定等功能模块。关键技术包括使用YOLOv26s模型进行车辆检测,结合DeepSORT算法实现车辆跟踪,支持多种停车区域定义方式(多边形、矩形、限时区域等)。系统通过边缘计算平台部署,实现了对道路边、禁止停车区等场景的实时监控,能够准确识别长时间停车、禁止区域停车等违规行为,并触发告警机制。实验结果表明,该系统在车辆检测准确率和违规判定

一键难忘的博客 773

使用VideoView 或者SurfaceView 实现视频播放功能

在Android中,实现视频的播放有多中方式,其中用到比较多的是使用Video View 或者是surface View来实现

的专栏 1319

FPGA实现串口升级及MultiBoot(五)通过约束脚本添加IPROG实例

上一篇文章种总结了MultiBoot 关键技术,分为:一个指令、二种位流、三种方式、四样错误。针对以上四句话我们接下来详细分析。在开始解析之前我们先准备两个文件,一个是控制LED闪烁的文件,通过更换引脚约束可以控制不同LED,这样就可以指示是启动MultiBoot位流还是Golden位流。还有一个文件就是uart发送文件,会指示启动的位流格式和启动地址。文件都比较简单,就不列举了,文件详见文后的链接。对于 IPROG 指令目前有三种实现方式,分别为:1)通过约束脚本添加;2)通过ICAPE2原语

OpenFPGA的博客 2104

Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频

工作内容: 1.使用Vitamio框架中的VideoView,MediaController播放本地视频和网络视频 2.自定义MediaController,让其播放控制栏更好用 学习分享:

风吹草低见牛羊 2184

车载软件架构 —— AUTOSAR Vector SIP包(三)

### 上一篇文章中介绍了AUTOSAR基础软件供应商Vector公司的开发工具链,本文将继续介绍Vector公司的AUTOSAR产品。 ### -> 1、Vector SIP包中的StartApplication ### -> 2、StartApplication如何开始使用

Soly_kun的博客 828

FX5U PLC运动控制库安装(PLCopen Motion Control FB参考)

下面我们介绍三菱FX5U PLC的运动控制库PLCopen Motion Control FB的安装。

RXXW_Dor的博客 1524

用VideoView和SurfaceView播放视频

播放视频可以用ViewView,也可以用SurfaceView,VideoView的方式是最简单的,代码如下: 定义一个标签         android:layout_height="240px" /> Java代码: videoView.setVideoURI(Uri.parse("file:///sdcard/test.3gp")); videoView.setMediaController(new MediaController(this)); videoView.start();

Vincent_czz的专栏 1500

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android之VideoView和SurfaceView

VideoView 介绍:继承于SurfaceView,主要用来播放加载视频 特点:集成度高,开发难度小,只是灵活性差。 注意:默认的videoView不能全屏播放,要全屏需要自定义重写onMeasure()方法,将多余的空间释放出来,如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSp

isllyend的博客 2017

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

多媒体之播放视频——VideoView和MediaPlayer(MediaPlayer和SurfaceView结合)

VideoView 后面讲解SurfaceView。 只支持3gp和MP4格式的视频格式的播放使用:VideoView的使用非常简单,布局只需要添加VideoView组件,设置宽高即可,代码中,主要用到下面划红线的方法 注:不要忘了加权限,这里播放手机中存储的视频,需要读权限: <uses-permission android:name="android.permission.READ_E

womengmengyan的博客 9822

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android的视频播放之VideoView与SurfaceView

VideoView概述:这个类其实也是继承了SurfaceView 类,集成度高,开发难度小,只是灵活性差。通过VideoView播放视频的步骤:1、在界面布局文件中定义VideoView组件,或在程序中创建VideoView组件2、调用VideoView的如下两个方法来加载指定的视频 setVidePath(String path):加载path文件代表的视频 setVideoURI(Uri ur

NiZhuanXingHeIT的博客 6792

VideoView和SurfaceView播放视频

用VideoView和SurfaceView播放视频 播放视频可以用ViewView,也可以用SurfaceView,VideoView的方式是最简单的,代码如下: 定义一个标签         android:layout_height="240px" /> Java代码: videoView.setVideoURI(Uri.parse("file:///sdcard/

王者无双 947

VideoView

VideoView 一、VideoView简介 在Android中,播放视频有2种方式,第一种方式是使用MediaPlayer结合SurfaceView来播放,通过MediaPlayer来控制视频的播放、暂停、进度等,而通过SurfaceView来显示视频内容;第二种方式是使用VideoView来播放,这个类其实也是**继承了SurfaceView类,并且实现了MediaController.MediaPlayerController这个用于控制媒体播放的接口,另外在VideoView上还有一个用于对媒体

weixin_44666172的博客 701

Android开发06_VideoView、SurfaceView两种视频播放器

一、前言 Android中视频播放的方式有两种,一种是使用系统封装好的VideoView,使用起来比较方便,系统API把所有播放的内容都封在了这个类中,唯一不足的是无法自定义,比如你想修改播放的进度条就是一件十分麻烦的事情。 所以Android还提供了另一种视频播放的类SurfaceView,此类结合MediaPlayer使用起来十分得心应手,自定义功能强大到你想做什么都可以在此去实现,所以编

做你想做的,在所不惜。 5680
上一篇: Android系列之音乐播放器的实现一(应用内音频文件)
下一篇: android 弹出消息框
殇丶
博客等级 码龄10年 35粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值