• Stars
    star
    109
  • Rank 317,876 (Top 7 %)
  • Language
    Kotlin
  • Created about 4 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

这是一个由 kotlin 、C++ 编写的 RTMP 推流项目

AVRtmpPushSDK

欢迎关注 AVRtmpPushSDK 直播开源项目,这是一个由 kotlin 、C++ 编写的项目。整个项目完成了采集、 视音频处理、编码、数据发送前处理、数据发送的功能。整个项目支持 flv 封包,rtmp 上传,当然也向外面提供了封包和上传的相关接口。 整个项目均由个人编写完成,可能某些地方会有一些不足之处,欢迎您提出宝贵的意见和建议。

下载 APK 体验

支持功能

  • 音视频硬件编码
  • 动态码率调整
  • 摄像头参数设置
  • 音频编码参数设置
  • 视频编码参数设置
  • 支持添加图片、文字水印
  • 支持摄像头切换
  • 支持 flv 封包
  • 支持自动对焦
  • 支持 Live 模式下横竖屏动态切换

###要求

Android SDK 版本 18+

如何使用

1、添加远程依赖

implementation 'com.devyk.av.rtmp.library:AVRtmpPushSDK:1.0.0'

2、添加权限

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.CAMERA" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.autofocus" />

ps: 在Android 6.0以后很多权限需要动态申请. 如果你想快速使用,可以将项目的targetSdkVersion设置在23一下。

3、预览窗口

    <com.devyk.av.rtmp.library.widget.AVLiveView
            android:id="@+id/live"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            live:back="true"
            live:fps="25"
            live:sampleRate="44100"
            live:preview_height="1280"
            live:preview_width="720"
            live:videoMaxRate="300"
            live:videoMinRate="200"
    />

4、参数配置

4.1、XML 配置

是否后置摄像头优先 -> live:back

预览编码的帧率 -> live:fps

音频采样率 -> live:sampleRate

预览宽高 -> live:preview_height/live:preview_width

视频最大码率 -> live:videoMaxRate

视频最低码率 -> live:videoMinRate

4.2、代码配置

4.2.1 、音频采集编码参数设置

//初始化音频参数
var audioConfiguration = AudioConfiguration.createDefault()
live.setAudioConfigure(audioConfiguration)

4.2.2、视频编码参数设置

        var videoConfiguration = VideoConfiguration.Builder()
            .setBps(400, 800)
            .setFps(25)
            .setCodeType(VideoConfiguration.ICODEC.ENCODE)
            .setSize(320, 240)
            .setIfi(5)
            .setMediaCodec(true)
            .build()
        live.setVideoConfigure(videoConfiguration)

4.2.3、camera 预览参数设置

        //初始化 camera 参数
        var cameraConfiguration = CameraConfiguration.Builder()
            .setFacing(CameraConfiguration.Facing.FRONT)
            .setFps(25)
            .setPreview(320, 240)
            .build()
        live.setCameraConfigure(cameraConfiguration)

####5、设置打包器

var mPacker = RtmpPacker()
live.setPacker(mPacker)

6、设置发送器

private var mDataSource = "rtmp://[ip]:[port]/devykLive/live1"

 mSender = RtmpSender()
 mSender.setDataSource(mDataSource)
 live.setSender(mSender)

7、添加水印

    /**
     * OpenGL 物体坐标,对应 Android 屏幕坐标
     *
     * -1.0,1.0                             1.0,1.0
     *  -------------------------------------
     *  |                                   |
     *  |                                   |
     *  |                                   |
     *  |                                   |
     *  |                                   |
     *  |                                   |
     *  |                                   |
     *  |                                   |
     *  |                                   |
     *  |                   这里就是水印坐标   |
     *  |                          |-----    |
     *  |                          |    |    |
     *  |                          ——-—-|    |
     *  --------------------------------------
     * -1.0,1.0                             1.0,-1.0
     * 默认水印坐标地址,对应在屏幕右下角,用户可以自定义坐标
     */
    private var mVertexData = floatArrayOf( 
        0.55f, -0.9f, //第一个点 左下角
        0.9f, -0.9f, //第二个点 右下角
        0.55f, -0.7f, //第三个点 左上角
        0.9f, -0.7f //第四个点  右上角
    )

//设置 Bitmap 水印 第二个参数如果传 null 那么默认在右下角
live.setWatermark(Watermark(BitmapFactory.decodeResource(resources,R.mipmap.live_logo), mVertexData))

//设置文字水印 textSize 设置 20 那么会根据设置的坐标进行拉伸,传入 null 内部自动处理
live.setWatermark(Watermark("随播",Color.WHITE,20,null))

8、开始预览

live.startPreview()

9、连接 rtmp 服务器

mSender?.setOnConnectListener(lis: OnConnectListener)
mSender?.connect()
 
 //rtmp 直播服务器连接回调
 public interface OnConnectListener {
    /**
     * 开始链接
     */
    fun onConnecting()

    /**
     * 连接成功
     */
    fun onConnected()

    /**
     * 推送失败
     */
    fun onFail(message:String)

    /**
     * 关闭
     */
    fun onClose()
}

10、开始直播

//开始进行打包
mPacker.start()
//开始进行直播推流
live.startLive()

11、动态设置码率

 live.setVideoBps(bps:Int)

12、停止直播

//停止音视频采集编解码
live.stopLive()
//关闭 rtmp 服务
mSender?.close()
//关闭打包器
mPacker.stop()

13、横竖屏适配

//1、Activity 页面添加如下配置
   android:configChanges="orientation|keyboardHidden|screenSize"

//2. 实现横竖屏切换监听
    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        live.previewAngle(this)
    }

More Repositories

1

Blog

