视频播放Demo

话不多说,直接上代码:xml文件:

 <TextView
        android:id="@+id/file"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="文件名" />
    <EditText
        android:id="@+id/fileedite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />
    </LinearLayout>

       <LinearLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal"
      >
    <Button
        android:id="@+id/play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="mediaPlay"
        />
    <Button
        android:id="@+id/pause"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="mediaPlay"
        />
    <Button
        android:id="@+id/reset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="mediaPlay"
       />
    <Button
        android:id="@+id/stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="mediaPlay"
        >
        </Button>
        </LinearLayout>

       <SurfaceView
        android:layout_width="fill_parent"
        android:layout_height="240dp"
        android:id="@+id/surfaceView"
           />

activity:

    private EditText nameEdit;
    private MediaPlayer media;
    private String path;
    private SurfaceView surfaceView;
    private Boolean pause=false;
    private int position;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_media_play);

        media=new MediaPlayer();
        nameEdit=(EditText) findViewById(R.id.fileedite);
        //把输送给surfaceView的视频画面,直接显示到屏幕上,不要在自己的缓冲区
        surfaceView=(SurfaceView) findViewById(R.id.surfaceView);
        surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        surfaceView.getHolder().setFixedSize(176, 144);
        surfaceView.getHolder().setKeepScreenOn(true);
        surfaceView.getHolder().addCallback(new SurfaceCallBack());

    }

    public final class SurfaceCallBack implements Callback{

        public void surfaceCreated(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            if(position>0 && path!=null){
                play(position);
                position=0;
            }
        }

        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            // TODO Auto-generated method stub

        }

        public void surfaceDestroyed(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            if(media.isPlaying()){
                position=media.getCurrentPosition();
                media.stop();
            }

        }

    }
    private void mediaPlay(View v){
        switch(v.getId()){
        case R.id.play:
            String filename=nameEdit.getText().toString();
            if(filename.startsWith("http")){
                path=filename;
                play(0);
            }else{
                File file=new File(Environment.getExternalStorageDirectory(),filename);

                if(file.exists()){
                    path=file.getAbsolutePath();
                    play(0);
                }else{
                    path=null;
                    Toast.makeText(this, "视频文件不存在", 1).show();
                    }
            }

            break;
        case R.id.pause:
            if(media.isPlaying()){
                media.pause();
                pause=true;
            }else{
                if(pause){
                    media.start();
                    pause=false;
                }
            }
            break;
        case R.id.reset:
            if(media.isPlaying()){
                media.seekTo(0);
            }else{
                if(path!=null){
                    play(0);
                }
            }
            break;
        case R.id.stop:
            if(media.isPlaying()){
                media.stop();
            }
            break;

            default:
                break;

        }
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        media.release();
        media=null;
        super.onDestroy();
    }
    private void play(int position){
        media.reset();
        try {
            media.setDataSource(path);
            media.setDisplay(surfaceView.getHolder());
            media.prepare();//缓冲
            media.setOnPreparedListener(new PreparedListener(position));

        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    private final class PreparedListener implements OnPreparedListener{

        private int position;

        public PreparedListener(int position){
            this.position=position;

        }
        @Override
        public void onPrepared(MediaPlayer mp) {
            // TODO Auto-generated method stub
            media.start();
            if(position>0 && path!=null){
            media.seekTo(position);
            }
        }
        

时间: 2024-10-09 22:04:06

视频播放Demo的相关文章

基于libVLC(VLC SDK)的视频播放Demo

由于实习项目需要,最近在研究VLC Media Player,该播放器来源于École Centrale Paris(巴黎中央理工学校)的一个学术项目,名为VideoLAN,VLC意为VideoLAN Client.后发展为一个由志愿者组成的非营利性组织,开发并提供免费.开源的多媒体解决方案. 我的工作是利用该播放器提供的开发工具libVLC来实现一个功能自定义的媒体播放器,使用C++语言. 在摸索的过程中参考了几篇博客,也参考了官方给出的入门教程,所以说代码不是问题.对我来说问题是如何配置VL

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签

Unity3D关于VR的Demo(一)

https://blog.csdn.net/qq_15807167/article/details/52048998?locationNum=8&fps=1 阅读数:9716 最近有点忙,只有挤时间去了解VR这方面的Demo了,之前关注了一个Android平台的视频VR的demo研读的差不多了,现在开始关注Unity3d建造VR游戏环境的demo. Android下demo例子地址. * https://github.com/ashqal/MD360Player4AndroidVR视频播放dem

github视频录制播放相关功能-参考

lookingstars/JZVideoDemo  视频播放器 Updated on 11 Aug Objective-C 15 10 caoguoqing/VideoEditDemo  iOS video cut ,also can add blackgroundmusic iOS 视频剪辑,视频添加背景音乐 Updated on 13 Jun 2014 Objective-C 139 50 835239104/KrVideoPlayerPlus  根据36Kr开源的KRVideoPlayer

jqm视频播放器,html5视频播放器,html5音乐播放器,html5播放器,video开发demo,html5视频播放示例,html5手机视频播放器

最近在论坛中看到了很多实用html5开发视频播放,音乐播放的功能,大部分都在寻找答案.因此我就在这里做一个demo,供大家相互学习.html5开发越来越流行了,而对于视频这一块也是必不可少的一部分.如何让你的网站占据优势,就要看你的功能和用户体验了.html5对video还是做了很多优惠的东西,我们使用起来很得心应手. 在过去 flash 是网页上最好的解决视频的方法,截至到目前还算是主流,像那些优酷之类的视频网站.虾米那样的在线音乐网站,仍然使用 flash 来提供播放服务.但是这种状况将会随

ios 视频播放代码Demo

方法一: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. //利用自带MPMoviePlayerController来实现视频播放,首先要在 项目中导入MediaPlayer.Framework框架包. //在试图控制器中导入#import "MediaPlayer/MPMoviePlayerController.h" UIImageView *i

HTML5音频-视频处理demo

HTML5视频-音频处理(最后有demo) * 基本内容 * 使用Flash技术处理HTML页面中的视频内容 * 包含音频.动画.网页游戏等 * 特点 * 浏览器原生不支持(IE浏览器要求安装ActiveX组件) * 性能不好(不能过多地使用) * 智能移动端并不支持Flash技术 * 命运 * Flash的母公司Adobe公开宣布放弃 * 目前用于替代Flash技术最好的选择 - HTML5 * 几乎所有浏览器原生支持<video>元素 * 性能更高 * 智能移动端支持非常好 * 如何实现视

视频播放插件Video.js简单使用

插件下载地址: Video.js 是一个通用的在网页上嵌入视频播放器的 JS 库,Video.js 自动检测浏览器对 HTML5 的支持情况,如果不支持 HTML5 则自动使用 Flash 播放器. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-

基于wke封装的duilib的webkit浏览器控件,可以c++与js互交,源码及demo下载地址

转载请说明原出处,谢谢~~ 前些日子用wke内核封装了duilib的webkit浏览器控件,好多群里朋友私聊我希望可以我公布源码,今天把这个控件的源码和使用demo公布.其实这个控件封装起来没什么难度,我只是按照原来作者的demo,把相应的消息封装成duilib对应的. 在此首先要感谢wke内核的作者BlzFans以及soui2界面库的作者flyhigh,BlzFans精简了webkit内核后封装为wke并公布了源码,flyhigh对wke进行处理让他更容易移植到dui工程中.wke内核10M大