Android实现直播的博文和流程(全过程,超详细/附源码)
为方便大家阅读,源码先行奉上
github源码链接 https://github.com/Recycle1/Live-video-demo
csdn源码链接 https://download.csdn.net/download/weixin_52263647/85070250
需要注意的一点是!!!:上述的代码需要更改IP地址为你自己的IP地址,博主在做完这个demo后禁用了1935端口号,因此无法直接使用博主的云服务器,同时如果是阿里云服务器,一定要记得在安全组中放行相应的端口号,否则无法正常推流。
最近要做一个有把视频从手机端推流,在另一端拉流功能的app,所以就学习了一下直播功能,这两个功能比较类似,找到了一些收藏点赞比较多的文章,按着他们的记录一步一步的做了下来,但是文章大多都是几年前写的,可能也是我懂的比较少,捣鼓了好几天,按着他们做的照着做,还是出现了各种各样的问题,所以我汇总了一些博文的内容,终于是实现了。
首先准备工作,不光需要有Android stdio,还需要有自己的服务器,这里我租用了阿里云的云服务器(linux系统),之后的文章中,从Android端的编写到服务器端的配置都会有所介绍。最后测试实现的结果,可以先在电脑上下载一个VLC
具体的一些流程是:
- 在android端调用yaesa库进行摄像头采集、编码,随后向srs服务器rtmp推流
- 在服务器端部署srs流媒体服务器
- 在android端调用vitamio实现取流播放
一 Android端搭建
android实现的功能一个是采集摄像头的内容,然后将视频内容推流到服务器端,另一个是从服务器端拉流到手机播放视频。
以下是我认为比较好的博文
Android直播实现(一)Android端推流、播放
首先需要调用yaesa,链接如下
https://github.com/begeekmyfriend/yasea
将yaesa项目clone下来,对我们有用的就是其中library这部分,我们将这个文件夹作为library导入到自己的android项目中,导入的过程就是在顶部的功能那里,依次点击
File -->new–>import Module
出现上面的画面,我们从里面找到刚才下载的yeasa中的library文件夹,放入里面,导入成功
然后需要在我们自己的项目,也就是app这个目录下导入library这个依赖,具体的方法可以等之后在那些引用外部依赖的代码标红时(出错),看android stdio给的推荐解决方案,点击(import dependence)即导入依赖,也可以直接通过File–>Project Structure->Dependencies,点击加号添加依赖
然后对于拉流操作,我们需要使用vitamio是实现功能,所以我们同样需要引入vitomio,这里就到了一个大坑!!!
我按着第一篇博文的方法,从他给出的demo
https://github.com/SiKang123/LiveTest
或者从各种博文都推荐的vitomio地址https://github.com/yixia/VitamioBundle
将vitomio导入到android端(和上面的操作一样)
但是,本以为大功告成了,结果vitomio在测试时一直出现问题,找不到vinit.so文件,我查了各种文章,都找不到解决的办法,最后我看到一个博主出现的虽然不是这个问题,但是vitomio也是运行不了,于是他换了一个vitomio的下载地址,没有用上面的链接,成功解决了自己的问题,我试了一下,也是把我的问题解决了
引用vitamio框架提示libffmpeg.so、libstlport_shared.so无法找到的错误
他引用的vitomio项目地址是这个
https://github.com/yixia/VitamioBundleStudio
上面这个是可以用的,但是也需要做一些修改,首先把vitomio文件夹根据我们上面讲到的方法放入自己的项目中,随后更改vitomio文件下的build.gradle文件
改为这样
随后更改vitomio文件夹下的MediaPlayer.java文件
其实这个我也不知道问题出在哪里,后面运行的时候发现这里报错,LIB_ROOT这个变量的值有问题,所以这里我索性去掉了if语句,运行发现没有问题
这样,外部引用库就导入完成了,文件结构长这个样子
之后根据第一篇博文给的链接
https://github.com/SiKang123/LiveTest
把他的xml文件activity文件我们按着他写的写在我们自己的文件里
这样,android端就配置完成了,之后,我们开始配置服务器端
二 服务器端搭建
在服务器搭建这里,不是很了解的也没关系,现在搭建服务器有很多工具,操作起来不是很难,也不需要写很多命令,这里,我是用我租用的阿里云服务器(Linux系统)配置srs流媒体服务器
准备工作
需要有自己的服务器,工具类,我用的是宝塔面板,关于宝塔面板如何安装,使用,以及站点搭建,可以看我之前写的这篇文章
阿里云服务器宝塔面板的安装
一些比较方便的工具还有xshell,xftp这两个软件,一个是写命令的,一个是把自己电脑的文件传到服务器里的,xshell的功能宝塔面板里也有,但是xshell功能更加全面,xftp建议下载一个,因为这个传文件确实很方便
在宝塔面板这里,通过软件商店,我下载了nginx服务器,mysql,phpmyadmin等,这些是一些比较基础的配置(很方便,只要找到相应软件,点击安装,即可完成服务器基本配置工作)
具体内容
关于配置srs的大致思路,可以看这篇文章
linux部署安装SRS流媒体服务器教程
上面这篇博文通过crt进行安装,我们用
宝塔面板+xftp(+xshell)
就很方便,首先下载srs
https://github.com/ossrs/srs
最好是下载releases版本的,在上面的网页往下划,找到这里,选一个你相中的,
点进去以后,下载这个比较好
在自己电脑里解压就可以然后通过xftp传到服务器的root文件夹里面
1.在宝塔终端或在xshell输入命令行
2.进入trunk文件夹下,之后的操作都在此文件夹下进行
输入以下内容编译文件
./configure && make
3.启动srs
./objs/srs -c conf/srs.conf
查看是否启动成功
ps -ef | grep srs
编译过程可能会面临权限问题,可能某个文件因为权限打不开,可以通过宝塔面板,打开文件,鼠标悬浮文件夹,就可以找到权限选项,设置权限,也可以通过代码来完成
在Linux系统中如何修改文件夹读写权限
4.之后我们需要下载ffmpeg,srs内部也有ffmpeg,在trunk目录下的3rdparty文件夹
但是我试了试,怎么都有问题,所以我自己又下了一个(在官网ffmpeg)当然,我们下载到哪里?也是放在这个3rdparty文件夹里面,上面这个图片里ffmpeg文件夹就是我自己下载的ffmpeg
5.要想用ffmpeg,首先要有yasm,如果没有yasm,需要先安装,以下是下载yasm的网站
http://www.tortall.net/projects/yasm/releases
6.下载合适版本的yasm(注意要下载以.tar.gz结尾的压缩包),解压后放在这个3rdparty文件夹下
然后在终端逐行输入
cd yasm-1.3.0
./configure
make && make install
7.安装完成后,开始安装ffmpeg
进入ffmpeg文件夹(cd ffmpeg)
上面发的那篇博文说需要先获取root权限,直接输入:su 在输入密码即可取得root权限,这样可以,但是我是通过宝塔面板把文件夹权限放开的
然后输入
./configure
make && make install
这样,我们的服务器部分就配置完成了
可以通过下面两行来了解配置的信息
//了解参数
cat -n conf/srs.conf
//了解运行状态
./etc/init.d/srs status
(b站里也有教学的视频,这里我挑了一个讲的比较详细的,分享给大家srs配置教学,srs官网里也有配置的相关流程介绍,也很详细srs官网)
三 运行测试
关于运行测试,分为推流和拉流
首先我们进行推流,我看了这篇博文
推流效果
同样里面也给出了官方的方案
推流与拉流
我们使用官方的方案,测试的视频存在srs的一个文件夹里面,内容是阿凡达
for((;;)); do \
./3rdparty/ffmpeg/ffmpeg -re -i ./doc/source.200kbps.768x320.flv \
-vcodec copy -acodec copy \
-f flv -y rtmp://192.168.1.170/live/livestream; \
sleep 1; \
done
需要注意的几点:
- ffmpeg是我们下载的,所以我这里的路径是3rdparty路径下的
- ip地址需要换成我们服务器的ip地址
- 在trunk文件夹下执行
进行完上面的操作,就可以看到视频开始推流了
我们想要观看视频需要取流,可以通过在线播放器,但是现在的浏览器很多不支持flash,所以可能不成功,所以可以在电脑上下载一个VLC,通过VLC取流播放,在
媒体–>流–>网络
输入播放的地址,就是刚才我们推流时的地址
点击串流旁的三角,点击播放,等一会,看到阿凡达的话,那恭喜你,成功了!!!
在android端测试也可以,也是把地址换成我们服务器的ip地址就可以