首页 > 移动平台 > 详细

【Android SurfaceView】视频播放器 简单例子

时间:2017-02-21 11:55:58      阅读:370      评论:0      收藏:0      [点我收藏+]

找过好过视频播放器的例子,但是都特么给一半代码,不给一半代码!技术分享

还有的给个apk例句?


我也是醉了!把自己以前的笔记发一下吧,

虽然有缺陷:

1,横屏切换的时候,线程会死掉,不能激活...

2,停止的时候,线程释放了资源,但是还是有一张图片在

3,待机状态,还有有声音播放的。


现在还没有解决,希望公布代码后,有人提出改进建议...


暂时实现了:

1,进度条绑定播放器的进度

2,三个按钮:播放,暂停,停止

3,视频从SD卡读取,就在根目录,当前是hand.mp4(其他格式嘛?应该不支持吧....)


这是布局:

技术分享


播放:


技术分享


暂停:


技术分享


TestVedioActivity.java 

package com.open_open.android_ch14_2;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

/ *视频播放器素材:1280x 720,来自sd卡
         表面:原始图形缓冲区,
         Surface是管理显示内容的数据,储存数据的交换
 * /
public class TestVedioActivity extends Activity {
    私有SurfaceView sfview; //在Surface的基础上,显示视频
    私人SurfaceHolder夹具; //在Surface的基础上,控制尺寸大小和格式
    private SeekBar sb; //进度条
    private MediaPlayer mp; //媒体播放器

    @覆盖
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_vedio);

        sb =(SeekBar)findViewById(R.id.sb);
        sfview =(SurfaceView)findViewById(R.id.sfView);
        holder = sfview.getHolder();

        sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
            @覆盖
            public void onStopTrackingTouch(SeekBar seekBar){

                if(mp!= null)
                    mp.seekTo(seekBar.getProgress());

            }}

            @覆盖
            public void onStartTrackingTouch(SeekBar seekBar){

            }}
            @覆盖
            public void onProgressChanged(SeekBar seekBar,int progress,boolean fromUser){
            }}
        });
    }}

    public void doPlay(View view){
        if(mp!= null)
            返回;
        mp = new MediaPlayer();
        String path = Environment.getExternalStorageDirectory()。getAbsolutePath()+“/ hand.mp4”;

        尝试{
            mp.setDataSource(path);
            mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mp.setDisplay(holder);
            mp.prepare();
            sb.setMax(mp.getDuration());
            mp.start();

//控制进度条
            新线程(新Runnable(){
                @覆盖
                public void run(){

                    while(mp.getCurrentPosition()<= sb.getMax()){

                        sb.setProgress(mp.getCurrentPosition()); //设置进度条当前进度
                        SystemClock.sleep(200);

                    }}
                }}
            });
        } catch(Exception e){
            e.printStackTrace();
        }}
    }}

    public void doPause(View view){
        if(mp!= null && mp.isPlaying()){
            mp.pause(); //暂停
            ((Button)view).setText(“继续播放”);
        } else if(mp!= null && mp.isPlaying()== false){
            mp.start(); //播放
            ((Button)view).setText(“暂停”);
        }}
    }}

    public void doStop(View view){
        if(mp!= null){
            sb.setProgress(0);
            mp.stop();
            mp.release();
            mp = null;
        }}
    }}
}}

xml布局:

<?xml version =“1.0”encoding =“utf-8”?>
<LinearLayout xmlns:android =“http://schemas.android.com/apk/res/android”
    xmlns:tools =“http://schemas.android.com/tools”
    android:layout_width =“match_parent”
    android:layout_height =“match_parent”
    android:orientation =“vertical”>

    <SeekBar
        android:id =“@ + id / sb”
        android:layout_width =“match_parent”
        android:layout_height =“wrap_content”
        />

    <LinearLayout android:layout_width =“match_parent”
        android:layout_height =“wrap_content”
        android:orientation =“horizo??ntal”>
        <按钮
            android:layout_width =“wrap_content”
            android:layout_height =“wrap_content”
            android:text =“播放”
            android:onClick =“doPlay”
            />
        <按钮
            android:layout_width =“wrap_content”
            android:layout_height =“wrap_content”
            android:text =“暂停”
            android:onClick =“doPause”
            />
        <按钮
            android:layout_width =“wrap_content”
            android:layout_height =“wrap_content”
            android:text =“停止”
            android:onClick =“doStop”
            />
    </ LinearLayout>
    <SurfaceView
        android:id =“@ + id / sfView”
        android:layout_width =“match_parent”
        android:layout_height =“300sp”
        />
</ LinearLayout>




【Android SurfaceView】视频播放器 简单例子

原文:http://blog.csdn.net/ssh159/article/details/56277376

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!