Git Product home page Git Product logo

xiangyutian / freya-stream-caster-sdk-for-android Goto Github PK

View Code? Open in Web Editor NEW

This project forked from yufan2014/freya-stream-caster-sdk-for-android

0.0 1.0 0.0 83.9 MB

:zap:一款优秀的免费安卓RTMP推流SDK,适用于移动设备直播,JNI层全开源。拥有极强的性能与兼容性,是目前唯一支持全平台的软编推流SDK。针对ARM、ARMV7-A、ARM64-V8A、X86、X86_64、MIPS、MIPS64全平台极致优化。让低端设备也可以流畅地进行高清推流。

License: GNU General Public License v2.0

Java 0.51% Makefile 0.01% C++ 16.14% C 82.99% Objective-C 0.28% Shell 0.07%

freya-stream-caster-sdk-for-android's Introduction

FREYA-STREAM-CASTER-SDK-FOR-ANDROID

⚡FREYA STREAM CASTER SDK(ANDROID)是一款优秀的免费安卓RTMP推流SDK,适用于移动设备直播,JNI层全开源

拥有极强的性能与兼容性,是目前唯一支持全平台的软编推流SDK。针对ARM、ARMV7-A、ARM64-V8A、X86、X86_64、MIPS、MIPS64全平台极致优化。让低端设备也可以流畅地进行高清推流

联动项目:FREYA LIVE LIBRARY OPTIMIZER FOR ANDROID -- RTMP直播推流常用库的编译简化/优化工具

main push_portrait push_landscape

一、系统要求

1.开发IDE:ANDROID STUDIO

2.编译JNI层需要在LINUX X64下进行,编译需使用NDK R13或以上版本

3.运行环境默认为ANDROID 4.0.3及以上系统
如有需要,可通过修改JNI层编译脚本中的相关变量,使本软件支持更低版本的ANDROID系统,详见“如何编译JNI层”部分

二、支持平台

FREYA STREAM CASTER SDK(ANDROID)是目前支持平台数最多的RTMP直播推流SDK
支持ARM、ARMV7-A、ARM64-V8A、X86、X86_64、MIPS、MIPS64全平台,并针对这些平台进行了极致优化,延迟仅为1-2S

三、软件功能

1.支持H264+AAC编码,FLV封装的RTMP、RTMPT、RTMPE、RTMPTE、RTMPS推流

2.无视频分辨率限制,在摄像头支持的情况下可推高分辨率视频流(如1080P)

3.JNI层极致优化,让低端设备也可以流畅地进行高清推流

4.H264视频编码支持BASELINE、MAIN、HIGH、HIGH10、HIGH422、HIGH444全部PROFILE

5.H264视频编码支持ULTRAFAST、SUPERFAST、VERYFAST、FASTER、FAST、MEDIUM、SLOW、SLOWER、VERYSLOW、PLACEBO共10种速度模式

6.AAC音频编码支持LC、HE、HEv2全部PROFILE

7.支持横屏、竖屏推流

8.支持前后摄像头实时切换

9.支持视频+音频、单视频、单音频三种推流模式

10.支持视频码率自定义

11.支持视频GOP容量自定义(GOP容量参数用于取得视频质量、压缩率、延迟的平衡。GOP容量值越小,视频质量越高、压缩率越小、延迟越小。GOP容量值越大,视频质量越低、压缩率越大、延迟越大)

12.支持音频码率自定义

13.支持音频采样率自定义

14.支持音频单声道、立体声自定义

15.支持开关闪光灯

四、优化方案

FREYA STREAM CASTER SDK(ANDROID)的核心功能使用了FFMPEG、X264、FDKAAC、LIBRTMP(RTMPDUMP)、POLARSSL、LIBYUV开源项目
为最大程度提升运行效率,对这些组件与JNI层的编码推流核心进行了大量编译优化。具体优化方案如下:

1.ARM优化方案:
FFMPEG: VFP+针对ARMV5TE的CPU调优
X264: VFP+多核多线程优化+针对ARMV5TE的CPU调优
FDKAAC: VFP+针对ARMV5TE的CPU调优
LIBRTMP: 针对ARMV5TE的CPU调优
POLARSSL: 汇编优化+针对ARMV5TE的CPU调优
LIBYUV: VFP+针对ARMV5TE的CPU调优
JNI: 针对ARMV5TE的CPU调优

2.ARMV7-A优化方案:
FFMPEG: NEON指令集+VFPV3+针对ARMV7-A的CPU调优
X264: NEON指令集+VFPV3+多核多线程优化+针对ARMV7-A的CPU调优
FDKAAC: NEON指令集+VFPV3+针对ARMV7-A的CPU调优
LIBRTMP: 针对ARMV7-A的CPU调优
POLARSSL: 汇编优化+针对ARMV7-A的CPU调优
LIBYUV: NEON指令集+VFPV3+针对ARMV7-A的CPU调优
JNI: 针对ARMV7-A的CPU调优

3.ARM64-V8A优化方案:
FFMPEG: NEON指令集+VFPV4+针对ARM64-V8A的CPU调优
X264: NEON指令集+VFPV4+多核多线程优化+针对ARM64-V8A的CPU调优
FDKAAC: NEON指令集+VFPV4+针对ARM64-V8A的CPU调优
LIBRTMP: 针对ARM64-V8A的CPU调优
POLARSSL: 汇编优化+针对ARM64-V8A的CPU调优
LIBYUV: NEON指令集+VFPV4+针对ARM64-V8A的CPU调优
JNI: 针对ARM64-V8A的CPU调优

