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:previewheight/live:previewwidth

视频最大码率 -> 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)}

android上传项目到码云_直播开源项目相关推荐

  1. 如何使用git上传本地代码到码云上(超详细的呦)

    如何使用git上传本地代码到码云上(超详细的呦) 文章目录 如何使用git上传本地代码到码云上(超详细的呦) 一.准备工作 二.通过git把项目代码提交到本地仓库 三.把本地仓库代码提交到码云 一. ...

  2. 如何在mac端上用git上传代码到码云

    前言:作为一个合格的猿,SVN的使用相信大家已经非常熟悉了,GIT作为一个强大的版本控制工具,也是非常有必要深入学习的.对比两个工具,说说GIT的优缺点: 优点:1.GIT拥有全世界的资源,大部分优秀 ...

  3. 2017 码云最火开源项目 TOP 50,你用过哪些?

    2017 年度码云热门项目排行榜 TOP 50 出炉啦!我们根据所有开源项目在码云的用户关注度.活跃度.访问量等信息来对"热门"进行量化,从而筛选出了其中最"热门&quo ...

  4. 码云最火开源项目 TOP 50

    码云热门项目排行榜 TOP 50 出炉啦!我们根据所有开源项目在码云的用户关注度.活跃度.访问量等信息来对"热门"进行量化,从而筛选出了其中最"热门"的 50 ...

  5. 码云最火开源项目 TOP 50,你用过哪些?

    码云热门项目排行榜 TOP 50 出炉啦!我们根据所有开源项目在码云的用户关注度.活跃度.访问量等信息来对"热门"进行量化,从而筛选出了其中最"热门"的 50 ...

  6. android上传项目到码云_上传代码到码云

    对比 github 和码云,码云在不付费的前提下可以建立私有项目,于是上传了一份代码到码云. 一.在码云上创建项目 1.创建设置项目 项目设置 2.创建成功,复制地址 创建成功 二.打开终端 1.cd ...

  7. 本地项目上传至git码云步骤

    1.首先在本地配置好Git相关设置 2.在码云上新建一个仓库,如图所示,可以得到仓库地址 2.在本地需要上传的项目文件夹下鼠标右键选择git bash here,弹出dos窗口 3.第一步在窗口输入 ...

  8. 转载:本地项目上传至git码云步骤(超详细,附图文)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/stange1/article/deta ...

  9. 上传代码到码云(私有仓库)详细步骤

    整体流程 一个整体的操作流程如下: 步骤 操作 第一步 电脑安装Git 第二步 生成公钥 第三步 配置Git忽略文件 第四步 上传代码 电脑安装Git Git安装文件下载地址,下载后安装 https: ...

最新文章

  1. 关于IOS中的self关键字
  2. JAVA_SE之内部类
  3. OpenCV 3.1.0中的Mat对象使用
  4. mfc工程中添加com接口支持
  5. Linux 磁盘管理 二(Raid、LVM、Quota)
  6. CentOS 6.7构建 OpenResty(Nginx)+PHP 7(php-fpm)+MySQL5.7 运行环境
  7. 阿里云边缘计算又获奖啦!
  8. css display属性理解
  9. Spark编程指南V1.4.0(翻译)
  10. Docker 命令详解(run篇)
  11. 鸿蒙os系统作用,华为再发新版鸿蒙OS系统!新增超级终端功能:可媲美iOS系统...
  12. 虚拟机系统克隆到服务器上,迁移虚拟机
  13. 关于codesmith及其相关资源--破解的
  14. 使用Notepad++编辑器查看二进制bin文件
  15. 时速云:基于K8S的容器PaaS,将成为未来IT基础设施的重要组成部分
  16. CADD课程学习(12)-- 基于碎片的药物设计(MOE)
  17. CentOS7 Juno Cinder块重启后 实例起不来 --rescan Exit code: 21
  18. JSP:JavaBean+EL函数+JSTL标签
  19. Mac系统下载安装sublime3详细过程
  20. js:根据闰年的判断条件,利用if循环判断闰年

热门文章

  1. Netty RPC Demo 实现
  2. cosin等于多少_cos0等于多少?
  3. Linux中Docker常用命令
  4. 每个tabpage中都有一个dategridview_宇宙中每个原子里都隐藏着一个巨大的秘密
  5. (转)替换回车符为换行符
  6. 字符编码过滤器中对特殊的路径进行特殊处理
  7. ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
  8. java版如何使区块常加载,Java类加载机制 - suer27zhu的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 在c语言中合法标识符的第一个字符必须是,c语言合法标识符判断规则是什么?...
  10. uniapp 日期选择器_uniapp实现横向滚动选择日期