All Projects → microshow → Rxffmpeg

microshow / Rxffmpeg

🔥💥RxFFmpeg 是基于 ( FFmpeg 4.0 + X264 + mp3lame + fdk-aac + opencore-amr + openssl ) 编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,包含以下功能:视频拼接,转码,压缩,裁剪,片头片尾,分离音视频,变速,添加静态贴纸和gif动态贴纸,添加字幕,添加滤镜,添加背景音乐,加速减速视频,倒放音视频,音频裁剪,变声,混音,图片合成视频,视频解码图片,抖音首页,视频播放器及支持 OpenSSL https 等主流特色功能

Programming Languages

c
50402 projects - #5 most used programming language
java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Rxffmpeg

Ffmpegandroid
最新版ffmpeg3.3-android,并通过CMake方式移植到Android中,并实现编解码,转码,推拉流,滤镜等各种功能
Stars: ✭ 526 (-84.34%)
Mutual labels:  ffmpeg, encoder-decoder, ffmpeg-android
Ffmpeg Android
FFMpeg/FFprobe compiled for Android
Stars: ✭ 592 (-82.37%)
Mutual labels:  x86, ffmpeg, ffmpeg-android
Ffmpeg Android Maker
Contains a script that assembles FFmpeg library for Android
Stars: ✭ 207 (-93.84%)
Mutual labels:  ffmpeg, ffmpeg-android
Ffplayer
a video player based on ffmpeg for win32 and android platform.
Stars: ✭ 210 (-93.75%)
Mutual labels:  ffmpeg, ffmpeg-android
httpsbook
《深入浅出HTTPS:从原理到实战》代码示例、勘误、反馈、讨论
Stars: ✭ 77 (-97.71%)
Mutual labels:  openssl, https
Kotlinffmpeg
Examples of using FFMpeg library on Android with Kotlin
Stars: ✭ 138 (-95.89%)
Mutual labels:  ffmpeg, ffmpeg-android
Caincamera
CainCamera is an Android Project to learn about development of beauty camera, image and short video
Stars: ✭ 2,397 (-28.62%)
Mutual labels:  ffmpeg, videoeditor
Fanplayer
A portable video player based on ffmpeg for windows and android platform.
Stars: ✭ 229 (-93.18%)
Mutual labels:  ffmpeg, ffmpeg-android
Bzijkplayer
基于cmake构建的ijkPlayer
Stars: ✭ 23 (-99.32%)
Mutual labels:  ffmpeg, ffmpeg-android
pki
Certificate Authority management suite
Stars: ✭ 23 (-99.32%)
Mutual labels:  openssl, https
GoRAT
GoRAT (Go Remote Access Tool) is an extremely powerful reverse shell, file server, and control plane using HTTPS reverse tunnels as a transport mechanism.
Stars: ✭ 34 (-98.99%)
Mutual labels:  https, x86
Mobile Ffmpeg
FFmpeg for Android, iOS and tvOS. Not maintained anymore. Superseded by FFmpegKit.
Stars: ✭ 3,204 (-4.59%)
Mutual labels:  ffmpeg, opencore-amr
Patch
Something could be public patches
Stars: ✭ 120 (-96.43%)
Mutual labels:  ffmpeg, openssl
Screen Recorder Ffmpeg Cpp
*Multimedia project* A screen recording application to capture your desktop and store in a video format. Click here to watch the demo
Stars: ✭ 98 (-97.08%)
Mutual labels:  ffmpeg, encoder-decoder
Ffmpegandroid
android端基于FFmpeg实现音频剪切、拼接、转码、编解码;视频剪切、水印、截图、转码、编解码、转Gif动图;音视频合成与分离,配音;音视频解码、同步与播放;FFmpeg本地推流、H264与RTMP实时推流直播;FFmpeg滤镜:素描、色彩平衡、hue、lut、模糊、九宫格等;歌词解析与显示
Stars: ✭ 2,858 (-14.89%)
Mutual labels:  ffmpeg, videoeditor
Ffmpegandroidlibrary
One line integration for FFMPEG Library in Android
Stars: ✭ 88 (-97.38%)
Mutual labels:  ffmpeg, ffmpeg-android
jota-cert-checker
Check SSL certificate expiration date of a list of sites.
Stars: ✭ 45 (-98.66%)
Mutual labels:  openssl, https
Android Video Trimmer
Android-Video-Trimmer项目实现了对长短视频进行片段的裁剪选择。使用MediaMetadataRetriever获取视频帧,采用ffmpeg进行视频裁剪,和视频压缩。
Stars: ✭ 824 (-75.46%)
Mutual labels:  ffmpeg, ffmpeg-android
BaaSDelphiSamples
💾 Code samples for BaaS and PaaS using Delphi
Stars: ✭ 30 (-99.11%)
Mutual labels:  openssl, https
FFmpeg-3.4-Android
This repository helps to compile FFmpeg 3.4 Version for Android using Android NDK Standalone Toolchain.
Stars: ✭ 23 (-99.32%)
Mutual labels:  ffmpeg, ffmpeg-android