4.X86/X86_64优化方案:
FFMPEG: SSSE3指令集+汇编优化+针对ATOM的CPU调优
X264: SSSE3指令集+汇编优化+多核多线程优化+针对ATOM的CPU调优
FDKAAC: 针对ATOM的CPU调优
LIBRTMP: 针对ATOM的CPU调优
POLARSSL: 汇编优化+SSE2指令集+针对ATOM的CPU调优
LIBYUV: SSSE3指令集+针对ATOM的CPU调优
JNI: 针对ATOM的CPU调优

5.MIPS优化方案:
FFMPEG: DSP R2+MSA+MIPS FPU+针对MIPS32R2的CPU调优
X264: DSP R2+MSA+MIPS FPU+多核多线程优化+针对MIPS32R2的CPU调优
FDKAAC: DSP R2+MSA+MIPS FPU+针对MIPS32R2的CPU调优
LIBRTMP: 针对MIPS32R2的CPU调优
POLARSSL: 汇编优化+针对MIPS32R2的CPU调优
LIBYUV: DSP R2+MIPS FPU+针对MIPS32R2的CPU调优
JNI: 针对MIPS32R2的CPU调优

6.MIPS64优化方案:
FFMPEG: DSP R2+MSA+MIPS FPU+针对MIPS64R6的CPU调优
X264: DSP R2+MSA+MIPS FPU+多核多线程优化+针对MIPS64R6的CPU调优
FDKAAC: DSP R2+MSA+MIPS FPU+针对MIPS64R6的CPU调优
LIBRTMP: 针对MIPS64R6的CPU调优
POLARSSL: 汇编优化+针对MIPS64R6的CPU调优
LIBYUV: MIPS FPU+针对MIPS64R6的CPU调优
JNI: 针对MIPS64R6的CPU调优

五、如何编译JNI层

1.jni_source目录中,包含JNI层源码、依赖的静态库文件与头文件、编译脚本,其中编译需要用到的脚本如下:
freya_sdk_compile_all.sh用于一键编译所有平台的库文件
freya_sdk_compile_arm.sh用于编译ARM库文件
freya_sdk_compile_armv7a.sh用于编译ARMV7-A库文件
freya_sdk_compile_arm64v8a.sh用于编译ARM64-V8A库文件
freya_sdk_compile_x86.sh用于编译X86库文件
freya_sdk_compile_x86_64.sh用于编译X86_64库文件
freya_sdk_compile_mips.sh用于编译MIPS库文件
freya_sdk_compile_mips64.sh用于编译MIPS64库文件

2.JNI层的编译需在LINUX X64系统下进行,推荐UBUNTU-12.04.5-DESKTOP-AMD64或以上版本

3.编译需使用NDK R13或以上版本

4.jni_source目录中的armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips、mips64目录下,已经包含了编译JNI层所需的静态库文件与头文件
如需自己编译静态库并提取头文件,可使用我的另一个项目:FREYA LIVE LIBRARY OPTIMIZER FOR ANDROID

5.将jni_source目录中的文件复制到LINUX系统中

6.找到需要使用的编译脚本,并为脚本中需要配置的变量赋值

7.定义CURRENT_PATH变量,配置脚本所在的目录位置

8.定义NDKROOT_PATH变量,配置NDK所在的目录位置

9.定义PLATFORM_*_API变量(*代表ARM、ARMV7A、ARM64V8A、X86、X86_64、MIPS、MIPS64),配置对应各平台的ANDROID API级别,降低API级别可使本软件支持低版本的ANDROID系统

10.定义PLATFORM_NDK_TOOLCHAIN_VERSION变量,配置对应的TOOLCHAIN版本,默认为4.9,一般无需修改

11.配置完成后使用root用户运行对应各平台的编译脚本即可,编译完成后在freya_sdk_build_finished目录会生成相应的库文件

六、DEMO使用说明

1.如需测试功能,可去freya_apk目录中下载APK文件并安装

2.在界面中自定义H264编码PROFILE,H264编码模式,AAC编码PROFILE的格式:"H264编码PROFILE代码:H264编码模式代码:AAC编码PROFILE代码" 例子1->"B:SUPERFAST:L" 例子2->"M:SUPERFAST:H"

3.H264编码PROFILE对应代码:baseline->B main->M high->H high10->H10 high422->H422 high444->H444

4.H264编码模式代码:ULTRAFAST SUPERFAST VERYFAST FASTER FAST MEDIUM SLOW SLOWER VERYSLOW PLACEBO 自左向右编码速度从快到慢,编码质量从低到高

5.AAC编码PROFILE对应代码:aac_lc->L aac_he->H aac_he_v2->H2

6.在网络正常且带宽足够的情况下,如果画面出现马赛克,或延迟较高,则可能是GOP容量值设置过高,降低GOP容量值即可明显改善

7.如果出现声画不同步现象,则说明CPU占用率过高,降低分辨率或选择更快的H264编码模式即可明显改善

8.音频采样率推荐使用兼容性最好的44100HZ,部分移动设备不支持44100HZ外的其他采样率

七、其他事项

1.由于包含了编译JNI层所需的静态库文件与头文件,因此项目较大,请耐心下载

2.本软件遵守GPL协议

作者:jkkj93

freya-stream-caster-sdk-for-android's People

Contributors

jkkj93 avatar

Watchers

xiangyutian avatar

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.