Android播放视频的三种方式示例

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Android播放视频的三种方式示例

泡在网上的日子 发表于2012-12-12 20:32,  297 次阅读 

摘要 在Android中,我们有三种方式来实现视频的播放: 1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。 2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。 3、使用MediaPlayer类和SurfaceVi

在Android中,我们有三种方式来实现视频的播放:

1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。

2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。

3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。


1、调用其自带的播放器:

1
2
3
4
5
6
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");   
//调用系统自带的播放器  
    Intent intent = new Intent(Intent.ACTION_VIEW);  
    Log.v("URI:::::::::", uri.toString());  
    intent.setDataAndType(uri, "video/mp4");  
    startActivity(intent);

2、使用VideoView来实现:

1
2
3
4
5
6
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v");  
VideoView videoView = (VideoView)this.findViewById(R.id.video_view);  
videoView.setMediaController(new MediaController(this));  
videoView.setVideoURI(uri);  
videoView.start();  
videoView.requestFocus();

3、使用MediaPlayer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package demo.camera;  
import java.io.IOException;  
import android.app.Activity;  
import android.media.MediaPlayer;  
import android.media.MediaPlayer.OnCompletionListener;  
import android.media.MediaPlayer.OnErrorListener;  
import android.media.MediaPlayer.OnInfoListener;  
import android.media.MediaPlayer.OnPreparedListener;  
import android.media.MediaPlayer.OnSeekCompleteListener;  
import android.media.MediaPlayer.OnVideoSizeChangedListener;  
import android.os.Bundle;  
import android.os.Environment;  
import android.util.Log;  
import android.view.Display;  
import android.view.SurfaceHolder;  
import android.view.SurfaceView;  
import android.widget.LinearLayout;  
/** 
 * 该实例中使用MediaPlayer完成播放,同时界面使用SurfaceView来实现 
 *  
 * 这里我们实现MediaPlayer中很多状态变化时的监听器 
 *  
 * 使用Mediaplayer时,也可以使用MediaController类,但是需要实现MediaController.mediaController接口 
 * 实现一些控制方法。 
 *  
 * 然后,设置controller.setMediaPlayer(),setAnchorView(),setEnabled(),show()就可以了,这里不再实现 
 * @author Administrator 
 
 */ 
