(z转载)Android直播实现 android推流app和SRS服务器的搭建

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

一:
使用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推流:

代码很全下载导入Android Studio 打开工程编译、安装即可。
效果图如下,配合搭建好SRS服务器进行调试。
在这里插入图片描述
*
vitamio取流播放
首先还是clone vitamio的源码,导入vitamio库

/*首先不要忘了在Manifest里注册InitActivity*/
     <activity
        android: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.VideoView
    android: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的部署

srs流媒体服务器部署

前面介绍了Android端的编码、推流和播放
Android直播实现(一)Android端推流、播放

但是作为android程序员,写好了推流器和播放器,没有服务器来测试还是很头疼的,这里就介绍一下srs服务器的最简单的部署,如果有兴趣深入研究的可以去看看官方的wiki,因为是国内开发人员开源的,提供中文文档,讲解的很详细 https://github.com/ossrs/srs/wiki/v3_CN_Home

编译:
官方推荐在CentOs 6.x 和 Ubuntu12.x下编译,为了避免不必要的麻烦,我直接在Ububtu 12.04.5上进行编译和部署的

首先clone srs源码

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

然后进行编译

./configure --rtmp-hls --with-http-api --with-ffmpeg && make

//--rtmp-hls:开启ssl/hls,其他功能都处于关闭状态。
//--with-http-api:开启http api接口。
//--with-ffmpeg:开启FFMPEG

这里只编译了基础功能,更详细的配置可以看:https://github.com/ossrs/srs/wiki/v1_CN_Build

编译完之后启动就可以了

//启动时也可以自定义去配置,制定一个conf文件就可以了,这里用现成的rtmp.conf来启动

./objs/srs -c conf/rtmp.conf

如果没报错,这个时候服务器就已经启动了,把Android推流和播放端的ip地址,改成srs部署的ip就可以实现直播了(注意:如果是用虚拟机,要把网络模式换位桥接模式,让虚拟机拥有独立的ip,否则主系统可以访问到srs,但局域网内的手机是访问不到的)

为了测试srs是否已经成功启动,可以先用ffmpeg 对一个本地视频文件进行推流,srs的/doc/下有测试的flv文件,直接用ffmpeg进行推流

//ip地址换成自己部署的ip

fmpeg -re -i "/home/mt6737/SRS/srs/trunk/doc/source.200kbps.768x320.flv" -vcodec copy -acodec copy -f flv rtmp://192.168.3.209:1935/live/mydemo

这样就推流成功了,然后用srs的在线播放器试一下能否观看
http://winlinvip.github.io/srs.release/trunk/research/players/srs_player.html
服务器启动以后,把Android推流和播放端的ip改为服务器的部署ip,就可以开始直播了
在这里插入图片描述
如果没有成功,可以利用srs在线播放器来帮助测试:
1.测试推流可以在Android上向服务器推流,用srs在线播放,播放成功推流就没问题了
2.测试播放可以像上边一样,先用ffmpeg推流一个视频文件,在Android端播放

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值