【Android】20.2 视频播放

分类:C#、Android、VS2015;

创建日期:2016-03-11

一、简介

本节例子和上一节的音频播放例子相似,也是最简单的示例,比如并没有考虑视频播放过程中电话打入的情况,也没有考虑复杂的控制。总之,如果你希望进一步学习复杂的例子,首先要先把最核心的简单例子搞明白,否则你连基本的设计思路都不知道,直接看复杂的例子或者实际项目中的代码肯定“事倍功半”,主要原因是你做不到举一反三,只会照搬,稍微让你修改一下功能你就晕了。

实现视频播放的常见方式有:

1、用VideoView和MediaController类实现视频播放

常用,在布局文件中使用VideoView结合MediaController来实现对其控制。本节主要演示它的基本用法。

VideoView控件可以从各种不同的来源(如文件系统、网站)下载视频文件并将视频播放出来。该控件提供了各种控制选项,例如控制视频界面的大小、缩放、着色等。

如果需要更细粒度的控制,也可以用MediaPlayer类来实现。

2、用SurfaceView和MediaPlayer类实现视频播放

这是早期版本提供的办法,实现代码较多。对这种实现有兴趣的可参考其他资料。

二、基本用法示例

1、运行截图

下面的截图是单击【播放RAW下的视频】按钮后看到的视频播放效果。

单击【停止播放】按钮后,可继续单击【播放SD卡Download下的视频】按钮观察,这里就不再截图了。

2、设计步骤

(1)添加视频文件

由于只是为了演示,所以该例子Raw文件夹下和SD卡的Download文件夹下存放的是同一个视频文件(videoviewdemo.mp4)。

至于如何将文件复制到SD卡上,请参看【常见问题解答】。

(2)添加ch2002Main.axml

<?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">
    <Button
        android:id="@+id/ch2002_btnRawStart"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="播放RAW下的视频" />
  <Button
      android:id="@+id/ch2002_btnSdcardStart"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="播放SD卡Dwonload下的视频" />
  <Button
        android:id="@+id/ch2002_btnStop"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="停止播放" />
    <VideoView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ch2002_videoView1"
        android:layout_margin="20dp" />
</LinearLayout>

(3)添加ch2002MainActivity.cs

using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;
using Android.Net;

namespace MyDemos.SrcDemos
{
    [Activity(Label = "例20-2 视频播放基本用法")]
    [IntentFilter(new[] { Intent.ActionMain }, Categories = new[] { ch.MyDemosCategory })]
    public class ch2002MainActivity : Activity
    {
        VideoView mVideoView;
        Button btnRawStart, btnSdcardStart, btnStop;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.ch2002Main);
            mVideoView = FindViewById<VideoView>(Resource.Id.ch2002_videoView1);
            btnRawStart = FindViewById<Button>(Resource.Id.ch2002_btnRawStart);
            btnSdcardStart = FindViewById<Button>(Resource.Id.ch2002_btnSdcardStart);

            Uri rawUri = Uri.Parse($"android.resource://{PackageName}/{Resource.Raw.videoviewdemo}");
            Uri sdcardUri = Uri.Parse($"{Environment.ExternalStorageDirectory.Name}/Download/videoviewdemo.mp4");

            btnRawStart.Click += delegate
            {
                StartVideo(rawUri);
            };

            btnSdcardStart.Click += delegate
            {
                StartVideo(sdcardUri);
            };

            btnStop = FindViewById<Button>(Resource.Id.ch2002_btnStop);
            btnStop.Click += delegate
            {
                mVideoView.StopPlayback();
                ChangePlayingState(true, false);
            };
        }

        private void StartVideo(Uri uri)
        {
            mVideoView.SetVideoURI(uri);
            mVideoView.SetMediaController(new MediaController(this));
            mVideoView.Start();
            ChangePlayingState(false, true);
        }

        private void ChangePlayingState(bool startEnabled,bool stopEnabled)
        {
            btnRawStart.Enabled = btnSdcardStart.Enabled = startEnabled;
            btnStop.Enabled = stopEnabled;
        }
    }
}
时间: 2024-08-01 04:28:28