public class VideoSurfaceDemo extends Activity implements OnCompletionListener,OnErrorListener,OnInfoListener,  
    OnPreparedListener, OnSeekCompleteListener,OnVideoSizeChangedListener,SurfaceHolder.Callback{  
    private Display currDisplay;  
    private SurfaceView surfaceView;  
    private SurfaceHolder holder;  
    private MediaPlayer player;  
    private int vWidth,vHeight;  
    //private boolean readyToPlay = false;  
             
    public void onCreate(Bundle savedInstanceState){  
        super.onCreate(savedInstanceState);  
        this.setContentView(R.layout.video_surface);  
                     
        surfaceView = (SurfaceView)this.findViewById(R.id.video_surface);  
        //给SurfaceView添加CallBack监听  
        holder = surfaceView.getHolder();  
        holder.addCallback(this);  
        //为了可以播放视频或者使用Camera预览,我们需要指定其Buffer类型  
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
             
        //下面开始实例化MediaPlayer对象  
        player = new MediaPlayer();  
        player.setOnCompletionListener(this);  
        player.setOnErrorListener(this);  
        player.setOnInfoListener(this);  
        player.setOnPreparedListener(this);  
        player.setOnSeekCompleteListener(this);  
        player.setOnVideoSizeChangedListener(this);  
        Log.v("Begin:::", "surfaceDestroyed called");  
        //然后指定需要播放文件的路径,初始化MediaPlayer  
        String dataPath = Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v";  
        try {  
            player.setDataSource(dataPath);  
            Log.v("Next:::", "surfaceDestroyed called");  
        } catch (IllegalArgumentException e) {  
            e.printStackTrace();  
        } catch (IllegalStateException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        //然后,我们取得当前Display对象  
        currDisplay = this.getWindowManager().getDefaultDisplay();  
    }  
         
    @Override  
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {  
        // 当Surface尺寸等参数改变时触发  
        Log.v("Surface Change:::", "surfaceChanged called");  
    }  
    @Override  
    public void surfaceCreated(SurfaceHolder holder) {  
        // 当SurfaceView中的Surface被创建的时候被调用  
        //在这里我们指定MediaPlayer在当前的Surface中进行播放  
        player.setDisplay(holder);  
        //在指定了MediaPlayer播放的容器后,我们就可以使用prepare或者prepareAsync来准备播放了  
        player.prepareAsync();  
             
    }  
    @Override  
    public void surfaceDestroyed(SurfaceHolder holder) {  
             
        Log.v("Surface Destory:::", "surfaceDestroyed called");  
    }  
    @Override  
    public void onVideoSizeChanged(MediaPlayer arg0, int arg1, int arg2) {  
        // 当video大小改变时触发  
        //这个方法在设置player的source后至少触发一次  
        Log.v("Video Size Change", "onVideoSizeChanged called");  
             
    }  
    @Override  
    public void onSeekComplete(MediaPlayer arg0) {  
        // seek操作完成时触发  
        Log.v("Seek Completion", "onSeekComplete called");  
             
    }  
    @Override  
    public void onPrepared(MediaPlayer player) {  
        // 当prepare完成后,该方法触发,在这里我们播放视频  
             
        //首先取得video的宽和高  
        vWidth = player.getVideoWidth();  
        vHeight = player.getVideoHeight();  
             
        if(vWidth > currDisplay.getWidth() || vHeight > currDisplay.getHeight()){  
            //如果video的宽或者高超出了当前屏幕的大小,则要进行缩放  
            float wRatio = (float)vWidth/(float)currDisplay.getWidth();  
            float hRatio = (float)vHeight/(float)currDisplay.getHeight();  
                 
            //选择大的一个进行缩放  
            float ratio = Math.max(wRatio, hRatio);  
                 
            vWidth = (int)Math.ceil((float)vWidth/ratio);  
            vHeight = (int)Math.ceil((float)vHeight/ratio);  
                 
            //设置surfaceView的布局参数  
            surfaceView.setLayoutParams(new LinearLayout.LayoutParams(vWidth, vHeight));  
                 
            //然后开始播放视频  
                 
            player.start();  
        }  
    }  
    @Override  
    public boolean onInfo(MediaPlayer player, int whatInfo, int extra) {  
        // 当一些特定信息出现或者警告时触发  
        switch(whatInfo){  
        case MediaPlayer.MEDIA_INFO_BAD_INTERLEAVING:  
            break;  
        case MediaPlayer.MEDIA_INFO_METADATA_UPDATE:    
            break;  
        case MediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING:  
            break;  
        case MediaPlayer.MEDIA_INFO_NOT_SEEKABLE:   
            break;  
        }  
        return false;  
    }  
    @Override  
    public boolean onError(MediaPlayer player, int whatError, int extra) {  
        Log.v("Play Error:::", "onError called");  
        switch (whatError) {  
        case MediaPlayer.MEDIA_ERROR_SERVER_DIED:  
            Log.v("Play Error:::", "MEDIA_ERROR_SERVER_DIED");  
            break;  
        case MediaPlayer.MEDIA_ERROR_UNKNOWN:  
            Log.v("Play Error:::", "MEDIA_ERROR_UNKNOWN");  
            break;  
        default:  
            break;  
        }  
        return false;  
    }  
    @Override  
    public void onCompletion(MediaPlayer player) {  
        // 当MediaPlayer播放完成后触发  
        Log.v("Play Over:::", "onComletion called");  
        this.finish();  
    }  
}
Android播放视频三种方式 Android中,我们有三种方式来实现视频播放: 1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。 2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。 3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。 阅读详情

相关推荐

Android WebView访问网页+自动播放视频+自动全屏+切换横屏

Android WebView网页访问在线视频并自动全屏横屏播放的简单实现

飞机火车巴雷特的博客 1万+

Android三种播放视频方式

Android中,我们有三种方式来实现视频播放: 1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。 2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。 3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。 1、调用其自带的

鸟人如风,不舍昼夜. 3543

Android 播放视频三种方式

Android提供了常见的视频的编码、解码机制。使用Android自带的MediaPlayer、MediaController等类可以很方便的实现视频播放的功能。支持的视频格式有MP4和3GP等。这些多媒体数据可以来自于Android应用的资源文件,也可以来自于外部存储器上的文件,甚至可以是来自于网络上的文件流。 下面来说一下视频播放的几种实现方式: 1、MediaController+VideoView实现方式 这种方式是最简单的实现方式。VideoView继承了SurfaceView同时实现了Me

qq_19688207的博客 8468

Android播放本地视频和Url视频方法

视频Url例子:https://recordcdn-qk.jfdaily.com/upload/vod/user1694515885005019/1697678251135382/preview/video.mp4。根据文件路径在浏览器中播放,可用于视频预览等场景。(3)相关生命周期中添加操作。用浏览器播放本地视频

qq_46269365的博客 7584

Android中Video的三种播放方式的实现

 在Android中,我们有三种方式来实现视频播放。   1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。   2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。   3、使用MediaPlayer类和SurfaceView来实现。这种方式最灵活,也

android的博客 2440

android 播放rtsp流的三种方式

android 播放rtsp流的三种方式

Jason_HD的博客 6029

android播放视频三种方式

Android中,我们有三种方式来实现视频播放: 1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。 2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。 3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。 1、调用其自带的

Mr_Hu404的博客 1062

android通过点击播放视频,Android三种播放视频方式

Android中,我们有三种方式来实现视频播放:1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。1、调用其自带的播放器:Uri uri ...

weixin_32771631的博客 2160

Android 视频播放三种方式

1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。 2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。 3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。 1、调用其自带的播放器: Uri uri = Uri.

myf0908的博客 404

Android播放视频三种方式

1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。 2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。 3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。1、调用其自带的播放器:Uri uri = Uri.parse(Environment

费..的博客 639

android 三种视频播放方式

Android中,我们有三种方式来实现视频播放: 1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。 2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。 3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。 1、调用其自带的

android小天地 974

Android多媒体学习十二:Android中Video的三种播放方式的实现

<br />在Android中,我们有三种方式来实现视频播放。<br /> <br />1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。<br /> <br />2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。<br /> <br />3、使用MediaPlayer类和SurfaceView来实现。这种方式最灵活,也最复杂。<br /> <br />下面给出这三种方式,<br

4万+
上一篇: Android Canvas绘图详解
下一篇: opencv提取轮廓与抠图
xdonx
博客等级 码龄19年 102粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值