本项目使用Androidstudio开发工具

引入权限

引入依赖

//视频录制

implementation 'cjt.library.wheel:camera:1.1.9'

//视频播放

api('com.shuyu:GSYVideoPlayer:6.0.1') {

exclude group: 'com.android.support:appcompat-v7:27.0.0'

}

api('com.shuyu:gsyVideoPlayer-java:6.0.1') {

exclude group: 'com.android.support:appcompat-v7:27.0.0'

}

api('com.shuyu:GSYVideoPlayer-exo2:6.0.1') {

exclude group: 'com.android.support:appcompat-v7:27.0.0'

}

image

maven {

url 'https://dl.bintray.com/cjt/maven'

}

image

activity_main.xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="拍视频"

/>

android:id="@+id/show_img"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

MainActivity

package heath.com.recordvideo;

import android.Manifest;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.graphics.Bitmap;

import android.os.Build;

import android.os.Environment;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

import java.io.File;

import heath.com.recordvideo.utils.ACache;

public class MainActivity extends AppCompatActivity {

private Button button;

public static ACache aCache;

public static File cache;

private static ImageView mShowImg;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

open();

init();

button = this.findViewById(R.id.btn);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(

MainActivity.this,

RecordVideoActivity.class);

startActivityForResult(intent, 0);

}

});

}

public static void update(Bitmap bitmap){

mShowImg.setImageBitmap(bitmap);

}

private void init() {

aCache = ACache.get(this);

mShowImg = findViewById(R.id.show_img);

cache = new File(Environment.getExternalStorageDirectory() + "/" + getPackageName() + "/nim", "cache");

if (!cache.exists()) {

cache.mkdirs();

}

}

private void open() {

if (Build.VERSION.SDK_INT >= 23) {

int REQUEST_CODE_CONTACT = 101;

String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.CAMERA};

//验证是否许可权限

for (String str : permissions) {

if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {

//申请权限

this.requestPermissions(permissions, REQUEST_CODE_CONTACT);

}

}

}

}

}

视频录制和拍照

activity_record_video.xml

android:layout_width="match_parent"

android:layout_height="match_parent"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:orientation="vertical">

android:id="@+id/jcv_video"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:duration_max="10000"

app:iconMargin="20dp"

app:iconSize="30dp"

app:iconSrc="@drawable/icon_switch"/>

RecordVideoActivity

package heath.com.recordvideo;

import android.content.Intent;

import android.graphics.Bitmap;

import android.os.Build;

import android.os.Bundle;

import android.os.Environment;

import android.support.v7.app.AppCompatActivity;

import android.util.Log;

import android.view.View;

import android.widget.Toast;

import com.cjt2325.cameralibrary.JCameraView;

import com.cjt2325.cameralibrary.listener.ClickListener;

import com.cjt2325.cameralibrary.listener.ErrorListener;

import com.cjt2325.cameralibrary.listener.JCameraListener;

public class RecordVideoActivity extends AppCompatActivity {

private JCameraView mJcvVideo;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_record_video);

initView();

initListener();

init();

}

@Override

protected void onResume() {

super.onResume();

mJcvVideo.onResume();

}

@Override

protected void onPause() {

super.onPause();

mJcvVideo.onPause();

}

private void initView() {

mJcvVideo = findViewById(R.id.jcv_video);

}

private void initListener() {

mJcvVideo.setErrorLisenter(new ErrorListener() {

@Override

public void onError() {

//打开Camera失败回调

Log.i("CJT", "open camera error");

}

@Override

public void AudioPermissionError() {

//没有录取权限回调

Log.i("CJT", "AudioPermissionError");

}

});

mJcvVideo.setJCameraLisenter(new JCameraListener() {

@Override

public void captureSuccess(Bitmap bitmap) {

//获取图片bitmap

Log.i("CJT", "bitmap = " + bitmap);

MainActivity.update(bitmap);

finish();

}

@Override

public void recordSuccess(String url, Bitmap firstFrame) {

//获取视频路径

Log.i("CJT", "url = " + url);

Intent intent = new Intent(

RecordVideoActivity.this,

ShowVideo.class);

intent.putExtra("path", url);

startActivityForResult(intent, 0);

finish();

}

});

mJcvVideo.setLeftClickListener(new ClickListener() {

@Override

public void onClick() {

finish();

}

});

mJcvVideo.setRightClickListener(new ClickListener() {

@Override

public void onClick() {

Toast.makeText(RecordVideoActivity.this, "Right", Toast.LENGTH_SHORT).show();

}

});

}

