当前位置: 首页 > news >正文

Android Studio新手开发第三十五天

目录

利用系统相机录制视频

利用视频视图与媒体控制条播放视频

利用系统相机录制视频

     与使用Camera工具结合MediaRecorder录制视频相比,使用系统相机录制视频在实现上较为简单,但它也有局限性。它的优缺点说明如下:

优点

  1. 开发简单:只需几行代码就可以启动系统相机,无需处理相机初始化、预览、编码等复杂逻辑。

  2. 稳定性高:系统相机经过厂商优化,通常比自定义相机更稳定,兼容性更好。

  3. 功能丰富:系统相机通常提供多种录制模式、滤镜、分辨率选择、变焦、闪光灯控制等功能,用户熟悉操作。

  4. 更新方便:系统相机的更新由手机厂商或Google负责,应用无需更新即可享受新功能。

缺点:

  1. 界面不可定制:无法自定义录制界面,无法与应用的UI风格统一。

  2. 功能受限:只能使用系统相机提供的功能,无法实现一些特定需求(如自定义滤镜、实时特效、自定义编码参数等)。

  3. 体验不一致:不同厂商的系统相机界面和操作方式不同,导致用户在不同设备上体验不一致。

  4. 返回数据限制:在某些设备上,返回的视频可能不是原始质量,或者可能被压缩,而且返回的数据中可能不包含视频的Uri,或者在某些情况下可能返回缩略图而不是文件。

        示例代码如下,在布局文件中添加两个按钮以及一个VideoView。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MultiMedia.CameraSnapVideoActivity"><Buttonandroid:id="@+id/button_Snap_Video"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="点击拍摄" /><Buttonandroid:id="@+id/button_start"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="开始播放视频"/><VideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>

        部分Java代码如下,主要看方法takeVideo以及活动结果启动器中的回调函数的逻辑处理。

public class CameraSnapVideoActivity extends AppCompatActivity implements View.OnClickListener {private final String TAG = "CameraSnapVideo";private Button button_Snap_Video, button_start;private VideoView videoView;private ActivityResultLauncher activityResultLauncher_video_bitmap;private Uri mVideoUri;private boolean hasVideo = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_camera_snap_video);initView();}private void initView() {button_Snap_Video = findViewById(R.id.button_Snap_Video);button_start = findViewById(R.id.button_start);videoView = findViewById(R.id.videoView);activityResultLauncher_video_bitmap = registerForActivityResult(new ActivityResultContracts.TakeVideo(), new ActivityResultCallback<Bitmap>() {@Overridepublic void onActivityResult(Bitmap result) {videoView.setVideoURI(mVideoUri);hasVideo = true;Log.d(TAG, "onActivityResult: " + mVideoUri.toString());}});button_Snap_Video.setOnClickListener(this);button_start.setOnClickListener(this);}@Overridepublic void onClick(View view) {if (view.getId() == R.id.button_Snap_Video){Log.d(TAG, "initView: ");takeVideo();}else if (view.getId() == R.id.button_start){if (!videoView.isPlaying() && hasVideo){videoView.start();}}}private void takeVideo() {// Android10开始必须由系统自动分配路径,同时该方式也能自动刷新相册ContentValues values = new ContentValues();Calendar calendar = Calendar.getInstance();String time = String.format("%s%s%s%s", calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), calendar.get(Calendar.MILLISECOND));// 指定图片文件的名称values.put(MediaStore.Video.Media.DISPLAY_NAME, "video_" + time);values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4"); // 类型为视频// 通过内容解析器插入一条外部内容的路径信息mVideoUri = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);activityResultLauncher_video_bitmap.launch(mVideoUri);}
}

        效果图如下,点击按钮后拍摄完视频,回来后点击播放可以看到刚刚录制的视频。视频保存在系统相册中,可以在系统相册中查看刚刚拍摄的视频。

