软件编程
位置:首页>> 软件编程>> Android编程>> android surfaceView实现播放视频功能

android surfaceView实现播放视频功能

作者:汪星没有熊  发布时间:2022-12-11 12:55:04 

标签:android,surfaceView,播放视频

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

RelativeLayout


<?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"
 tools:context=".MainActivity">

<com.example.examday11_4_1.surfaceview.MySurfaceView
   android:id="@+id/sv"
   android:layout_width="match_parent"
   android:layout_height="250dp" />

<TextView
   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" />

<SeekBar
   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" />

<TextView
   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" />

<Button
   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" />

</RelativeLayout>

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();
     }
   });

}
}

来源:https://blog.csdn.net/weixin_45697390/article/details/105836280

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com