首先我们来看一下 Android N 支持的视频文件有哪些。Android N 支持的视频格式下表所示。

Android N 支持的视频文件

格式/编码

支持的文件类型

H.263

3GPP(.3gp);MpEG-4(.mp4)

H.264 AVC

3GPP(.3gp);MpEG-4(.mp4)

MPEG-TS(.ts,AAC audio only,not seekable,Android 3.0+)

MPEG-4 SP

3GPP(.3gp)

VP8

WebM(.webm);Matroska mkv

视频播放器

与音频播放相比,视频播放需要使用视觉组件将影像显示出来。

在 Android SDK 中提供了多种播放视频文件的方法。例如,可以用 VideoView 或 SurfaceView 来播放视频,其中使用 VideoView 组件播放视频最为方便。

实例 VideoPlayDemo 演示了使用 android.widget.VideoView 组件进行视频播放的方法,运行效果如图 1 所示。

图 1  VideoPlayDemo 的运行效果

实例 VideoPlayDemo 中含有两个 Activity,其中 PlayVideo 含有 VideoView 组件对象,用于播放视频。视频文件存放在 SD 卡中,路径为“Movies/movie.3gp”。而 VideoPlayAcitvity 为主 Activity,用于启动 PlayVideo。

实例 VideoPlayDemo 中 MainActivity.java 的代码如下:

package introduction.android.videoplaydemo;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainAcitvity extends Activity {

/**

* Called when the activity is first created.

*/

private Button buttonOl;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

button01 = (Button) findViewById(R.id.buttonOl);

button0l.setOnClickListener(new buttonListener());

}

class buttonListener implements OnClickListener {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(MainActivity.this, PlayVideo.class);

MainAcitvity.this.startActivity(intent);

}

}

}

实例 VideoPlayDemo 中 PlayVideo.java 的代码如下:

package introduction.android.videoplaydemo;

import android.app.Activity;

import android.media.MediaPlayer;

import android.net.Uri;

import android.os.Bundle;

import android.widget.MediaController;

import android.widget.Toast;

import android.widget.VideoView;

public class PlayVideo extends Activity {

private VideoView videoView;

private MediaController mc;

private String path;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.other);

videoView = (VideoView) this.findViewById(R.id.videoView);

path = "sdcard/Movies/movie.3gp";

mc = new MediaController(this);

videoView.setMediaController(mc);

videoView.setVideoPath(path);

videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

@Override

public void onCompletion(MediaPlayer argO) {

// TODO Auto-generated method stub

finish();

}

});

videoView.requestFocus();

videoView.start();

}

}

其中,MediaController 类为 Android SDK 提供的视频控制器,用于显示播放时间,对播放视频进行控制。

通过 VideoView 类的 setMediaController() 方法可以将视频控制器和 VideoView 类结合在一起,对 VideoView 中播放的视频进行控制,大大降低了编码强度。

由于要播放的视频为放置在 SD 卡中的“Movies/movie.3gp”文件,VideoView 组件使用 setVideoPath() 方法即可指定该文件,并通过 start() 方法进行播放。

videoView.setOnCompletionListener(new OnCompletionListener(){

@Override

public void onCompletion(MediaPlayer argO) {

// TODO Auto-generated method stub

finish();

}

})

这行代码指定了 videoView 组件的视频播放完成事件的触发器,当视频播放完成后,关闭当前 Activity。

PlayVideo 使用的布局为 R.layout.other,该布局中含有 VideoView 组件,其所对应的 XML 文件 other.xml 的代码如下:

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

android:id="@+id/videoView"

android:layout_width="320px"

android:layout_height="240px" />

实例 VideoPlayDemo 中 AndroidManifest.xml 文件的代码如下:

package="introduction.android.videoplaydemo">

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

此外,VideoView 也支持网络流媒体的播放,只需将 VideoView 的 setVideoPath() 方法替换为 setViewURI(),并指定对应的 URI 即可。