private void init() {

if (Build.VERSION.SDK_INT >= 19) {

View decorView = getWindow().getDecorView();

decorView.setSystemUiVisibility(

View.SYSTEM_UI_FLAG_LAYOUT_STABLE

| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_FULLSCREEN

| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

} else {

View decorView = getWindow().getDecorView();

int option = View.SYSTEM_UI_FLAG_FULLSCREEN;

decorView.setSystemUiVisibility(option);

}

//设置视频保存路径

mJcvVideo.setSaveVideoPath(Environment.getExternalStorageDirectory() + "/" + getPackageName() + "/nim/"+"cache");

//设置只能录像或只能拍照或两种都可以(默认两种都可以)

mJcvVideo.setFeatures(JCameraView.BUTTON_STATE_BOTH);

//设置视频质量

mJcvVideo.setMediaQuality(JCameraView.MEDIA_QUALITY_HIGH);

}

}

视频播放

activity_show_video.xml

android:id="@+id/activity_play"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#000000">

android:id="@+id/video_player"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_centerInParent="true" />

ShowVideo

package heath.com.recordvideo;

import android.content.Intent;

import android.content.pm.ActivityInfo;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.ImageView;

import com.shuyu.gsyvideoplayer.GSYVideoManager;

import com.shuyu.gsyvideoplayer.utils.OrientationUtils;

import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;

public class ShowVideo extends AppCompatActivity {

StandardGSYVideoPlayer videoPlayer;

OrientationUtils orientationUtils;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_show_video);

init();

}

private void init() {

Intent intent = getIntent();

videoPlayer = this.findViewById(R.id.video_player);

String source1 = (String) intent.getSerializableExtra("path");

videoPlayer.setUp(source1, true, "测试视频");

//增加封面

ImageView imageView = new ImageView(this);

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

videoPlayer.setThumbImageView(imageView);

//增加title

videoPlayer.getTitleTextView().setVisibility(View.VISIBLE);

//设置返回键

videoPlayer.getBackButton().setVisibility(View.VISIBLE);

//设置旋转

orientationUtils = new OrientationUtils(this, videoPlayer);

//设置全屏按键功能,这是使用的是选择屏幕,而不是全屏

videoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

orientationUtils.resolveByClick();

}

});

//是否可以滑动调整

videoPlayer.setIsTouchWiget(true);

//设置返回按键功能

videoPlayer.getBackButton().setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onBackPressed();

}

});

videoPlayer.startPlayLogic();

}

@Override

protected void onPause() {

super.onPause();

videoPlayer.onVideoPause();

}

@Override

protected void onResume() {

super.onResume();

videoPlayer.onVideoResume();

}

@Override

protected void onDestroy() {

super.onDestroy();

GSYVideoManager.releaseAllVideos();

if (orientationUtils != null)

orientationUtils.releaseListener();

}

@Override

public void onBackPressed() {

//先返回正常状态

if (orientationUtils.getScreenType() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {

videoPlayer.getFullscreenButton().performClick();

return;

}

//释放所有

videoPlayer.setVideoAllCallBack(null);

super.onBackPressed();

}

}

