• 【Android】20.2 视频播放


    分类:C#、Android、VS2015;

    创建日期:2016-03-11

    一、简介

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

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

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

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

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

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

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

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

    二、基本用法示例

    1、运行截图

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

    image

    单击【停止播放】按钮后,可继续单击【播放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;
            }
        }
    }
  • 相关阅读:
    (4.38)sql server中的事务控制及try cache错误处理
    (4.37)sql server中的系统函数
    【3.5】mysql常用开发规则30条
    Linux学习笔记(17)Linux防火墙配置详解
    (5.16)mysql高可用系列——keepalived+mysql双主ha
    mysql online DDL
    (5.3.8)sql server升级打补丁
    python request
    python 模块被引用多次但是里面的全局表达式总共只会执行一次
    Protocol Buffer Basics: Python
  • 原文地址:https://www.cnblogs.com/rainmj/p/5265193.html
Copyright © 2020-2023  润新知