Android入门1:使用VideoView和MediController播放视频
最近在搞Android,入门曲线还是挺陡峭的,主要还是自己对Java的理解不够深入。前后学习了几天,把最近学习到的一些知识点总结归纳一下,正所谓温故而知新。
目前想搞一个禁播视频站,主要内容都是一些大陆被墙的动漫啊,美剧啥的,比如我最爱的死亡笔记。内容不包含18禁的~感觉有些小伙伴要失望咯。
1. Android入门素材
以下罗列在我学习过程中使用的感觉还算不错的素材
a. Official Android Training:developer.android.com/training/index.html
b. 上述Android官方教程中文翻译版本:http://hukai.me/android-training-course-in-chinese/index.html
c. imooc网站[Android攻城狮入门系列]:http://www.imooc.com/index/search?words=android
d.《第一行代码-Android》pdf我放到自己的百度网盘里面,希望大家不要去告诉作者(笑)
链接: http://pan.baidu.com/s/1sjy3rw5 密码: 7gy6
2. VideoView和MediaController介绍
Android VideoView类为我们提供了十分方便的视频播放API,其主要方法有。
void start():开始播放
void stopPlayback():停止播放
void pause():暂停
void resume():重新播放
void seekTo(int msec):从第几毫秒开始播放
int getCurrentPosition():获取当前播放的位置
int getDuration():获取当前播放视频的总长度
boolean isPlaying():当前VideoView是否在播放视频
void setVideoPath(String path):以文件路径的方式设置VideoView播放的视频源。
void setVideoURI(Uri uri):以Uri的方式设置视频源,可以是网络Uri或本地Uri。
setMediaController(MediaController controller):设置MediaController控制器。
setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件。
setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件。
setOnPreparedListener(MediaPlayer.OnPreparedListener l)::监听视频装载完成的事件。
除了简单的操作和丰富的API以外,我们在装载视频时,无需进行编码,播放完成后也无需手动回收资源。
除了播放视频,Media Controller类则为我们提供了一个悬浮的操作栏,包含了播放,暂停,快进,快退,上一个,下一个等功能键。甚至连拖动进度条至某处播放都已经实现,简直是业界良心。在使用前VideoView和MediController需要相互指定控件。其内置方法有。
boolean isShowing():当前悬浮控制栏是否显示。
void setMediaPlayer(MediaController.MediaPlayerControl player):设置控制的组件。
void setPrevNextListeners(View.OnClickListener next,View.OnClickListener prev):设置上一个视频、下一个视频的切换事件。
默认情况下,Media Controller悬浮显示3s后隐藏,触摸响应的VideoView呼出。默认上一个,下一个按钮隐藏。
3.播放视频Demo程序
package cn.edu.sjtu.videoplayer.bannedvideoplayer;
import android.app.ProgressDialog;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;
import java.io.File;
public class MainActivity extends AppCompatActivity {
private VideoView vv_videoview;
private MediaController mController;
private Button btn_play;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_play = (Button) findViewById(R.id.btn_play);
vv_videoview = (VideoView) findViewById(R.id.vv_videoview);
mController = new MediaController(this);
// Button响应事件,播放本地视频
btn_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Uri videoUri = Uri.parse("http://www.androidbegin.com/tutorial/AndroidCommercial.3gp");
// vv_videoview.setVideoURI(videoUri);
File videoFile = new File("/sdcard/DCIM/Camera/test.mp4");
if (videoFile.exists()) {
vv_videoview.setVideoPath(videoFile.getAbsolutePath());
vv_videoview.setMediaController(mController);
vv_videoview.start();
vv_videoview.requestFocus();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Xml文件只有简单地一个Button和VideoView控件,节约篇幅就不上了,由于博主一直使用真机Debug,这里就不截图了。如果需要播放网络视频,只需要看我注释的两行,将setVideoPath()更改为相应的setVideoURI()就可以了。这里需要在AndroidManifest.xml添加两条权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
这里需要多啰嗦的,也是经常会困惑刚入门同志的几个点。
a. 增加的权限开头android.permission是小写的,Android Studio可能会默认补全为大写,导致没有相应权限。
b. VideoView虽然可以播放网络视频,但是网络视频流实际是分为Http协议和RTSP(Real Time Streaming Protocal)两种。RTSP协议支持实时播放,而Http协议则需要缓冲一定时间才能够播放。
c. 国内传统的视频站给出的URL并不是真实视频地址,因此像优酷,爱奇艺等网站的视频并不能直接使用VideoView播放。
4. Reference:
a) http://www.androidbegin.com/tutorial/android-video-streaming-videoview-tutorial/
b) http://www.cnblogs.com/plokmju/p/android_videoview.html
By tjt
2015.12.02
Android入门1:使用VideoView和MediController播放视频的更多相关文章
- Android 视频播放器 (二):使用MediaPlayer播放视频
在 Android 视频播放器 (一):使用VideoView播放视频 我们讲了一下如何使用VideoView播放视频,了解了基本的播放器的一些知识和内容.也知道VideoView内部封装的就是Med ...
- Android 视频播放器 (四):使用ExoPlayer播放视频
一.简介 ExoPlayer是一个Android应用层的媒体播放器,它提供了一套可替换Android MediaPlayer的API,可以播放本地或者是线上的音视频资源.ExoPlayer支持一些An ...
- Android开发 海康威视 多路视频播放(同时播放视频)
原文地址:Android开发 海康视频 多路视频播放 | Stars-One的杂货小窝 最近公司有个项目需要对接到海康监控摄像头来实现对应的实时播放和回放,但这两个不是我们今天要讨论的重点,APP首页 ...
- VideoView播放视频——Android
Android为开发人员提供了一种简单的播放视频媒体的方式,那就是VideoView,本篇博客就来讲讲VideoView如何播放视频,最后将以一个简单的Demo演示. VideoView VideoV ...
- Android实现播放视频
转载:http://www.bdqn.cn/news/201311/12100.shtml 使用VideoView播放视频 VideoView,用于播放一段视频媒体,它继承了SurfaceView,位 ...
- Android--使用VideoView播放视频
承香墨影 Android--使用VideoView播放视频 前言 之前有讲过如何使用SurfaceView配合MediaPlayer播放视频,其实Android还为开发人员提供了另外一种更简单 ...
- Android 播放视频文件
package com.example.myvideo2; import java.io.File; import android.app.Activity; import android.net.U ...
- Android 视频播放器 (一):使用VideoView播放视频
一.简介 作为Android开发,我们不可避免的会接触到视频播放,VideoView做为最简单的播放器,我们是不应该不会的. 下面简单介绍一下VideoView: VideoView是使用MediaP ...
- Android VideoView播放视频
今天介绍一下Android的视频播放控件VideoView,下面介绍一下VideoView的使用步骤: 1.在界面布局中定义VideoView组件,或者在程序中创建VideoView组件. 2.调用V ...
随机推荐
- kafka教程
一.理论介绍(一)相关资料1.官方资料,非常详细: http://kafka.apache.org/documentation.html#quickstart2.有一篇翻译版,基本一致,有些细节不 ...
- 转 jQuery(图片、相册)插件代码实例
jQuery想必大部分前端er都知道甚至很熟悉了,网上有数以万计的优秀的jQuery插件以及教程,今天收集了一些关于图片.相册的jQuery插件代码,希望会对你有所帮助. 1. 3D Gallery ...
- Ubuntu下搭建本地WordPress站点
想在本地搭建WordPress博客站点作测试用?本教程一步一步教您在Linux上搭建一个LAMP(Linux, Apache, MySQL, PHP)服务器并部署WordPress博客. 请注意在复制 ...
- android ConnectivityManager 检查是否有网络
一. ConnectivityManager 概要 ConnectivityManager是网络连接相关的管理器,它主要用于查询网络状态并在网络发生改变时发出状态变化通知.这个类主要负责的下列四个 ...
- HTML资源(推荐)
W3C在线验证工具:http://validator.w3.org/ (X)HTML嵌套规则:http://www.cnblogs.com/PeunZhang/archive/2012/03/11/2 ...
- 为什么我要使用一个20年前的IBM老键盘
为什么我要使用一个20年前的IBM老键盘 发表在 心得体会 | 3条评论 几天前,我在网上发了一张图片,想炫耀了一下我的新MacBook Pro笔记本强悍的多屏功能.没人感兴趣.但图上的那个老键盘却得 ...
- 转:sprintf与snprintf
sprintf与snprintf int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面 ...
- android-UI组件实例大全(六)------ImageView图像视图
图像视图:ImageView 继承view类,用于在屏幕上显示任何Drawable对象,通常用来显示图片: 这里的话我们介绍一些比较常用的属性: Path 1: android:adjustViewB ...
- 完整的开发一个ContentProvider步骤
1.定义自己的ContentProvider类,该类需要继承Android提供的ContentProvider基类.2.向Android系统注册这个"网站",也就是在Android ...
- 51单片机C51毫秒级(ms)精确延时
如下程序能实现ms毫秒级的比较精确的延时 void Delayms(unsigned int n) { unsigned int i,j; ;j--) ;i>;i--); } 用keil可以看出 ...