本文已在我的公众号hongyangAndroid原创首发。
转载请标明出处:
http://blog.csdn.net/lmj623565791/article/details/77937483
本文出自张鸿洋的博客

本文已在我的公众号hongyangAndroid原创首发,文章合集。

公众号后台很多关注者给我留言,想学习直播相关技术,但是无从下手,其实我也非直播专业人士,不过可以提供点入门的方案,希望以此做到一定的引导作用。

首先搜索了一波,发现了知乎上还有个类似的提问:

https://www.zhihu.com/question/49160322/answer/114587604

文章中第一个回答就是指导如何搭建一个直播系统。

从0开始搭建一个直播系统

我立马实践了下,所以首先给大家分享下整个搭建的流程:

本人的操作系统为mac,其他系统的同学可以根据提示,自行安装软件。

一个简易的直播系统,大致可以由三部分组成:

  • 搭建一个rtmp媒体服务器
  • 推流端
  • 拉流端

现在目标是快速搭建起来,所以当然是借助开源项目和一些软件:

  • rtmp媒体服务器:这里使用srs
  • 推流端:这里使用obs
  • 拉流端:这里使用播放器vlc

rtmp媒体服务器的搭建

这里使用srs,srs的链接为:
https://github.com/ossrs/srs

首先clone到本地,进入到trunk目录:

git clone https://github.com/ossrs/srs.git
cd srs/trunk

然后执行:

./configure --osx

注意: Centos6.x/Ubuntu12 32/64bits用户仅需要执行./configure。

最后执行:

make

执行成功后,就可以开启我们的服务了:

./etc/init.d/srs start

如果是mac系统,此时会失败,原因是srs.conf中max_connections太大,
目录为srs/trunk/conf/srs.conf,可以修改为248(其他操作系统可能无此问题)。

再次回到trunk目录:

./etc/init.d/srs start

到此我们的srs服务器就搭建起来了。

注:
Centos、Ubuntu可以参考官网搭建,比较简单。
如果你启动过程中还遇到了其他错误,可以查看log信息:
srs/trunk/objs/srs.log
其他指令:
停止 ./etc/init.d/srs stop
重启 ./etc/init.d/srs restart

有了服务器之后,我们就准备开始我们的推流端。

如果你实在搭建不成功,可以先拿116.196.121.20这个ip做测试,我在京东云上搭建的,配置较低,主要用于大家临时测试,可能不稳定,看一眼就行,后续会关掉,所以还是尽可能自己搭建成功吧。

使用OBS推流

下载地址:https://obsproject.com/

先下载安装,这里就简单了

首先选择点击+选择来源,这里我选择了窗口捕获,然后点击右侧的设置:

选择流,串流类型选择自定义,然后url,填写:

rtmp://你的ip/你喜欢的url

流名称可以按照上述自由输入。

记住我们的url和流名称:

rtmp://192.168.1.102/zhy/mylive

完成后,点击确定。

然后点击开始推流即可。

这样,我们的OBS推流就开启啦,软件的更多使用自行探索吧。

最后就剩下我们的拉流了。

使用VLC拉流

下载地址:http://www.videolan.org/vlc/

先下载安装,这个就更简单啦。

点击Open Network,输入我们刚才的url+流名称,点击确定即可。

稍等,就开始播放我们的推流内容了。

演示个动图:

最左侧是VLC,中间是OBS,右侧是我窗口捕获对象。

到这里,就算我们搭建了一个直播系统啦~~自己搭建成功的感觉,无比爽快,也能很大的激发我们后续的学习兴趣。

后面我们可以根据自己的需求去选择学习拉流或者推流,逐步替换掉软件。拉流的方式很多,很多开源播放器都支持。这里我们考虑替换掉推流,希望可以使用手机来推流。

使用第三方推流SDK

最简单的方式,就是可以借助于第三方的推流SDK,大多情况下第三方SDK完整方案都是收费的,不过他们的推流Android SDK倒是可以下载无需付费情况下来学习使用的。

这里以百度云的直播SDK为例,下载地址:
https://cloud.baidu.com/doc/Downloadcenter/Push.html#.E7.89.88.E6.9C.AC.E6.9B.B4.E6.96.B0.E8.AF.B4.E6.98.8E

