本文实例为大家分享了android surfaceView实现播放视频的具体代码,供大家参考,具体内容如下

RelativeLayout

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=".MainActivity">

android:id="@+id/sv"

android:layout_width="match_parent"

android:layout_height="250dp" />

android:id="@+id/te_nowTiem"

android:textColor="#fff"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBottom="@id/sv"

android:layout_marginLeft="60dp"

android:layout_marginBottom="10dp"

android:text="00:00" />

android:id="@+id/sb"

android:layout_width="200dp"

android:layout_height="wrap_content"

android:layout_alignBottom="@id/sv"

android:layout_centerHorizontal="true"

android:layout_marginBottom="10dp" />

android:id="@+id/te_allTiem"

android:textColor="#fff"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBottom="@id/sv"

android:layout_marginLeft="320dp"

android:layout_marginBottom="10dp"

android:text="00:00" />

android:id="@+id/but_play"

android:layout_width="50dp"

android:layout_height="40dp"

android:layout_alignBottom="@+id/sv"

android:layout_marginLeft="10dp"

android:text="S/P"

android:textSize="10sp" />

mySurfaceView

package com.example.examday11_4_1.surfaceview;

import android.content.Context;

import android.media.MediaPlayer;

import android.util.AttributeSet;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import java.io.IOException;

import java.text.SimpleDateFormat;

public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {

private SurfaceHolder surfaceHolder;

private MediaPlayer mediaPlayer;

public MySurfaceView(Context context) {

super(context);

}

public MySurfaceView(Context context, AttributeSet attrs) {

super(context, attrs);

surfaceHolder = getHolder();

surfaceHolder.addCallback(this);

if (mediaPlayer == null){

mediaPlayer = new MediaPlayer();

}

}

public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {

super(context, attrs, defStyleAttr, defStyleRes);

}

public void setDataPath(String path){

mediaPlayer.reset();

try {

mediaPlayer.setDataSource(path);

mediaPlayer.prepareAsync();

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

@Override

public void onPrepared(MediaPlayer mp) {

mediaPlayer.start();

}

});

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

mediaPlayer.setDisplay(surfaceHolder);

}

@Override

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

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

if (mediaPlayer!=null){

mediaPlayer.release();

mediaPlayer = null;

}

}

//暂停/开始播放

public void playOrNo(){

if (mediaPlayer!=null){

if (mediaPlayer.isPlaying()){

mediaPlayer.pause();

}else {

mediaPlayer.start();

}

}

}

//拖动更新进度

public void seekTo(int progress){

if (mediaPlayer!=null){

int duration = mediaPlayer.getDuration();

int current = progress * duration /100;

mediaPlayer.seekTo(current);

}

}

//获取播放进度

public int getProgress(){

if (mediaPlayer!=null){

int druation = mediaPlayer.getDuration();

int currentPosition = mediaPlayer.getCurrentPosition();

int progress = currentPosition * 100 / druation;

return progress;

}

return 0;

}

//获取播放时长

public String getCurrentTime(){

if (mediaPlayer!=null){

long currentPostion = mediaPlayer.getCurrentPosition();

SimpleDateFormat format = new SimpleDateFormat("mm:ss");

String f = format.format(currentPostion);

return f+"";

}

return "";

}

//获取时长

public String getDuration(){

if (mediaPlayer!=null){

long duration = mediaPlayer.getDuration();

SimpleDateFormat format = new SimpleDateFormat("mm:ss");

return format.format(duration)+"";

}

return "";

}

}

MainActivity

package com.example.examday11_4_1;

import android.Manifest;

import android.os.Build;

import android.os.Bundle;

import android.os.Handler;

import android.view.View;

import android.widget.Button;

import android.widget.SeekBar;

import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.examday11_4_1.surfaceview.MySurfaceView;

import java.util.Timer;

import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

private MySurfaceView mySurfaceView;

private TextView teNowTiem;

private SeekBar sb;

private TextView teAllTiem;

private Button butPlay;

private Timer timer;

private Handler handler = new Handler();

private String path ="http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){

requestPermissions(new String[]{

Manifest.permission.READ_EXTERNAL_STORAGE

},100);

}

initView();

initTimer();

}

private void initTimer() {

timer = new Timer();

timer.schedule(new TimerTask() {

@Override

public void run() {

final String currentTime = mySurfaceView.getCurrentTime();

final String duration = mySurfaceView.getDuration();

final int progress = mySurfaceView.getProgress();

handler.post(new Runnable() {

@Override

public void run() {

sb.setProgress(progress);//设置进度条

teAllTiem.setText(duration);//设置总时长

teNowTiem.setText(currentTime);//设置当前时长

}

});

}

},0,100);

}

private void initView() {

mySurfaceView = (MySurfaceView) findViewById(R.id.sv);

mySurfaceView.setDataPath(path);

teNowTiem = (TextView) findViewById(R.id.te_nowTiem);

sb = (SeekBar) findViewById(R.id.sb);

teAllTiem = (TextView) findViewById(R.id.te_allTiem);

butPlay = (Button) findViewById(R.id.but_play);

//设置拖动

sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

@Override

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

if (fromUser){

mySurfaceView.seekTo(progress);//视频播放拖动

}

}

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override

