Git Product home page Git Product logo

xvideo's Introduction

XVideo

xv api

一个能自动进行压缩的小视频录制库

关于我

github csdn

特征

  • 支持自定义小视频录制时的视频质量。

  • 支持自定义视频录制的界面。

  • 支持自定义最大录制时长和最小录制时长。

  • 支持自定义属性的视频压缩。

演示(请star支持)

Demo下载

Github

添加Gradle依赖

1.在项目根目录的 build.gradle 的 repositories 添加:

allprojects {
     repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

2.在主项目的 build.gradle 中增加依赖。

dependencies {
    ···
    implementation 'com.github.xuexiangjys:XVideo:1.0.2'
}

3.进行视频录制存储目录地址的设置。

/**
 * 初始化xvideo的存放路径
 */
public static void initVideo() {
    XVideo.setVideoCachePath(PathUtils.getExtDcimPath() + "/xvideo/");
    // 初始化拍摄
    XVideo.initialize(false, null);
}

视频录制

1.视频录制需要CAMERA权限和STORAGE权限。在Android6.0机器上需要动态获取权限,推荐使用XAOP进行权限申请。

2.调用MediaRecorderActivity.startVideoRecorder开始视频录制。

/**
 * 开始录制视频
 * @param requestCode 请求码
 */
@Permission({PermissionConsts.CAMERA, PermissionConsts.STORAGE})
public void startVideoRecorder(int requestCode) {
    MediaRecorderConfig mediaRecorderConfig = MediaRecorderConfig.newInstance();
    XVideo.startVideoRecorder(this, mediaRecorderConfig, requestCode);
}

3.MediaRecorderConfig是视频录制的配置对象,可自定义视频的宽、高、时长以及质量等。

MediaRecorderConfig config = new MediaRecorderConfig.Builder()
        .fullScreen(needFull)  //是否全屏
        .videoWidth(needFull ? 0 : Integer.valueOf(width)) //视频的宽
        .videoHeight(Integer.valueOf(height))  //视频的高
        .recordTimeMax(Integer.valueOf(maxTime)) //最大录制时间
        .recordTimeMin(Integer.valueOf(minTime)) //最小录制时间
        .maxFrameRate(Integer.valueOf(maxFrameRate)) //最大帧率
        .videoBitrate(Integer.valueOf(bitrate)) //视频码率
        .captureThumbnailsTime(1)
        .build();

视频压缩

使用libx264进行视频压缩。由于手机本身CPU处理能力有限的问题,在手机上进行视频压缩的效率并不是很高,大约压缩的时间需要比视频拍摄本身的时长还要长一些。

LocalMediaConfig.Builder builder = new LocalMediaConfig.Builder();
final LocalMediaConfig config = builder
        .setVideoPath(path)  //设置需要进行视频压缩的视频路径
        .captureThumbnailsTime(1)
        .doH264Compress(compressMode) //设置视频压缩的模式
        .setFramerate(iRate)  //帧率
        .setScale(fScale) //压缩比例
        .build();
CompressResult compressResult = XVideo.startCompressVideo(config);

混淆配置

-keep class com.xuexiang.xvideo.jniinterface.** { *; }

特别感谢

https://github.com/mabeijianxi/small-video-record

联系方式

qq交流群

gzh_weixin.jpg

xvideo's People

Contributors

xuexiangjys avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

xvideo's Issues

能适配华为的鸿蒙系统吗?

能适配华为的鸿蒙系统吗? android各个版本用上了都没问题 唯一就是鸿蒙系统 一装起来 打开就报错 说拿不到视频的路径

播放视频时Crash!

``java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.xuexiang.xvideodemo-1/base.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.xuexiang.xvideodemo-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.xuexiang.xvideodemo-1/lib/arm64, /data/app/com.xuexiang.xvideodemo-1/base.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_dependencies_apk.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_slice_0_apk.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_slice_1_apk.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_slice_2_apk.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_slice_3_apk.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_slice_4_apk.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_slice_5_apk.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_slice_6_apk.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_slice_7_apk.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_slice_8_apk.apk!/lib/arm64-v8a, /data/app/com.xuexiang.xvideodemo-1/split_lib_slice_9_apk.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libijkffmpeg.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:984)
at java.lang.System.loadLibrary(System.java:1562)
at tv.danmaku.ijk.media.player.IjkMediaPlayer$1.loadLibrary(IjkMediaPlayer.java:177)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.loadLibrariesOnce(IjkMediaPlayer.java:188)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.initPlayer(IjkMediaPlayer.java:229)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.(IjkMediaPlayer.java:225)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.(IjkMediaPlayer.java:216)
at com.xiao.nicevideoplayer.NiceVideoPlayer.initMediaPlayer(NiceVideoPlayer.java:383)
at com.xiao.nicevideoplayer.NiceVideoPlayer.start(NiceVideoPlayer.java:179)
at com.xiao.nicevideoplayer.TxVideoPlayerController.onClick(TxVideoPlayerController.java:369)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
06-04 17:08:31.924 31267-31278/com.xuexiang.xvideodemo E/art: No implementation found for void tv.danmaku.ijk.media.player.IjkMediaPlayer.native_finalize() (tried Java_tv_danmaku_ijk_media_player_IjkMediaPlayer_native_1finalize and Java_tv_danmaku_ijk_media_player_IjkMediaPlayer_native_1finalize__)
06-04 17:08:31.924 31267-31278/com.xuexiang.xvideodemo E/System: Uncaught exception thrown by finalizer
06-04 17:08:31.925 31267-31278/com.xuexiang.xvideodemo E/System: java.lang.UnsatisfiedLinkError: No implementation found for void tv.danmaku.ijk.media.player.IjkMediaPlayer.native_finalize() (tried Java_tv_danmaku_ijk_media_player_IjkMediaPlayer_native_1finalize and Java_tv_danmaku_ijk_media_player_IjkMediaPlayer_native_1finalize__)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.native_finalize(Native Method)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.finalize(IjkMediaPlayer.java:954)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:222)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:209)
at java.lang.Thread.run(Thread.java:761)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.