最近想实现一个Android直播,但是对于这方面的资料都比较零碎,一开始是打算用ffmpeg来实现编码推流,在搜集资料期间,找到了几个强大的开源库,直接避免了jni的代码,集成后只用少量的java代码就可实现编码、推流和取流播放,整理了一下做了一个demo,在这里记录一下

效果图:

编码和推流,有两个方案选择:

一:
使用javacv来实现,最终也是用过ffmpeg来进行编码和推流,javacv实现到可以直接接收摄像头的帧数据
需要自己实现的代码只是打开摄像头,写一个SurfaceView进行预览,然后实现PreviewCallback将摄像头每一帧的数据交给javacv即可
javacv地址:https://github.com/bytedeco/javacv
demo地址:https://github.com/beautifulSoup/RtmpRecoder/tree/master

二:
使用Android自带的编码工具,可实现硬编码,这里有一个国内大神开源的封装很完善的的库yasea,第一种方法需要实现的Camera采集部分也一起封装好了,进行一些简单配置就可以实现编码推流,并且yasea目前已经直接支持摄像头的热切换,和各种滤镜效果
yasea地址(内置demo):https://github.com/begeekmyfriend/yasea

服务器

流媒体服务器我用的是srs,项目地址:https://github.com/ossrs/srs
关于srs的编译、配置、部署、在官方wiki中已经写的很详细了,并且srs同样是国内开发人员开源的项目,有全中文的文档,看起来很方便
这里有最基本的简单编译部署过程 Android直播实现(二)srs流媒体服务器部署

播放器

android端的播放使用vitamio,还是国内的开源播放器,是不是感觉国内的前辈们越来越屌了^~^!
vitamio支持几乎所有常见的的视频格式和流媒体协议
vitamio地址(内置demo):https://github.com/yixia/VitamioBundle

这里使用的是yaesa库,先介绍一下直播实现的流程:
一:使用yaesa进行摄像头采集、编码然后向srs服务器rtmp推流
二:部署srs流媒体服务器
三:使用vitamio取流播放

编码和推流已经整合在一起,demo地址:https://github.com/SiKang123/LiveTest


yaesa推流:

首先 clone yesa源码,导入library库

//布局文件中实现<net.ossrs.yasea.SrsCameraViewandroid:id="@+id/glsurfaceview_camera"android:layout_width="match_parent"android:layout_height="match_parent"/>
//java代码 需要实现接口 implements SrsEncodeHandler.SrsEncodeListener, RtmpHandler.RtmpListener, SrsRecordHandler.SrsRecordListenerSrsCameraView cameraView = (SrsCameraView) findViewById(R.id.glsurfaceview_camera)mPublisher = new SrsPublisher(cameraView);//编码状态回调mPublisher.setEncodeHandler(new SrsEncodeHandler(this));mPublisher.setRecordHandler(new SrsRecordHandler(this));//rtmp推流状态回调mPublisher.setRtmpHandler(new RtmpHandler(this));//预览分辨率mPublisher.setPreviewResolution(1280, 720);//推流分辨率mPublisher.setOutputResolution(720, 1280);//传输率mPublisher.setVideoHDMode();//开启美颜(其他滤镜效果在MagicFilterType中查看)mPublisher.switchCameraFilter(MagicFilterType.BEAUTY);//打开摄像头,开始预览(未推流)mPublisher.startCamera();//mPublisher.switchToSoftEncoder();//选择软编码mPublisher.switchToHardEncoder();//选择硬编码//开始推流 rtmpUrl(ip换成服务器的部署ip):"rtmp://192.168.31.126/android/teststream"mPublisher.startPublish(rtmpUrl);

关键代码就这么几句(状态回调有很多这里就不贴了,可以看demo),剩下的交给yasea,编码推流就搞定了,是不是简单到怀疑人生?


vitamio取流播放

首先还是clone vitamio的源码,导入vitamio库

    /*首先不要忘了在Manifest里注册InitActivity*/<activityandroid:name="io.vov.vitamio.activity.InitActivity"android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"android:launchMode="singleTop"android:theme="@android:style/Theme.NoTitleBar"android:windowSoftInputMode="stateAlwaysHidden" />/*布局文件*/<io.vov.vitamio.widget.VideoViewandroid:id="@+id/surface_view"android:layout_width="wrap_content"android:layout_height="wrap_content" />
    /*java代码*//*onCreate中,用于检查vitamioLibs库是否准备完成*如果Manifest中没有初始化InitActivity,这里会返回false,并自动初始化InitActivity*/if (!LibsChecker.checkVitamioLibs(this))return;VideoView mVideoView=(VideoView) findViewById(R.id.surface_view);/*会有几秒延时*/mVideoView.setVideoPath(rtmpUrl);

然后就可以开始愉快的播放rtmp流了,是不是简单到令人发指?

关键代码就这么多,具体代码可以看看demo:https://github.com/SiKang123/LiveTest
移动端的编码、推流、和播放就到这,后面会介绍一下srs的部署