Language: English

RxFFmpeg

图-1:logo

RxFFmpeg 是基于 ( FFmpeg 4.0 + X264 + mp3lame + fdk-aac + opencore-amr + openssl) 编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,包含以下功能:视频拼接,转码,压缩,裁剪,片头片尾,分离音视频,变速,添加静态贴纸和gif动态贴纸,添加字幕,添加滤镜,添加背景音乐,加速减速视频,倒放音视频,#百变魔音#,音频裁剪,混音,图片合成视频,视频解码图片,抖音首页,#视频播放器#,及支持 OpenSSL https 等主流特色功能

『DEMO APP』

扫码 or 点击下载
图-1:扫码下载体验

编译环节

编译环境

  • win10 + ubuntu 16.04 + gcc + make

主要依赖以下库进行编译

库名 版本 下载地址
FFmpeg 4.0 http://ffmpeg.org/releases/ffmpeg-4.0.tar.bz2
X264 x264-snapshot-20180212-2245-stable http://download.videolan.org/x264/snapshots/x264-snapshot-20180212-2245-stable.tar.bz2
mp3lame 3.100 https://jaist.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
fdk-aac 0.1.6 https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz
opencore-amr 0.1.5 https://jaist.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.5.tar.gz
ndk android-ndk-r10e-linux-x86_64 https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip

编译脚本

特色功能

功能 是否支持 简述
FFmpeg命令 支持任何FFmpeg命令执行
FFmpeg进度回调 支持FFmpeg命令执行进度回调
FFmpeg中断 支持中断进行中的FFmpeg命令
同步执行 适用于多条命令分步执行
异步执行 适用于单条命令执行
Debug模式 支持开启/关闭 Debug 模式
getMediaInfo() 获取媒体文件详细属性信息
平台架构 支持 armeabi-v7a, arm64-v8a, x86, x86_64
硬件加速 支持硬件加速,使编解码处理更快(已开启MediaCodec)
单个so打包 支持把FFmpeg的各子模块打包成一个librxffmpeg-core.so核心库,无需导入七八个so库
X264 支持libx264编码库,可以使压缩后的视频体积变的极小,清晰度还保持着很高清
mp3lame 支持MP3音频编解码
fdk-aac 支持AAC音频编解码
opencore-amr version >= 4.7.0 支持amr音频编解码(转码时需指定:-ar 8000 -ac 1)
https version >= 3.1.0 支持 https
格式转换 如: avi > mp4 > avi; mp3 > aac > mp3 等
自研播放器 RxFFmpegPlayer播放器主打轻量、高效、低功耗、视频秒开等特色
常用命令 持续更新 点击查看

使用方式

Gradle

在根目录下的build.gradle里添加maven仓库

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

添加依赖,最新版本版本更新记录

dependencies {
    //以下选一个即可
    
    //完整版
    implementation 'com.github.microshow:RxFFmpeg:4.9.0'
    
    //极速版 (预计占用 4M 左右空间),主要移除了一些不常用的编解码器
    implementation 'com.github.microshow:RxFFmpeg:4.9.0-lite'
    
    //迷你版 (预计占用 1.5M 左右空间),主打压缩裁剪等基础通用功能,属于付费定制版,可联系作者
    implementation 'xxx.xxx.xxx'
    
}

如果你的App只要v7a平台,可以只保留armeabi-v7a,不过推荐加上arm64-v8a架构,这样性能会大大提升

defaultConfig {
    .
    .
    .
    ndk {
        //目前已支持 "armeabi-v7a","arm64-v8a","x86","x86_64" 平台架构
        abiFilters "armeabi-v7a","arm64-v8a","x86","x86_64"
    }
}