直接点击下载Android SDK即可,下载完成后解压,然后倒入AS(这竟然是个Eclipse项目…),还好AS支持,导入后:

直接将mStreamKey修改我们的rtmp的地址即可。

注意,需要在build.gradle中添加下v7的依赖

compile 'com.android.support:appcompat-v7:23.0.0'

然后运行,界面还可以:

贴一下运行时的效果图:

还是以vlc拉流即可,整个过程很缓慢,耐心等待,效果也不是很好,不过能跑通即可,主要是学习。然后你可以举一反三试试其他的SDK。

当然了,很多开源项目其实比SDK作为学习资料更好,比较源码都有,下面以一个开源项目举例。

使用开源项目推流

使用一个开源项目:

https://github.com/begeekmyfriend/yasea

直接clone,导入。
这个比较顺利,导入后,修改下rtmp链接:

然后运行即可(导入不成功,自己想办法解决,基础能力啦~)。

贴一张效果图:

硬解码的情况下,效果比前面的SDK好很多~~

好了,最后我们再看一种方式。

恩,ffmpeg很火,ffmpeg很强大。
所以最后一种方式,就是看如何利用ffmpeg推流啦~~

利用ffmpeg推流

大家可以自己下载ffmepg的源码,然后按照网上的方式去编成so,简单的一点而且比较实用的,就是编出可以执行ffmpeg 命令的so,这样就能干很多事情了。

这里,由于篇幅,我们就直接使用别人编好的项目了。

https://github.com/WritingMinds/ffmpeg-android-java

直接导入,该项目支持直接运行ffmpeg的命令。

ffmpeg命令很多:
例如:

将.avi转成gif动画(未压缩)
ffmpeg -i video_origine.avi gif_anime.gif
合成视频和音频
ffmpeg -i son.wav -i video_origine.avi video_finale.mpg
还有非常多的功能,可以参考:
http://blog.csdn.net/king1425/article/details/70348374

其中有一个命令就是支持推流,这里将手机上的zixia.mp4作为输入:

ffmpeg -re -i /storage/emulated/0/zixia.mp4 -vcodec libx264
    -acodec aac
    -f flv
    -strict -2 rtmp://192.168.1.102/zhy/mylive=

那么这个库是支持在手机上运行ffmpeg命令的,那就简单了:

贴上我们需要执行的命令,运行即可。

这里注意我推的是存储卡上的一个媒体文件,注意添加相关权限,效果如下。

好了,这样我们的大致学习了如何搭建一个小直播系统,如何利用SDK,开源项目,以及简单的使用ffmpeg来进行推流~~

很多时候,学习一个比较大的技术方向就是开头难,无从下手,那么本篇应该是一篇非常易懂的教程,希望对想要学习直播技术的小伙伴有所帮助,也希望以此能够激发大家一定的学习兴趣,当然直播技术远不止于此,大家可以根据自己的情况继续深入学习~


支持我的话可以关注下我的公众号,每天都会推送新知识~

欢迎关注我的微信公众号:hongyangAndroid
(可以给我留言你想学习的文章,支持投稿)

参考:

https://github.com/WritingMinds/ffmpeg-android-java
https://github.com/begeekmyfriend/yasea
https://cloud.baidu.com/doc/Downloadcenter/Push.html
https://www.zhihu.com/question/49160322/answer/114587604
https://github.com/ossrs/srs
http://www.jianshu.com/p/dd3f58392aa0#
http://blog.csdn.net/king1425/article/details/70348374