需要注意的是,并不是所有的 MP4 和 3GP 文件都可以被 VideoView 组件播放,只有使用 progressive streamable 模式转化的影片才可以被播放。

播放网络流媒体文件时,需要在 AndroidManifest.xml 文件中添加相应权限:

android.permission.INTERNET 权限使当前应用程序可以访问网络资源;

android. permission.WAKE_LOCK 权限使当前应用程序运行时,手机不会进入休眠状态,以便于视频播放。

使用 SurfaceView 组件播放视频的方法也不复杂,而且更加灵活。

实例 MediaPlayerVideoDemo 演示了使用 SurfaceView 和 MediaPlayer 组件播放视频的方法,运行效果如图 2 所示。

图 2  MediaPlayerVideoDemo的运行效果

对应的布局文件 main.xml 的内容如下:

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

android:id="@+id/surfaceView1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1.01" />

android:id="@+id/linearLayout1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center">

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="播放" />

android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="暂停" />

android:id="@+id/button3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="重置" />

android:id="@+id/button4"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="停止" />

实例 MediaPlayerVideoDemo 的配置文件 AndroidManifest.xml 的内容如下:

package="introduction.android.videoPlayDemo"

android:versionCode="1"

android:versionName="1.0">

android:icon="@drawable/ic_launcher"

android:label="@string/app_name">

android:name=".VideoPlayDemoActivity"

android:label="@string/app_name">

实例 MediaPlayerVideoDemo 中的主 Activity 文件MainActivity.Java 的代码如下:

package introduction.android.videoplaydemo;

import java.io.IOException;

import android.app.Activity;

import android.media.AudioManager;

import android.media.MediaPlayer;

import android.os.Bundle;

import android.util.Log;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity {

/**

* Called when the activity is first created.

*/

private Button playbtn;

private Button pausebtn;

private Button replaybtn;

private Button stopbtn;

private SurfaceView surview;

private SurfaceHolder surHolder;

private MediaPlayer mp;

private String path = "sdcard/movies/movie.3gp";

protected boolean pause = false;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

surview = (SurfaceView) this.findViewById(R.id.surfaceView1);

surHolder = surview.getHolder();

surHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

mp = new MediaPlayer();

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

@Override

public void onCompletion(MediaPlayer mp) {

// TODO Auto-generated method stub

Log.i("mediaplayer", "播放完成");

}

});

playbtn = (Button) this.findViewById(R.id.buttonl);

playbtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View argO) {

// TODO Auto-generated method stub

if (!pause) {

//开始播放

mp.setAudioStreamType(AudioManager.STREAM_MUSIC);

mp.setDisplay(surHolder);

try {

mp.setDataSource(path);

mp.prepare();

mp.start();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else {

//暂停播放

mp.start();

pause = false;

}

}

});

pausebtn = (Button) this.findViewById(R.id.button2);

pausebtn.setOnClickListener(new OnClickListener() {

//暂停播放

@Override

public void onClick(View argO) {

// TODO Auto-generated method stub

if (mp != null) {

pause = true;

mp.pause();

}

}

});

replaybtn = (Button) this.findViewById(R.id.button3);

replaybtn.setOnClickListener(new OnClickListener() {

//重新播放

@Override

public void onClick(View argO) {

// TODO Auto-generated method stub

if (mp != null) {

mp.seekTo(0);

}

}

});

stopbtn = (Button) this.findViewById(R.id.button4);

stopbtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View argO) {

// TODO Auto-generated method stub

if (mp != null) {

mp.stop();

mp.release();

}

}

});

}

}