开始

  • 开启/关闭 debug 模式,建议在 Application 初始化调用
    RxFFmpegInvoke.getInstance().setDebug(true);
  • FFmpeg 命令执行 (RxJava2优雅的调用)
    private void runFFmpegRxJava() {

        String text = "ffmpeg -y -i /storage/emulated/0/1/input.mp4 -vf boxblur=25:5 -preset superfast /storage/emulated/0/1/result.mp4";

        String[] commands = text.split(" ");

        myRxFFmpegSubscriber = new MyRxFFmpegSubscriber(this);

        //开始执行FFmpeg命令
        RxFFmpegInvoke.getInstance()
                .runCommandRxJava(commands)
                .subscribe(myRxFFmpegSubscriber);

    }

    public static class MyRxFFmpegSubscriber extends RxFFmpegSubscriber {

        private WeakReference<HomeFragment> mWeakReference;

        public MyRxFFmpegSubscriber(HomeFragment homeFragment) {
            mWeakReference = new WeakReference<>(homeFragment);
        }

        @Override
        public void onFinish() {
            final HomeFragment mHomeFragment = mWeakReference.get();
            if (mHomeFragment != null) {
                mHomeFragment.cancelProgressDialog("处理成功");
            }
        }

        @Override
        public void onProgress(int progress, long progressTime) {
            final HomeFragment mHomeFragment = mWeakReference.get();
            if (mHomeFragment != null) {
                //progressTime 可以在结合视频总时长去计算合适的进度值
                mHomeFragment.setProgressDialog(progress, progressTime);
            }
        }

        @Override
        public void onCancel() {
            final HomeFragment mHomeFragment = mWeakReference.get();
            if (mHomeFragment != null) {
                mHomeFragment.cancelProgressDialog("已取消");
            }
        }

        @Override
        public void onError(String message) {
            final HomeFragment mHomeFragment = mWeakReference.get();
            if (mHomeFragment != null) {
                mHomeFragment.cancelProgressDialog("出错了 onError:" + message);
            }
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (myRxFFmpegSubscriber != null) {
            myRxFFmpegSubscriber.dispose();
        }
    }
  • FFmpeg 命令执行 (同步方式)
    RxFFmpegInvoke.getInstance().runCommand(command, null);
  • 中断 FFmpeg 命令
    RxFFmpegInvoke.getInstance().exit();
  • 构建命令,使用RxFFmpegCommandList构建,可以有效避免路径带有空格等问题
    public static String[] getBoxblur() {
        RxFFmpegCommandList cmdlist = new RxFFmpegCommandList();
        cmdlist.append("-i");
        cmdlist.append("/storage/emulated/0/1/input.mp4");
        cmdlist.append("-vf");
        cmdlist.append("boxblur=5:1");
        cmdlist.append("-preset");
        cmdlist.append("superfast");
        cmdlist.append("/storage/emulated/0/1/result.mp4");
        return cmdlist.build();
    }
  • 获取媒体文件信息
    RxFFmpegInvoke.getInstance().getMediaInfo(String filePath);

代码混淆

    -dontwarn io.microshow.rxffmpeg.**
    -keep class io.microshow.rxffmpeg.**{*;}

优质项目

* GSYVideoPlayer (Android端的视频播放器神器)

* AiSound百变魔音 (一个神奇的魔法声音)

* RetrofitGO (轻量级的网络请求库-支持缓存配置)

常用命令

* 常用命令汇总

* FFmpeg文档汇总

* FFmpeg Filters文档

ScreenShot

图-1:screenShot.gif

性能比对:arm64-v8a VS armeabi-v7a

图-2:arm64-v8a 图-1:armeabi-v7a

总结:可以看出arm64-v8a架构的运行效率远大于armeabi-v7a,强烈建议在你的App添加arm64-v8a架构的so,同时也是响应Google的号召。

实验室

自研视频播放器RxFFmpegPlayer

  • 自研RxFFmpegPlayer播放器内核基于(FFmpeg OpenGL OpenSL)

  • 主打轻量级、高效、低功耗,播放本地视频秒开等特色

  • 涵盖播放器基本的 播放、暂停、快进、快退、音量控制、声道控制、循环播放、播放进度、加载状态等功能

  • 支持播放本地视频文件、在线视频、直播流(hls、rtmp、m3u8…)等

  • 项目里已集成OpenSSL所以也支持Https访问

  • 视频画面支持双指缩放、旋转、移动等手势操作

  • 支持切换系统MediaPlayer内核

图-1:screen_player.gif

谁在用?

按登记顺序排序,更多接入APP,欢迎去这里登记(供开源用户参考),据不完整数据统计,目前已有上千款App已接入RxFFmpeg,为音视频项目赋能!

https://www.coolapk.com/apk/yanyan.com.tochar

沟通无限

欢迎加入高质量音视频交流群,RxFFmpeg助力您学习移动端音视频!

QQ群:799934185
图-1:qqGroup

感谢

撸码不易,如果觉得帮您节省了大量的开发时间,对您有所帮助,欢迎您的赞赏!

微信赞赏
图-1:weixin

License

Copyright 2020 Super

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].