利用视频视图与媒体控制条播放视频

        在上面用到了一个视图VideoView视频视图,这个视图是Android提供的视频播放控件,它可以用于播放视频以及控制视频的播放。视频视图VideoView的常用方法说明如下:

        1.setVideoURI:设置视频文件的URI路径。

        2.setVideoPath:设置视频文件的字符串路径。

        3.setMediaController:设置媒体控制条的对象。

        4.start:开始播放视频。

        5.pause:暂停播放视频。

        6.resume:恢复播放视频。

        7.suspend:结束播放并释放资源。

        8.getDuration:获取视频的总时长,单位为毫秒ms。

        9.getCurrentPosition:获取当前的播放位置。若返回值为视频总长即视频播放至末尾。

        10.isPlaying:判断视频是否在播放。

        在使用上面的示例代码是可以发现点击VideoView视频视图是没有任何反应的,因为它是显示播放界面而没有控制按钮以及进度条。它需要配合媒体控制条MediaController来实现基本的控制动作,如开始、暂停播放以及进度条等。

        MediaController媒体控制条的常用方法说明如下:

        1.setMediaPlayer:设置媒体播放器的对象,也就是指定要控制哪个VideoView。

        2.show:显示媒体控制条。

        3.hide:隐藏媒体控制条。

        4.isShowing:判断媒体控制条是否在显示。

        示例代码如下,媒体控制条MediaController无需再布局文件中添加,只需要添加视频视图VideoView即可,关于媒体控制条的设置只需在Java代码中设置即可。布局文件与上面的示例代码一致即可。Java代码与上面的示例代码类似,需要再方法initView添加一些代码,如下所示:

MediaController mediaController = new MediaController(this);
mediaController.setMediaPlayer(videoView);
videoView.setMediaController(mediaController);

        效果图如下,拍摄完视频后返回页面,点击视频视图区域会出现媒体控制条,如下图所示,它可以控制视频的启停以及快进快退,还会显示视频长度以及播放进度,点击进度条还可以跳转至对应位置。

http://www.dtcms.com/a/549322.html

相关文章:

  • 楚航科技全球首发4D卫星架构雷达,为高阶智能辅助驾驶升级感知边界
  • css3新增属性变形
  • 南凌科技SD-WAN全球组网方案技术解析:助力JINS完成600+门店数字化升级
  • 太原网站建设详细策划深圳网站设计招聘
  • 企业微信社群运营玩法有哪些?企业微信社群工具有哪些功能?——从拉新到留存的玩法设计与工具支撑
  • wordpress整站搬家首页空白问题怎么完整下载网站模板
  • AXI 4_FULL转AXI_Stream 流水线设计详解
  • TCP SYN 扫描发送器(重点:构造与发送)
  • 肺组织图像分类与肺癌图像分类数据集
  • 苏州哪个公司做网站好怎么建设
  • 【C++ 入门】:引用、内联函数与 C++11 新特性(auto、范围 for、nullptr)全解析
  • 打破协议壁垒——Profinet转ModbusTCP让逆变器与西门子PLC同频运行
  • 网站标题seo外包优化公司网络推广方案
  • Ming Lite 万能模型对标 GPT-4o 的多模态能力
  • 关于jupyter Notebook
  • 淘宝客网站设计网站开发岗位名称
  • 3.3 Lua代码中的协程
  • 11月即将召开-IEEE-机械制造方向会议 |2025年智能制造、机器人与自动化国际学术会议 (IMRA 2025)
  • 网页制作视频的网站建设天堂tv在线观看免费
  • Flink Keyed State 详解之六
  • Java static关键字深度解析
  • 对红色网站建设的建议个人logo创意设计免费
  • 沃航科技网站开发织梦网站打开慢
  • 自动驾驶中的传感器技术75——Navigation(12)
  • 基于Chrome140的TK账号自动化(关键词浏览)——运行脚本(三)
  • 多维尺度分析法(MDS)
  • 泰迪智能科技高校行业资源举例
  • 自动驾驶中的传感器技术73——Navigation(10)
  • 【设计模式】 组合模式(Composite)大白话讲解
  • 算力跃升!解析可嵌入整机的 6U VPX 异构高性能射频信号处理平台 AXW23