Android直播实现(一)Android端推流、播放相关推荐

  1. Android直播实现(Android端推流、播放)

    最近想实现一个Android直播,但是对于这方面的资料都比较零碎,一开始是打算用ffmpeg来实现编码推流,在搜集资料期间,找到了几个强大的开源库,直接避免了jni的代码,集成后只用少量的java代码 ...

  2. 视频直播技术之iOS端推流

    随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字.图片无法满足人们对视觉的需求,因此视频直播应运而生.承载了实时性Real-Time和交互性的直播云服务是直播覆盖各行各业的新动力.网 ...

  3. 视频直播技术之iOS端推流 1

    随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字.图片无法满足人们对视觉的需求,因此视频直播应运而生.承载了实时性Real-Time和交互性的直播云服务是直播覆盖各行各业的新动力.网 ...

  4. android直播功能实现,Android视频直播功能实现流程

    视频直播场景的主要结构及流程如下图所示: 请注意: 除了上述基本功能,开发者如果想使用 ZegoLiveRoom SDK 实现更高级的功能,例如混音.音频录制.外部滤镜等,请直接参考 互动视频-高级功 ...

  5. 直播倒计时android,直播代码,Android实现验证码倒计时

    直播代码,Android实现验证码倒计时实现的相关代码 创建一个CountDownTimerUtils工具类 //倒计时函数 private class CountDownTimerUtilsexte ...

  6. android 直播评论动画,Android自定义View实现直播点赞特效

    由于开发的需要,需要开发类似直播点赞特效的需求,于是自定义View来实现这种效果 案例图: 1.自定义View import android.animation.Animator; import an ...

  7. android 直播评论动画,android 直播点赞 爱心动画

    绘制点在爱心的图片 package com.example.administrator.testbeisaier.view; import android.content.Context; impor ...

  8. android直播流渲染,Android手机直播之处理技术分析

    前一篇我为大家介绍了Android手机直播的采集技术,这一篇继续为大家介绍直播流程中对视频和音频的处理技术.图玩智能科技为企业提供直播平台的二次开发服务以及各类app的开发,欢迎随时咨询www.toi ...

  9. android直播视频编码,Android手机直播之视频编码技术

    今天我们继续给大家讲解Android手机直播流程中的编码技术,编码过程分为视频和音频解码,这篇文字先介绍视频编码的技术.图玩智能为企业提供直播平台的二次开发服务,为大家搭建更加完善的直播系统,欢迎随时 ...

  10. Android直播头像动画,Android 抖音头像缩放特效 直播间特效 100%高度还原

    原理分析: public class DouYinHeaderView extends View { private Bitmap bitmap; BitmapShader bitmapShader; ...

最新文章

  1. python的none是什么-python中的null与none有什么区别
  2. 利用OpenCV的convexHull和convexityDefects做凸包(凸壳)检测及凸包(凸壳)的缺陷检测
  3. 无法下载linux系统的驱动精灵,有没有LINUX版的 驱动精灵 破系统搞驱动太费劲,尤其笔记本电脑...
  4. java中通过JNA调用dll
  5. ldo regula_使用C中的Regula Falsi方法找到复多项式方程的根
  6. href=“javascript:void(0);”和href=void(change_code(this));
  7. 02-即时通讯-XMPP 简单介绍
  8. 笔记本电脑触摸板的使用
  9. Qos介绍及功能->分类标记->流量管理(令牌桶)->拥塞管理与拥塞避免
  10. 地理坐标定位和计算距离
  11. java中flush函数作用_Java语言中flush()函数作用及使用方法详解
  12. 国有林场试点森林防火(资源监管)四位一体系统建设指南
  13. AcWing 616. 两点间的距离
  14. Shell编程实战范例
  15. 概率论的一些基本概念
  16. PCIE 2.0协议概念基本科普
  17. 美团基于 Flink 的实时数仓平台建设新进展
  18. 211大学计算机复试不机试,2019清华大学计算机考研912考试复试常问问题?
  19. 艾永亮:斗鱼上市,高中学历创始人,身价暴涨,仅用5年如何做到百亿市值
  20. lotus notes 闪退_【处理流程】win7系统Lotus Notes邮箱闪退的处理教程

热门文章

  1. PKCS 系列很好介绍
  2. 2021年安全生产模拟考试(全国特种作业操作证焊工作业-钎焊模拟考试题库二)安考星
  3. Plant simulation16.0汽车总装车间仿真第二步:仿真模型搭建Part01——滑橇线物流输送
  4. Apache ranger 简介、原理、安装部署
  5. 金龙鱼半年报:增收不增利,控本依旧是头等大事
  6. FSK非相干解调的原理
  7. 【Proteus】:LCD1602仿真实验基于STM32CubeMX
  8. 2021-07-04 m3u8格式直播地址
  9. 2021laysns内核仿大婶娱乐网模板整站源码 非常漂亮 可做娱乐资源网 整站打包源码
  10. 4W1H: 动态规划