简单的说下一Android的几种视频播放功能:

1、VideoView:最简单的视频播放

<FrameLayout 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"
tools:context=".fragment.HotFragment"> <VideoView
android:id="@+id/vv"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </FrameLayout>
    private void initView(View v) {
VideoView videoView = v.findViewById(R.id.vv);
String uri="/storage/emulated/0/Download/APPNEWCARDEMO.mp4";
videoView.setVideoPath(uri);
videoView.start();
}

VideoView全屏:

public class SplashVideoView extends VideoView {
public SplashVideoView(Context context) {
super(context);
} public SplashVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
} public SplashVideoView(Context context, AttributeSet attrs, int
defStyleAttr) {
super(context, attrs, defStyleAttr);
} @Override
protected void onMeasure(int widthMeasureSpec, int
heightMeasureSpec) {
//我们重新计算高度
int width = getDefaultSize(0, widthMeasureSpec);
int height = getDefaultSize(0, heightMeasureSpec);
setMeasuredDimension(width, height);
} @Override
public void
setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
super.setOnPreparedListener(l);
} @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
}

2、SurfaceView+MediaPlayer 播放视频:使用方式

 <SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
    private SurfaceView surfaceView;
private MediaPlayer player;
private SurfaceHolder holder;
private void initView2(View v) {
surfaceView = v.findViewById(R.id.surfaceView);
String uri="/storage/emulated/0/Download/APPNEWCARDEMO.mp4"; player = new MediaPlayer(); try {
player.setDataSource(uri);
holder=surfaceView.getHolder();
holder.addCallback(new MyCallBack());
try {
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
player.start();
player.setLooping(true);
}
});
} catch (IOException e) {
e.printStackTrace();
}
} private class MyCallBack implements SurfaceHolder.Callback {
@Override
public void surfaceCreated(SurfaceHolder holder) {
player.setDisplay(holder);
} @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override
public void surfaceDestroyed(SurfaceHolder holder) { }
}

3、TextureView+MediaPlaye 播放视频:使用方式;

<TextureView
android:id="@+id/textureView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
private TextureView textureView;
private MediaPlayer player;
private void initView(View v) {
textureView = v.findViewById(R.id.textureView);
String uri="/storage/emulated/0/Download/APPNEWCARDEMO.mp4"; player = new MediaPlayer(); try {
player.setDataSource(uri);
textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) {
player.setSurface(new Surface(surfaceTexture));
try {
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
player.start();
player.setLooping(true);
}
});
} @Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i1) { } @Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
return true;
} @Override
public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { }
}); } catch (IOException e) {
e.printStackTrace();
}
}

以上是Android基本的视频播放方式,有什么不同我就先不介绍了,看项目需要;

下面介绍几种主流的视频开源项目:

1、ExoPlyer 谷歌的开源框架,使用方式:

  <com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
 private void initializePlayer(View v) {
playerView = (v.findViewById(R.id.video_view));
// 创建带宽
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
// 创建轨道选择工厂
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
// 创建轨道选择实例
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
// 创建播放器实例
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(getActivity(), trackSelector);
playerView.setPlayer(player);
// 创建加载数据的工厂
DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(getActivity(), Util.getUserAgent(getActivity(), "MyApplication"), null);
// 创建资源
Uri uri = Uri.parse("/storage/emulated/0/Download/APPNEWCARDEMO.mp4");
ExtractorMediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
player.prepare(mediaSource, false, true);
player.setPlayWhenReady(true);
}

ExoPlayer项目地址:https://github.com/google/ExoPlayer

2、JiaoZiVideoPlayer 视频播放、使用方式;

<cn.jzvd.JzvdStd
android:id="@+id/videoplayer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
JzvdStd jzvdStd = (JzvdStd) findViewById(R.id.videoplayer);
jzvdStd.setUp("http://jzvd.nathen.cn/c6e3dc12a1154626b3476d9bf3bd7266/6b56c5f0dc31428083757a45764763b0-5287d2089db37e62345123a1be272f8b.mp4"
, "视频标题", Jzvd.SCREEN_WINDOW_NORMAL);
jzvdStd.thumbImageView.setImage("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640"); //占位图

饺子饺子播放器开源地址:https://github.com/lipangit/JiaoZiVideoPlayer

3、ijkplayer

哔哩哔哩开源项目:https://github.com/bilibili/ijkplayer

