Android直播入门实践:动手搭建一套简单的直播系统

2,402 阅读9分钟
原文链接: www.52im.net

1、前言


实时视频直播是这两年非常火的技术形态,已经渗透到教育、在线互娱等各种业务场景中。但要搭建一套实时视频直播系统,并非易事,当然相关的直播技术理论在论坛的其它文章里已经写的非常详细,本文不再展开。

通常的直播系统的技术模型大致如下图:
Android直播入门实践:动手搭建一套简单的直播系统_a.png

基于对新技术的好奇心,我立马实践了下,所以首先给大家分享下整个搭建的流程。本人的操作系统为mac,其他系统的同学可以根据提示,自行安装软件。

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

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

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

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

2、参考资料


即时通讯音视频开发(一):视频编解码之理论概述
即时通讯音视频开发(二):视频编解码之数字视频介绍
即时通讯音视频开发(三):视频编解码之编码基础
即时通讯音视频开发(四):视频编解码之预测技术介绍
即时通讯音视频开发(五):认识主流视频编码技术H.264
即时通讯音视频开发(六):如何开始音频编解码技术的学习
即时通讯音视频开发(七):音频基础及编码原理入门
即时通讯音视频开发(八):常见的实时语音通讯编码标准
即时通讯音视频开发(九):实时语音通讯的回音及回音消除概述
即时通讯音视频开发(十):实时语音通讯的回音消除技术详解
即时通讯音视频开发(十一):实时语音通讯丢包补偿技术详解
即时通讯音视频开发(十二):多人实时音视频聊天架构探讨
即时通讯音视频开发(十三):实时视频编码H.264的特点与优势
即时通讯音视频开发(十四):实时音视频数据传输协议介绍
即时通讯音视频开发(十五):聊聊P2P与实时音视频的应用情况
即时通讯音视频开发(十六):移动端实时音视频开发的几个建议
即时通讯音视频开发(十七):视频编码H.264、VP8的前世今生
实时语音聊天中的音频处理与编码压缩技术简述
网易视频云技术分享:音频处理与压缩技术快速入门
学习RFC3550:RTP/RTCP实时传输协议基础知识
简述开源实时音视频技术WebRTC的优缺点
良心分享:WebRTC 零基础开发者教程(中文)
开源实时音视频技术WebRTC中RTP/RTCP数据传输协议的应用
基于RTMP数据传输协议的实时流媒体技术研究(论文全文)
声网架构师谈实时音视频云的实现难点(视频采访)
浅谈开发实时视频直播平台的技术要点
还在靠“喂喂喂”测试实时语音通话质量?本文教你科学的评测方法!
实现延迟低于500毫秒的1080P实时音视频直播的实践分享
移动端实时视频直播技术实践:如何做到实时秒开、流畅不卡
如何用最简单的方法测试你的实时音视频方案
技术揭秘:支持百万级粉丝互动的Facebook实时视频直播
简述实时音视频聊天中端到端加密(E2EE)的工作原理
移动端实时音视频直播技术详解(一):开篇
移动端实时音视频直播技术详解(二):采集
移动端实时音视频直播技术详解(三):处理
移动端实时音视频直播技术详解(四):编码和封装
移动端实时音视频直播技术详解(五):推流和传输
移动端实时音视频直播技术详解(六):延迟优化
理论联系实际:实现一个简单地基于HTML5的实时视频直播
IM实时音视频聊天时的回声消除技术详解
浅谈实时音视频直播中直接影响用户体验的几项关键技术指标
如何优化传输机制来实现实时音视频的超低延迟?
首次披露:快手是如何做到百万观众同场看直播仍能秒开且不卡顿的?
实时通信RTC技术栈之:视频编解码
开源实时音视频技术WebRTC在Windows下的简明编译教程
>> 更多同类文章 ……

rtmp媒体服务器的搭建


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

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

                                                                                            

                                                                                                
git clone [url=https://github.com/ossrs/srs
                                                                                                    .git]https://github.com/ossrs/srs.git[
                                                                                                        /url]  

                                                                                                
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推流


下载地址:obsproject.com/,先下载安装,这里就简单了。

Android直播入门实践:动手搭建一套简单的直播系统_1.jpeg

首先选择点击+选择来源,这里我选择了窗口捕获,然后点击右侧的设置:
Android直播入门实践:动手搭建一套简单的直播系统_2.jpeg

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

                                                                        

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

                                                                        

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

记住我们的url和流名称:

                                                                        

                                                                            
rtmp://192.168.1.102/zhy/mylive

                                                                        

                                                                    
完成后,点击确定。然后点击开始推流即可。

Android直播入门实践:动手搭建一套简单的直播系统_3.jpeg

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

使用VLC拉流


下载地址:www.videolan.org/vlc/,先下载安装,这个就更简单啦。

Android直播入门实践:动手搭建一套简单的直播系统_4.jpeg

点击Open Network,输入我们刚才的url+流名称,点击确定即可:
Android直播入门实践:动手搭建一套简单的直播系统_5.jpeg

稍等,就开始播放我们的推流内容了:
Android直播入门实践:动手搭建一套简单的直播系统_6.jpg

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

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

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

使用第三方推流SDK


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

这里以百度云的直播SDK为例,下载地址:
cloud.baidu.com/doc/Downloa…

直接点击下载Android SDK即可,下载完成后解压,然后倒入AS(这竟然是个Eclipse项目…),还好AS支持,导入后:
Android直播入门实践:动手搭建一套简单的直播系统_7.jpeg

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

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

                                                                        

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

                                                                        

                                                                    

然后运行,界面还可以:
Android直播入门实践:动手搭建一套简单的直播系统_8.jpeg

贴一下运行时的效果图:
Android直播入门实践:动手搭建一套简单的直播系统_9.jpeg

还是以vlc拉流即可,整个过程很缓慢,耐心等待,效果也不是很好,不过能跑通即可,主要是学习。然后你可以举一反三试试其他的SDK。当然了,很多开源项目其实比SDK作为学习资料更好,比如源码都有,下面以一个开源项目举例。

使用开源项目推流


使用一个开源项目:github.com/begeekmyfri…,直接clone,导入。

这个比较顺利,导入后,修改下rtmp链接:
Android直播入门实践:动手搭建一套简单的直播系统_10.jpeg

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

贴一张效果图:
Android直播入门实践:动手搭建一套简单的直播系统_11.jpeg

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

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

利用ffmpeg推流


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

这里,由于篇幅,我们就直接使用别人编好的项目了:github.com/WritingMind…,直接导入,该项目支持直接运行ffmpeg的命令。

ffmpeg命令很多,例如下面这些命令。

将.avi转成gif动画(未压缩):
ffmpeg -i video_origine.avi gif_anime.gif

合成视频和音频:
ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

其中有一个命令就是支持推流,这里将手机上的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命令的,那就简单了:
Android直播入门实践:动手搭建一套简单的直播系统_12.jpeg

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

这里注意我推的是存储卡上的一个媒体文件,注意添加相关权限,效果如下:
Android直播入门实践:动手搭建一套简单的直播系统_13.jpg

本文小结


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

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

(原文链接:点此进入 ,感谢原作者的分享)