在其他的平台上面可能VideoPlayer开发是一个比较有挑战性的工作,但是在Android上面VideoPlayer的开发,基本上可以做到傻瓜式啦。本文简单对VideoPlayer的开发进行简单的介绍。
在Android系统中,是通过MediaPalyer类播放媒体文件的(包括视频和音频)。虽然这个类已经比较简单了,但是还需要控制各种状态,对于视频还需要设置输出窗口,还是需要仔细研究的。为了避免这些麻烦事儿,Android框架提供了VideoView类来封装MediaPalyer,这个VideoView类非常好用。Android自带的程序Gallery也是用VideoView实现的。本文以实例介绍怎样用VideoView来实现VideoPlayer,本文也参考了Android自带程序Gallery的实现。
创建一个VideoPlayer的工程。main.xml文件如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <VideoView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" /> </LinearLayout>
VideoPlayer.java文件如下:
package com.simon; import android.app.Activity; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.MediaController; import android.widget.VideoView; import android.content.pm.ActivityInfo; public class VideoPlayer extends Activity implements MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { public static final String TAG = "VideoPlayer"; private VideoView mVideoView; private Uri mUri; private int mPositionWhenPaused = -1; private MediaController mMediaController; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //Set the screen to landscape. this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); mVideoView = (VideoView)findViewById(R.id.video_view); //Video file mUri = Uri.parse(Environment.getExternalStorageDirectory() + "/1.3gp"); //Create media controller mMediaController = new MediaController(this); mVideoView.setMediaController(mMediaController); } public void onStart() { // Play Video mVideoView.setVideoURI(mUri); mVideoView.start(); super.onStart(); } public void onPause() { // Stop video when the activity is pause. mPositionWhenPaused = mVideoView.getCurrentPosition(); mVideoView.stopPlayback(); Log.d(TAG, "OnStop: mPositionWhenPaused = " + mPositionWhenPaused); Log.d(TAG, "OnStop: getDuration = " + mVideoView.getDuration()); super.onPause(); } public void onResume() { // Resume video player if(mPositionWhenPaused >= 0) { mVideoView.seekTo(mPositionWhenPaused); mPositionWhenPaused = -1; } super.onResume(); } public boolean onError(MediaPlayer player, int arg1, int arg2) { return false; } public void onCompletion(MediaPlayer mp) { this.finish(); } }
本例中只是播放外存储器(一般是sd卡)上的1.3gp文件。在onCreate方法中创建了Media control,这个组件可以控制视频的播放,暂停,回复,seek等操作,不需要你实现。
//Create media controller mMediaController = new MediaController(this); mVideoView.setMediaController(mMediaController);
然后只需要调用VideoView类的setVideoURI设置播放文件,start方法开始播放即可。
为了节省系统资源,一般需要在Activity的onPause方法中,暂停视频的播放。因为Activity已经不在前台了。在Activity的onResume中恢复视频的播放,因为这是Activity又变成前台程序了。不清楚的朋友可以去查看Activity lifecycle。
你可以通过实现MediaPlayer.OnErrorListener来监听MediaPlayer上报的错误信息。实现MediaPlayer.OnCompletionListener接口,将会在Video播完的时候得到通知,本例只是简单的结束程序。
你可能注意到,我们没有管理MediaPalyer的各种状态,这些状态都让VideoView给封装了,并且,当VideoView创建的时候,MediaPalyer对象将会创建,当VideoView对象销毁的时候,MediaPlayer对象将会释放。这样基本可以傻瓜式的实现媒体播放器了,太Easy了吧。
相关推荐
总结来说,SimpleVideoPlayer是一个基于Java的Android视频播放器,它利用VideoView和MediaPlayer实现视频播放功能,提供了一种简单集成视频播放能力的方式。对于开发者来说,理解VideoView的工作原理和MediaPlayer的...
在Android中,常见的`videoPlayer`实现有`VideoView`和`ExoPlayer`。`VideoView`是Android SDK内置的视图组件,适合简单的视频播放需求;而`ExoPlayer`则是Google推荐的高性能媒体播放器,支持更丰富的自定义和控制...
"android videoplayer"项目旨在提供一个简单易用的解决方案,帮助开发者快速构建视频播放功能。这款源代码特别适合初学者或者对Android多媒体框架不太熟悉的开发者,通过学习可以深入理解Android视频播放的核心技术...
在这个“android-videoplayer”项目中,我们主要探讨的是如何在全屏模式下使用VideoView,适用于API级别17及以上版本的设备。下面我们将详细介绍这个过程中的关键知识点。 1. **VideoView组件**: - VideoView是一...
本篇文章将深入探讨基于Android平台的VideoPlayer源码Demo,旨在为初学者提供一个运行良好的起点,帮助他们快速理解和掌握安卓视频播放器的实现原理。 首先,VideoPlayer是Android SDK中提供的一个内置组件,主要...
在Android中,实现视频播放通常会用到`VideoView`或`ExoPlayer`。如果侧滑功能应用于视频播放器,那么侧滑操作可能用于隐藏或显示播放控制条,或者切换其他视频相关设置。 在实践中,侧滑效果的优化至关重要,包括...
下面我们将深入探讨如何利用Android的多媒体框架来实现MP4网络播放功能,并基于提供的"test_videoplayer"源码进行分析。 首先,Android的多媒体框架主要由MediaPlayer类提供,它是处理媒体播放的核心组件。开发者...
嵌入式Linux系统学习者:将Android作为一个集Linux核心和应用层程序于一体的系统进行学习,并可以利用Android的仿真环境运行和调试程序。 读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,...
在Android中,我们通常利用`MediaPlayer`类来实现RTSP播放功能。`MediaPlayer`是Android提供的多媒体框架的一部分,能够处理各种类型的媒体资源,包括RTSP流。以下是一份简单的`MediaPlayer`初始化和播放RTSP流的...
这款播放器不仅解耦了Android原生的MediaPlayer和VideoView,还允许用户在不同播放器内核之间自由切换,如ExoPlayer和ijkPlayer。这使得开发者可以根据项目的特定需求选择最适合的播放器内核,以优化性能和兼容性。 ...
在Android平台上,实现边下边播通常会使用`VideoView`或`ExoPlayer`这样的组件。`VideoView`是Android系统自带的视图组件,它可以加载并播放媒体资源,但功能相对有限。而`ExoPlayer`是由Google开发的更高级、更...
在标题和描述中提到的"调用系统默认播放器",在Android中通常意味着利用Intent来启动系统内置的视频播放器,比如VideoView或ExoPlayer。以下是使用Intent来打开系统默认播放器播放RTSP流的基本步骤: 1. 创建一个...
"videoplayer:基于vitamio视频播放器"项目是一个使用Java编写的Android应用程序,它利用了Vitamio库来实现视频播放功能。Vitamio是一个强大的多媒体框架,为开发者提供了在Android平台上轻松集成视频播放、音频播放...
在Android端,Weex的组件会映射到Android原生的View,这就意味着我们需要创建一个自定义的Android View来实现视频播放功能。 在创建自定义的视频播放组件时,我们可能会遇到以下关键问题: 1. **组件初始化**:在...
本篇文章将详细讲解如何利用Vitamio库来实现这一功能,尤其是在线播放部分。 Vitamio是一个针对Android平台的多媒体框架,它提供了丰富的音频和视频解码支持,使得开发者可以轻松地处理各种格式的媒体文件。在标题...
由于Android系统原生不支持FLV的直接播放,因此我们无法像处理MP4那样直接使用VideoView。这时,我们需要借助第三方库,如Flash Player插件或者使用HTML5的`<video>`标签来实现。 1. **使用Flash Player插件**:在...
这时,我们可以使用`WebChromeClient`来拦截视频播放请求并使用自定义的VideoPlayer: ```java webView.setWebChromeClient(new WebChromeClient() { @Override public void onShowCustomView(View view, ...
具体来说,Android的多媒体应用业务非常广泛,包括MusicPlayer、VideoPlayer、Camera、SoundRecorder、Camcorder和VideoTelephone等。这些应用使用了底层框架和库来实现其功能。 在Java框架中,多媒体相关的类位于...
在Android平台上,实现视频播放是开发过程中的常见需求。这里我们主要探讨三种常见的视频播放方式:使用系统内置的`VideoView`,利用`MediaPlayer` API,以及集成第三方库如ExoPlayer。 首先,`VideoView`是Android...
"android视频播放示例源代码"为我们提供了一个宝贵的资源,它演示了如何利用ExoPlayer和VideoView这两个核心组件来实现高效的视频播放功能。下面将详细探讨这两个组件及其在支持RTMP、H265和H264编码格式时的关键...