public void onStopTrackingTouch(SeekBar seekBar) {

}

});

//暂停播放

butPlay.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

mySurfaceView.playOrNo();

}

});

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android播放视频功能,android surfaceView实现播放视频功能相关推荐

  1. Android之使用MediaPlayer和SurfaceView组件播放一个简单的视频

    1.MediaPlayer除了可以播放音乐外,还可以播放视频,但是使用MediaPlayer播放音乐时,没有提供图像输出界面,可以使用SurfaceView组件来显示视频画面,首先,必须在布局文件ac ...

  2. 播放视频android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法...

    最近用使开辟的过程中涌现了一个小题问,顺便录记一下因原和法方--播放视频 44_在线视频播放器 ------------------------- 1.注意这里,在模拟器中,android2.2和an ...

  3. android在视频上放view,android在SurfaceView上播放视频

    首先,创建sdcard镜像文件,在命令行下输入: mksdcard 512M c:\sdcard.img命令 启动eclipse,单击window/preferences菜单,找到Launch项, 在 ...

  4. VLC播放器Demo(录像,截图等功能),Android播放器Demo可二次开发。ffmpeg-Kit (录像,截图,合流播放,合流推送,等一些列视频操作功能),可二次开发。

    VLC播放器Demo(录像,截图等功能),可二次开发. ffmpeg-Kit (录像,截图,合流播放,合流推送,等一些列视频操作功能),可二次开发. 如果帮助的到了您,请您不要吝啬你的Star,先谢谢 ...

  5. android 网易视频无法播放器,没错,这就是目前功能最强第三方播放器

    我们先前安利的很多视频播放器,因为是个人开发者作品,通常不会要求太多,只要能用够用没广告就很满足了. 但用久了大家可能会感觉不那么舒服,比如软件视觉体验,操作体验跟专业的播放器差距甚远,或者仅仅是简介 ...

  6. android朋友圈自动播放,微信安卓7.0.5内测新版功能 朋友圈视频自动播放关闭设置...

    微信安卓7.0.5内测新版功能.微信又迎来了新的版本,虽然这次是小版本的更新,不过带来的新功能却挺好用的,一起来看看吧.这个版本的微信尚处于内测阶段想要尝鲜的用户还需要等等. 微信视频动态增强 图片秒 ...

  7. Android提高第二十一篇之MediaPlayer播放网络视频

    本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 上次讲解了MediaPlayer播放网络音频,介绍了MediaPlayer关于网络音频的缓冲和进度条控制的方法 ...

  8. 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)

    前言 本章将实现非常实用的功能--下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...

  9. [转载]使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)...

    前言 本章将实现非常实用的功能--下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...

  10. 使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)

    前言 为了保证每周一篇的进度,又由于Vitamio新版本没有发布, 决定推迟本地播放的一些功能(截图.视频时间.尺寸等),跳过直接写在线播放部分的章节.从Vitamio的介绍可以看得出,其支持http ...

最新文章

  1. Python__数据结构与算法——查找与排序
  2. 计算机应用主要学PS,全国计算机一级Photoshop应用试题及答案
  3. 第二天学习Java的笔记
  4. ft232 mac usb串口驱动_记Macbook Pro配合FT232使用PN532模块
  5. QT实现动态的wave水波纹
  6. javaScript变量、作用域链
  7. 程序员35岁破局之路
  8. VBA实战技巧精粹011:新建只有1张工作表的工作簿
  9. 将数据从 SQL Server 导入 Azure Storage Table
  10. 安装mysql没有提示设置密码_18.04安装mysql没有提示输入密码
  11. 【C语言】编写程序,输出以下图形
  12. 03-NIO通讯模型
  13. 微信小程序云开发教程-微信小程序的JS高级-全局数据读写
  14. GIWAXS数据处理流程详细
  15. ios控制视图切换方向
  16. oracle下的inventory文件夹,Oracle中Inventory目录作用以及如何重建此目录
  17. OMAP 3 图像信号处理器 (ISP) 驱动
  18. Swift+Ubuntu on Mac
  19. 把梳子卖给和尚的故事(网络营销策略,精彩案例分析)
  20. 【深度学习】---行人检测应用

热门文章

  1. 3. static file process
  2. js中的fromCharCode() charCodeAt() charAt()
  3. C++ 对象没有显式初始化
  4. Learning a Discriminative Feature Network for Semantic Segmentation(语义分割DFN,区别特征网络)...
  5. windows下的Redis安装:
  6. 第一篇:webservice初探
  7. android studio ndk 开发入门
  8. UVA-12661 Funny Car Racing (dijkstra)
  9. Python核心编程2第三章课后练习
  10. 条形码、二维码的区别和组成结构介绍