android服务拍视频,Android仿微信拍摄、录制视频,以及视频播放(基于JCameraView和GSYVideoPlayer)...相关推荐

  1. Android仿微信拍摄、录制视频,以及视频播放(基于JCameraView和GSYVideoPlayer)

    本项目使用Androidstudio开发工具 引入权限 <uses-permission android:name="android.permission.FLASHLIGHT&quo ...

  2. Android录制视频,仿微信小视频录制(一)

    Android录制视频,第一部分自定义控件 简述 公司有一个录制视频并上传的功能,录制视频具体使用类如下:硬件控制使用Camera,视频录制的格式音频等具体配置与录制使用MediaRecorder,预 ...

  3. Android 使用 CameraX 快速实现仿微信短视频录制

    Android 使用 CameraX 快速实现仿微信短视频录制(轻触拍照.长按录像) https://github.com/ldlywt/MyCameraX 微信短视频android端 https:/ ...

  4. android bmob 朋友圈,仿微信朋友圈视频效果 – MVideo

    MVideo 仿微信朋友圈视频效果,可以拖拽及缩放,视频查看,基于ijkplayer. Demo 入门 Step 1:在buil文件中添加JitPack仓库: allprojects { reposi ...

  5. Android 二维码扫描(仿微信界面),根据Google zxing

    Android 二维码扫描(仿微信界面),根据Google zxing Android项目开发中经常会用到二维码扫描,例如登陆.支付等谷歌方面已经有了一个开源库(地址: https://github. ...

  6. android 语音发送功能,Android仿微信、录制音频并发送功能

    MyRecorder(仿微信,录制音频并发送功能) ①布局实现(activity_main.xml)布局采用线性布局,上面使用的一个ListView,下面使用的是一个自定义的Button(会在下面进行 ...

  7. 仿微信的录制小视频功能

    仿微信的录制小视频功能 这里主要重点介绍录制的过程和录制完播放的过程,其次会简单介绍一下录制按钮的实现. 总纲简介 首先我们录制视频需要知道用到几个类 SurfaceView Camera Media ...

  8. android服务无法启动,Android服务无法启动(Android service would't start)

    Android服务无法启动(Android service would't start) 我正在尝试在Android中实现简单的服务,但我无法统计基本服务. 这是我的主要课程: import java ...

  9. 像微信一样录制视频和音频

    MediaUtils A demo of record audio and video about Android 一个在 Android 上实现录像和录音功能的小例子. GitHub 地址:http ...

  10. 怎么锁定电脑屏幕_怎么录制视频?在电脑上录制视频的步骤详解

    原标题:怎么录制视频?在电脑上录制视频的步骤详解 作为重要的办公工具之一,电脑可不只是用来发发文件.看看文档,有时候我们还会对它进行录屏.特别是在短视频自媒体行业中,学会.掌握电脑录屏是基础技能,很多 ...

最新文章

  1. 第七周项目一-友元函数(3)
  2. 添加lombok插件
  3. Redis使用过程出现类型转换异常问题- 20190220
  4. 【Java每日一题】20170302
  5. MITRE 发布防御知识库 Shield
  6. Centos 7 telnet 详解
  7. NET中的三种Timer的区别和用法
  8. 【Leetcode】数学题(Python)
  9. paip.提升安全性---WEB程序安全检测与防范
  10. WebStorm上vue模板设置
  11. 简单的加盐加密登录处理
  12. Android开发实用小工具八——汇率转换工具
  13. 零极点和系统稳定性关系
  14. Android Persistent常驻内存分析
  15. c语言 数组 常数,在c中创建一个常数数组
  16. FIX协议教程1-什么是FIX会话和管理消息
  17. 图片太大上传不了怎么缩小?jpg图片压缩大小的方法
  18. 华尔街风雨飘摇 甲骨文却展翅翱翔
  19. 【流媒体服务】安装推流转码工具(三):【1】下载安装ffmpeg推流转码工具
  20. 千兆级LTE的一小步,5G之路的一大步

热门文章

  1. Android 扫描器 测试(seuic) INSTALL_FAILED_MISSING_SHARED_LIBRARY
  2. E-R图(实体-关系图)的绘制步骤
  3. ubuntu20.04编译imu_tk时所遇问题
  4. 学生php实训个人总结300字,实训总结300字左右
  5. XMU信息类电气实训_____PLC实训报告
  6. 统计学三大相关系数——Kendall τ(tau)
  7. vant库 van-image标签无法引用本地图片
  8. 傅里叶变换 一维和二维快速傅里叶变换(代码和性能的优化)
  9. 海外问卷调查项目平台
  10. rockeMq linux 安装过程 注意一些细节