Android 面试宝典、数据结构和算法、音视频 (FFmpeg、AAC、x264、MediaCodec)、 C/C++ 、OpenCV、跨平台等学习记录。【0基础音视频进阶学习路线】
HTML
2,022
star
2

AVSample

0 基础音视频进阶路线 (MediaCodec、FFmpeg、OpenCV、OpenGL、短视频 SDK、音视频播放器、webrtc)
C
426
star
3

AVEditor

这是一款短视频编辑 SDK,仿 DouYin 音视频处理。功能包含有美颜、滤镜、贴纸、特效、录制、分段录制、速率录制、变声、配乐、rtmp 直播推流、图片转视频、剪辑,mp4/flv 格式封装等功能。动态库用的我另一个项目编译好的 https://github.com/yangkun19921001/AVFFmpegLib
C
360
star
4

DexEncryptionDecryption

APK 加固 dex 加密,解密 学习项目
Java
221
star
5

NDK_AV_SAMPLE

Android NDK 音视频 FFmpeg OpenGL OpenCV rtmp 直播 学习记录! 想要更全面的学习音视频可以点击👉(适合零基础入门音视频专栏)
C
151
star
6

KeepAlive

Android <=8.0 进程保活方案
Java
135
star
7

AVFFmpegLib

移植 FFmpeg 最新版本v4.4-dev-416 + libx264 + freetype + fontconfig + fribidi + openh264 +libfdk-aac + gnutls + speex + libwebp + lame +opus + opencore-amr + https)编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,目前内置了音视频剪辑、编辑、视频拼接、字幕、水印、倒放等功能,也可以根据 ffmpeg 命令模式来进行处理。
C
111
star
8

YKCrash

Android 崩溃捕获(Java,native)
C++
47
star
9

YKAVStudyPlatform

ffmpeg、ffplay、ffprobe 调试环境搭建,个人音视频全平台学习记录
C
38
star
10

AudioManager

这是一个 Android 端万能音频播放器,只要给我一个路径我就能进行播放。
C
37
star
11

LIBJPEG_SAMPLE

Android libjpeg 图片压缩,哈夫曼算法图片压缩
C
36
star
12

OpenRTCProject

基于 webrtc 实现的各种项目
JavaScript
36
star
13

long_picture_view

加载 长图控件,仿微博加载方式
Java
28
star
14

CustomViewSample

自定义View 练习 demo
Kotlin
23
star
15

Kotlin_GitHub

基于 Kotlin + MVP + retrofit + Okhttp +RxJava + Glide + anko + sw 限定符做了屏幕适配 等框架编写的 GitHub APP ,仅供学习
Kotlin
23
star
16

YKProBus

轻量级进程间通信框架,基于 Messenger 实现。进程间传递数据不错的选择
Java
23
star
17

MemoryFileWriteBytesYUV

解决执法仪本地录制和第三方软件同时使用摄像头资源不被占用的问题
Java
21
star
18

QTFFPlayer

MAC、Win、Linux、Android、IOS 跨平台播放器开发
C++
16
star
19

ffplay2

基于 ffplay 实现的 PC/Android/IOS 跨平台播放器
C
10
star
20

YKComponent

Android 组件化框架探索
Java
7
star
21

AndroidDpCode

Android 中 设计模式探索
Java
6
star
22

hotfix

基于类加载的热修复
Java
6
star
23

FWX_Component_Project

高仿微信(学习项目)
Java
6
star
24

ChatUI_Component

聊天输入框,列表,录像等框架
Java
6
star
25

YUVPlay

OpenGL, YUV 渲染
Java
6
star
26

T01_AV_SDKDEMO

[凌壹世纪科技有限公司](http://www.t01.com.cn/) VOIP 融合通信 SDK
Java
5
star
27

WebRTCSample

从 WebRTC 中抽代码
Java
5
star
28

WebFFplay

web 端基于 ffmpeg 实现音视频播放器的一个 demo
JavaScript
5
star
29

media_codec_sample

native 层 MediaCodec 硬编码代码提供 mk / cmake 编译 .s /.so
C
4
star
30

native_mediacodec_test

测试 native 调用 MediaCodec 代码
C++
4
star
31

FaceDetectionOpenCV

OpenCV+Dlib 人脸识别项目
C++
3
star
32

YEventBus

一个轻量级 EventBus ,支持根据 TAG 接收事件
Java
3
star
33

YKPluginAPK

Android 中插件化探索,动态加载 APK 文件中(Activity,Servicer,Broadcast)等一些资源。
Java
3
star
34

BaseComponent

基于前辈大神修改为属于自己的组件化框架 https://github.com/JessYanCoding/ArmsComponent/wiki
Java
3
star
35

ndk_sample

Android 调用 C/C++ 最简单的一个实例 零基础易看懂
Java
3
star
36

CustomHandler

实现简易的 Handler 线程间通信架构
Java
3
star
37

AndroidComponentTest

Android中一些常用的 Utils 或者 组件学习代码
Java
2
star
38

NDK_OpenGL_ES3.0

OpenGL ES 3.0 学习记录
C
2
star
39

YKDB

轻量级数据库,不用写 SQL ,仅仅通过注解就能完成对数据库的操作
Java
2
star
40

TTScreenDensity-master

今日头条适配方案
Java
2
star
41

solo-blog

DevYK 的个人博客 - 记录精彩的程序人生
1
star
42

h264-extractor

Wireshark 中获取 H264 视频码流
Lua
1
star
43

KingKongRTC

This is a cross-platform RTC library
C++
1
star
44

battery

电量优化 部分代码
Java
1
star
45

component_project

基于前辈大神修改为属于自己的组件化框架 https://github.com/JessYanCoding/ArmsComponent/wiki
Java
1
star
46

BitmapMemoryManager

Bitmap 三级缓存
Java
1
star