android视频播放格式,Android视频以及视频播放器实例相关推荐

  1. YUVPlayer: 基于Android平台的YUV视频原始数据播放器

    基于Android平台的YUV视频原始数据播放器 编译环境 FFmpeg版本: 4.2.2 NDK版本:r17c 运行环境 x86(模拟器) arm64-v8a(64位手机) 功能点 从文件中读取YU ...

  2. android怎么把动图变成视频格式,Android 录制手机屏幕视频生成GIF图片实例详解

    Android 录制手机屏幕视频生成GIF图片实例详解 无图无真相,在我们日常的网络交流中往往需要给交流对象提供直观的显示,而视频是一个很好的方式,但是视频需要播放器,还需要当做文件进行对点传输,并不 ...

  3. android flv格式的视频文件,android-如何运行mkv,flv,avi格式的视频文件?

    我正在制作一个项目,使用使用videoview的简单代码,我可以播放3gp amd mp4格式的视频文件 vv = (VideoView) findViewById(R.id.videoView); ...

  4. Android Service的使用方法 音乐播放器实例

    Service翻译成中文是服务,熟悉Windows 系统的同学一定知道很熟悉了.Android里的Service跟Windows里的Service功能差不多,就是一个不可见的进程在后台执行,避免被用户 ...

  5. android mjpg格式,android下mjpeg格式硬解码

    附件需要在android目录下编译,生成的so可以在ndk使用,支持yuyv/nv12/rgba3种格式 external/skia也需要略作修改 diff --git a/include/core/ ...

  6. android aac格式,android aac文件格式音频的录制和播放

    封装的工具类: package com.example.voaactest; import java.io.File; import java.io.FileNotFoundException; im ...

  7. android avc格式,Android权限 - avc权限问题

    1.一般来说,如何确认是Selinux权限引起的问题? 通过命令adb shell getenforce,查看Selinux状态 adb shell getenforce Enforcing  //1 ...

  8. android 过滤格式,android Intent.setType() 过滤图片,返回所有的文件类型

    处理方法 id.os.Bundle; public class StackOverflowAppActivity extends Activity { private final int PICK_I ...

  9. android 网格格式,Android 图标模板与icon网格设计标准(附PSD下载)

    目前安卓系统已经更新到Android 7.1啦,同时谷歌方面已经对外公布了新一代自主手机Pixel.PixelXL,并率先搭载安卓7.1系统. 但是,作为APP设计师,必须了解系统的新特性,比如安卓7 ...

最新文章

  1. (转)二叉树系列面试问题
  2. EEPROM存储器--AT24CXX
  3. 京东发布农民丰收节交易会大数据 互联网谋定现代农业
  4. laravel token ajax,Laravel中ajax post操作需要传递csrf token的最优化解决方式
  5. 漫步线性代数二十六——特征值和特征向量(续)
  6. Expected one result (or null) to be returned by selectOne(), but found: 2
  7. lateral函数oracle,ORACLE LATERAL-SQL-INJECTION 个人见解
  8. 使用C#将DataTable导出到文件
  9. C# async/await异步编程深入理解
  10. ffmpeg编码视频总结
  11. 【学堂在线数据挖掘:理论方法笔记】第一天(3.17)
  12. android动画之从源码角度分析动画原理
  13. Python3初级知识整理
  14. Rust: codewars的Simple Substitution Cipher Helper算法题、N种不简单的解法集
  15. EasyUI 使用图标不显示问题
  16. 转贴: 柴静 采访 张朝阳
  17. 微信支付相关(付款码支付,Native支付)
  18. 怎么用计算机进行进制间的换算,如何实现16进制与其他进制之间的转换,教你使用16进制计算器...
  19. 百度seo引流怎么做?一个免费分享知识的平台
  20. 基于Arduino、ESP8266的物联网项目开发方案整理、毕业设计(第二波)

热门文章

  1. Redis主从模式下过期数据和数据不一致
  2. python抓取腾讯视频弹幕_Python爬虫练习:腾讯视频弹幕数据采集
  3. golang 中的 int 和 int64 是相同的类型吗?
  4. 当乔丹和科比遇见了Python
  5. 【无标题】闲习业:分享一下副业兼职创业的方法
  6. 前端开发人员必备Web前端面试题与答案 西安尚学堂
  7. ESP8266-Arduino编程实例-PCF8574IO扩展模块驱动
  8. 黑夜的奇思妙想 idea java 文件分隔符\
  9. java 滚动截屏,Android滚动截屏的实现
  10. 基于阿里PTS性能测试流程