`
wjlgryx
  • 浏览: 308445 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android利用VideoView实现VideoPlayer

 
阅读更多

Android利用VideoView实现VideoPlayer

     在其他的平台上面可能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:具有VideoView的VideoPlayer

    总结来说,SimpleVideoPlayer是一个基于Java的Android视频播放器,它利用VideoView和MediaPlayer实现视频播放功能,提供了一种简单集成视频播放能力的方式。对于开发者来说,理解VideoView的工作原理和MediaPlayer的...

    videoPlayer仿qq侧滑

    在Android中,常见的`videoPlayer`实现有`VideoView`和`ExoPlayer`。`VideoView`是Android SDK内置的视图组件,适合简单的视频播放需求;而`ExoPlayer`则是Google推荐的高性能媒体播放器,支持更丰富的自定义和控制...

    android videoplayer

    "android videoplayer"项目旨在提供一个简单易用的解决方案,帮助开发者快速构建视频播放功能。这款源代码特别适合初学者或者对Android多媒体框架不太熟悉的开发者,通过学习可以深入理解Android视频播放的核心技术...

    android-videoplayer:在全屏模式下使用 VideoView 的基本模板(API 17 或更高版本)

    在这个“android-videoplayer”项目中,我们主要探讨的是如何在全屏模式下使用VideoView,适用于API级别17及以上版本的设备。下面我们将详细介绍这个过程中的关键知识点。 1. **VideoView组件**: - VideoView是一...

    VideoPlayer

    本篇文章将深入探讨基于Android平台的VideoPlayer源码Demo,旨在为初学者提供一个运行良好的起点,帮助他们快速理解和掌握安卓视频播放器的实现原理。 首先,VideoPlayer是Android SDK中提供的一个内置组件,主要...

    android侧滑示例demo

    在Android中,实现视频播放通常会用到`VideoView`或`ExoPlayer`。如果侧滑功能应用于视频播放器,那么侧滑操作可能用于隐藏或显示播放控制条,或者切换其他视频相关设置。 在实践中,侧滑效果的优化至关重要,包括...

    android MP4网络播放源码

    下面我们将深入探讨如何利用Android的多媒体框架来实现MP4网络播放功能,并基于提供的"test_videoplayer"源码进行分析。 首先,Android的多媒体框架主要由MediaPlayer类提供,它是处理媒体播放的核心组件。开发者...

    android系统原理及开发要点详解

     嵌入式Linux系统学习者:将Android作为一个集Linux核心和应用层程序于一体的系统进行学习,并可以利用Android的仿真环境运行和调试程序。  读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,...

    android rtsp player

    在Android中,我们通常利用`MediaPlayer`类来实现RTSP播放功能。`MediaPlayer`是Android提供的多媒体框架的一部分,能够处理各种类型的媒体资源,包括RTSP流。以下是一份简单的`MediaPlayer`初始化和播放RTSP流的...

    ArtPlayer:Kotlin实现的视频播放器,将MediaPlayer与VideoView解译,支持切换播放器内核(如ExoPlayer和ijkPlayer),支持自定义控制视图,提供MediaPlayerManager实现全屏模式,小屏幕模式等

    这款播放器不仅解耦了Android原生的MediaPlayer和VideoView,还允许用户在不同播放器内核之间自由切换,如ExoPlayer和ijkPlayer。这使得开发者可以根据项目的特定需求选择最适合的播放器内核,以优化性能和兼容性。 ...

    Videoplay边下载播放

    在Android平台上,实现边下边播通常会使用`VideoView`或`ExoPlayer`这样的组件。`VideoView`是Android系统自带的视图组件,它可以加载并播放媒体资源,但功能相对有限。而`ExoPlayer`是由Google开发的更高级、更...

    Android代码-调用系统默认播放器RTSP流媒体。.rar

    在标题和描述中提到的"调用系统默认播放器",在Android中通常意味着利用Intent来启动系统内置的视频播放器,比如VideoView或ExoPlayer。以下是使用Intent来打开系统默认播放器播放RTSP流的基本步骤: 1. 创建一个...

    videoplayer:基于vitamio视频播放器

    "videoplayer:基于vitamio视频播放器"项目是一个使用Java编写的Android应用程序,它利用了Vitamio库来实现视频播放功能。Vitamio是一个强大的多媒体框架,为开发者提供了在Android平台上轻松集成视频播放、音频播放...

    weex视频播放器

    在Android端,Weex的组件会映射到Android原生的View,这就意味着我们需要创建一个自定义的Android View来实现视频播放功能。 在创建自定义的视频播放组件时,我们可能会遇到以下关键问题: 1. **组件初始化**:在...

    安卓Android源码——使用Vitamio打造自己的万能播放器(1)——在线播放.zip

    本篇文章将详细讲解如何利用Vitamio库来实现这一功能,尤其是在线播放部分。 Vitamio是一个针对Android平台的多媒体框架,它提供了丰富的音频和视频解码支持,使得开发者可以轻松地处理各种格式的媒体文件。在标题...

    webview的基本使用在android

    由于Android系统原生不支持FLV的直接播放,因此我们无法像处理MP4那样直接使用VideoView。这时,我们需要借助第三方库,如Flash Player插件或者使用HTML5的`&lt;video&gt;`标签来实现。 1. **使用Flash Player插件**:在...

    WebView中的视频播放

    这时,我们可以使用`WebChromeClient`来拦截视频播放请求并使用自定义的VideoPlayer: ```java webView.setWebChromeClient(new WebChromeClient() { @Override public void onShowCustomView(View view, ...

    09_Android的多媒体系统

    具体来说,Android的多媒体应用业务非常广泛,包括MusicPlayer、VideoPlayer、Camera、SoundRecorder、Camcorder和VideoTelephone等。这些应用使用了底层框架和库来实现其功能。 在Java框架中,多媒体相关的类位于...

    android 视频播放

    在Android平台上,实现视频播放是开发过程中的常见需求。这里我们主要探讨三种常见的视频播放方式:使用系统内置的`VideoView`,利用`MediaPlayer` API,以及集成第三方库如ExoPlayer。 首先,`VideoView`是Android...

    android视频播放示例源代码

    "android视频播放示例源代码"为我们提供了一个宝贵的资源,它演示了如何利用ExoPlayer和VideoView这两个核心组件来实现高效的视频播放功能。下面将详细探讨这两个组件及其在支持RTMP、H265和H264编码格式时的关键...

Global site tag (gtag.js) - Google Analytics