【Android】20.2 视频播放的相关文章

[Exception Android 20] - Error:Execution failed for task &#39;:app:processDebugResources&#39;

Error:Execution failed for task ':app:processDebugResources'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\Android\adt-bundle-windows-x86_64-20140702\sdk\build-tools\22.0.1\aapt.ex

android 自己定义视频播放器之2/1

非常久没更新博客,相信大家年后都比較忙. 今天给大家带来了一款视频播放器,首先确认的得有几点. 1.首先得有个播放视频的view. 2.加点额外功能进去左边上下滑动调节亮度,右边上下滑动调节声量: 3.视频当然得有快进和快退,左右滑动快进和快退: 4.可全屏播放: 5.临时仅仅做了离线播放.下篇博客再去研究在线播放.视频路径 这是视频本地路径,视频资源的话你们自己去找.目录会自己主动创建.放在该目录以下就能够了 private String Path = Environment.getExter

Android视频播放方案选择——深刻分析android平台的视频播放优缺点

https://zhuanlan.zhihu.com/p/27029577?utm_source=qq&utm_medium=social Android我还可以相信你多少系列文章二之音视频播放 音频视频播放在现在的应用里面很常见,传统应用发展到一定阶段多少会引入音视频资源,特别是现在短视频被看作下一个增长爆发点,和之相关的创业层出不穷,作为开发者如何进行音视频技术选型非常关键 MediaPlayer和VideoView给我们提供了非常方便的播放音视频的能力,几乎不需要要写几行代码就可以完成.

玩转Android之在线视频播放控件Vitamio的使用

其实Android中自带的MediaPlayer本身就能播放在线视频,MediaPlayer结合SurfaceView播放在线视频也是不错的选择(如果你没有性能或者用户体验上的要求),关于MediaPlayer+SurfaceView播放在线视频我后面会给筒子们详细介绍,这里我想先说一下一个第三方的视频播放控件Vitamio的使用,这个控件用起来还是非常方便的,而且性能也不错,OK,废话不多说,先来看看我们今天的一个效果图. OK,这是一段网络视频,当视频处于缓冲状态时,会提示用户目前缓冲的百分

Android高级_视频播放控件

一.Android系统自带VideoView控件 1. 创建步骤: (1)自带视频文件放入res/raw文件夹下: (2)声明初始化VideoView控件: (3)创建视频文件Uri路径,Uri调用parse(),传入(”android.resource://”+getPackageName()+”/”+R.raw.video)当前字符串获取资源路径: (4)为视频控件设置播放路径,VideoView对象调用setVideoURI(),传入Uri对象: (5)开始播放,VideoView对象调用

Android进阶 自定义视频播放器

随着快手,抖音,西瓜视频等视频APP的崛起,视频播放已经成为主流,此时作为Android研发的你,想要提高自己的能力还不知道怎么开发视频播放器怎么行?所以今天就带着大家一起开发一个简易播放器:SmallVideoPlayer 一.需求分析 我们观察一个视频播放器,可以看到视频播放器除了正在播放的视频还有很多控件,比如播放按钮,暂停按钮,播放进度条,播放计时器等.这么多控件显然无法播放视频,但是他们都在控制视频的播放.由此可见视频播放器可以分为两层,一层为视频播放器控制层,一层为真正的视频播放层.

android多媒体(视频播放器)

##视频处理 一丶VideoView控件 点击创建一个播放器并播放视频 /**     * 播放视频     * @param view     */    public void play(View view){                vv.setVideoPath(path);        vv.start();        vv.seekTo(currentPositon);//从停的位置开始播放    }    /**     * 暂停播放     * @param view

Android多媒体播放之视频播放的方法

public class VideoViewTest extends Activity { private VideoView vv; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.as); vv = (VideoView) fi

Android开发之视频播放调用setVideoPath()方法

当setVideoPath()的时候,底层是这个走的: setVideoPath()-->setVideoURI()-->openVideo(): openVideo()只是setVideoURI()中的一部分,还有的没有写出来,下面看一下openVideo的具体内容: 1 private void openVideo() { 2 if (mUri == null || mSurfaceHolder == null) { 3 // not ready for playback just yet