轻松入门Android直播相关技术 从0搭建直播系统相关推荐

  1. 直播 相关技术文章 相关调研文章

    移动直播相关技术文章 移动直播技术秒开优化经验 七牛直播云技术详解 Facebook 如何做在线直播的 Android音视频点/直播模块开发 做一款仿映客的直播App?看我就够了 移动直播爆发始末 2 ...

  2. mysql数据库系统配置文件_跟我学虚拟机系统平台相关技术及应用——在CentOS系统中的MySql数据库系统配置文件中进行配置定义...

    跟我学虚拟机系统平台相关技术及应用--在CentOS系统中的MySql数 据库系统配置文件中进行配置定义 1.1.1MySql5.6数据库系统的配置文件 1.不同作用范围内的系统配置文件 (1)/et ...

  3. android版本怎么升级9.0,为什么安卓系统都升级到9.0了,而国内大部分都是Android7呢?...

    原标题:为什么安卓系统都升级到9.0了,而国内大部分都是Android7呢? 谷歌此前正式发布了全新的安卓9.0系统,也就是大家所实习的AndroidP系统,但是可能你会发现,目前很多的国产手机依旧还 ...

  4. Android基础——适配安卓6.0新权限系统

    安卓6.0新权限系统分类 在安卓6.0版本以后,新的权限系统出现了,为了更好的保护用户的安全,新的权限系统需要开发者在代码中手动申请,所以为了适配6.0权限系统,我们不得不学习权限系统 安卓6.0新权 ...

  5. ZUI易入门Android之客户端适配9.0方案

    目录 Section 1: 前言 1-4 1 概念 1-4 2 读者 1-4 3 参考文档 1-4 Section 2: 技术方案 2-5 1 所有应用的行为变更 2-5 1.1 非SDK开放接口 2 ...

  6. 一对一直播软件源码开发,直播相关技术详解

    一对一直播软件源码中直播流程图 一.数据采集 通过一对一直播软件源码移动设备的端麦克风摄像头采集音视频数据. 视频采集 AVCaptureDevice 前后摄像头作为视频源生成输入 AVCapture ...

  7. 等保相关技术和产品之电子门禁系统

    门禁又称出入管理控制系统,通道管理系统,是一种管理人员进出的数字化智能管理系统. 出入口门禁安全管理系统是新型现代化安全管理系统,它集微机自动识别技术和现代安全管理措施为一体,它涉及电子.机械.光学. ...

  8. 视频直播推流技术(MediaCodec硬编码+libRTMP,编码器),Demo - Android

    - aac audio_codec; h264,video_codec;25 framerate 25帧; - Camera-YUV帧序列-YUV帧预处理(镜像 缩放 旋转)-编码器-H264数据 从 ...

  9. 基于SRS+OBS搭建直播系统

    这段时间与视频,直播相关的技术不可谓不热,今天我们就近距离接触下,尽早搭上这班车! 我们先看一张效果图 左边是OBS 推流端,右边是VLC播放器,稍微有延迟! 本文是基于VMware(12.5.7)+ ...

最新文章

  1. python3爬取新浪NBA新闻信息(待完善)
  2. 登陆失败bdstoken_解决PanDownload登录提示账号登录失败,获取bdstoken失败问题
  3. PAT:1034 Head of a Gang (30分)
  4. 2018年开发者生态体系状态调查报告(第一部分)
  5. “做好大数据测试,我是认真的!”
  6. Laravel核心解读--服务容器(IocContainer)
  7. 计算机原理与技术索引的应用,经常学一点计算机底层原理系列之索引
  8. J2EE6 servlet session超时机制
  9. Java学生管理系统设计与实现 (超详细,含课程设计)
  10. 基于Springboot的爬虫项目
  11. java你好代码_Java 基础——1 向Java世界说你好
  12. latex公式斜体_latex输入斜体
  13. 大型网站的演化之路——读《大型网站技术架构》
  14. 360度全景图片怎么拍摄?
  15. Adobe Flash player Activex控件问题解决方法
  16. Wex5修改Tomcat端口
  17. ps cs6 64+32百度网盘分享
  18. 干货福利分享:pdf怎么去水印 如何在线去除PDF水印
  19. 盲信号分离的实际应用
  20. string头文件函数

热门文章

  1. uniapp 消息提示框
  2. BZOJ 1050 旅行comf
  3. Office Web App服务器的配置
  4. 如何通过微信小程序进行更加有效的电商营销?
  5. 交叉编译 foo2zjs
  6. 关于light7使用路由经验总结及踩的坑
  7. java通过身份证号码获取出生日期、性别、年龄
  8. php定时自动发送邮件(从数据库取数据)(超详细版本)
  9. 测试设计之状态转换图
  10. Linux系统的madplay、mplayer音视频播放器的制作