Android几种视频播放方式,VideoView、SurfaceView+MediaPlayer、TextureView+MediaPlayer,以及主流视频播放器开源项目的更多相关文章

  1. GitHub上最著名的Android播放器开源项目大全

    GitHub上最著名的Android播放器开源项目大全                                                                          ...

  2. android 三种定位方式

    http://www.cnblogs.com/oudi/archive/2012/03/22/2411509.html 最近在看android关于定位的方式,查了很多资料,也做了相关实验,在手机上做了 ...

  3. github上十二款最著名的Android播放器开源项目

    1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...

  4. Android 五种存储方式个人总结

    一 . 文件存储 FileOutputStream out = openFileOutput("data",Context.MODE_PRIVATE); BufferedWrite ...

  5. Android四种布局方式

    线性布局 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap ...

  6. android五种存储方式

    http://www.cnblogs.com/smalltigerlee/archive/2011/11/10/2244143.html

  7. [android] 两种异步方式

    使用AsyncTask开启子线程获取服务器数据,更新界面UI /** * 异步任务 * * @author taoshihan * */ public class HttpAsyncTask exte ...

  8. Android MediaPlayer架构 -- MediaPlayer的创建过程

    本文系作者自己学习之所用,文章内容仅出自作者拙劣之思考,问题之处烦请不吝指教. MediaPlayer 能被用来控制音/视频文件或流媒体的回放.Android中以MediaPlayer类作为音视频播放 ...

  9. 以下三种下载方式有什么不同?如何用python模拟下载器下载?

    问题始于一个链接https://i1.pixiv.net/img-zip-...这个链接在浏览器打开,会直接下载一个不完整的zip文件 但是,使用下载器下载却是完整文件 而当我尝试使用python下载 ...

随机推荐

  1. 并发、并行与多线程——C++

    C++11标准在标准库中为多线程提供了组件. 并发: 并发指的是两个或多个独立的活动在同一时段内发生.同一时间段内可以交替处理多个操作.一个CPU交替处理多个任务,存在竞争关系,在逻辑上表现为一个时段 ...

  2. .htaccess 文件来进行用户组的目录权限访问控制

    <IfModule rewrite_module>RewriteEngine onRewriteRule ^((?:bootstrap|css|img|js||MathJax|video) ...

  3. STM8L LCD配置与com使用问题

    void LCD_GPIO_Config(void) { //SEG GPIO Init GPIO_Init(GPIOE, GPIO_Pin_0|GPIO_Pin_1,GPIO_Mode_Out_PP ...

  4. 一张图看懂AI、机器学习和深度学习的区别

    AI(人工智能)是未来,是科幻小说,是我们日常生活的一部分.所有论断都是正确的,只是要看你所谈到的AI到底是什么. 例如,当谷歌DeepMind开发的AlphaGo程序打败韩国职业围棋高手Lee Se ...

  5. 前端自动化构建工具 gulp 学习笔记 一、

    一.我对gulp的初期理解 是一种前端辅助开发工具 可以帮你把js,css,img等文件 合并.压缩,图片好像是合并为精灵图,合并为精灵图之后,还会生成一个css样式表. 官方解说是:基于流的自动化构 ...

  6. 软件开发者路线图梗概&书摘chapter5

    恒久学习:整个职业生涯,反馈回路,了解弱点 1.提高带宽:多维度.高效获取知识 博客.关注twitter动态.订阅邮件列表.加入本地用户组.技术大会.联系书的作者.在线教程 从信息的海洋中回到实际软件 ...

  7. python基础——1、python背景及特点——(YZ)

    在之前的两种编程语言(C.Java)的学习之后,迎来新的一种编程语言的学习,但毕竟本着学一样一定要认真学的精神(期望是这样)首先,最最最少不了的是了解编程语言的背景.范围.特点.功能,等等.经过阅读资 ...

  8. github上传代码返回403错误

    报错代码: ****************   表示上传的项目地址 remote: Permission to Jayson00/camera.git denied to Minelinkinpar ...

  9. maya_关于脚本编辑器导入python模块

    import sys for p in sys.path: print p rigDir = 'C:\Users\lenovo\Documents\maya\scripts\python\rigLib ...

  10. Centos7使用yum快速安装ansible

    ansible功能简介:ansible可以实现批量系统配置.批量软件部署.批量文件拷贝.批量运行命令等功能.主要基于ssh实现连接各个被控制端 yum默认安装的ansible,常用的配置文件有两个,一 ...