为方便大家阅读,源码先行奉上
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

具体的一些流程是:

  1. 在android端调用yaesa库进行摄像头采集、编码,随后向srs服务器rtmp推流
  2. 在服务器端部署srs流媒体服务器
  3. 在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

需要注意的几点:

  1. ffmpeg是我们下载的,所以我这里的路径是3rdparty路径下的
  2. ip地址需要换成我们服务器的ip地址
  3. 在trunk文件夹下执行

进行完上面的操作,就可以看到视频开始推流了

我们想要观看视频需要取流,可以通过在线播放器,但是现在的浏览器很多不支持flash,所以可能不成功,所以可以在电脑上下载一个VLC,通过VLC取流播放,在
媒体–>流–>网络
输入播放的地址,就是刚才我们推流时的地址

点击串流旁的三角,点击播放,等一会,看到阿凡达的话,那恭喜你,成功了!!!
在android端测试也可以,也是把地址换成我们服务器的ip地址就可以

Android实现直播的博文和流程(全过程,超详细/附源码)相关推荐

  1. 【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)

    需要源码和相关资源请点赞关注收藏后评论区留下QQ~~~ 一.在线语音识别 云知声的语音识别同样采用WebSocket接口,待识别的音频流支持MP3和PCM两种格式,对于在线语音识别来说,云知声使用JS ...

  2. Android App开发语音处理之系统自带的语音引擎、文字转语音、语音识别的讲解及实战(超详细 附源码)

    需要源码请点赞关注收藏后评论区留下QQ~~~ 一.系统自带的语音引擎 语音播报的本质是将书面文字转换成自然语言的音频流,这个转换操作被称作语音合成,又称TTS(从文本到语音)在转换过程中,为了避免机械 ...

  3. 【Android App】实现在线语音合成功能(使用云知声平台和WebSocket 超详细 附源码)

    需要源码和Jar包请点赞关注收藏后评论区留下QQ~~~ 一.在线语音合成 虽然国产智能机大多集成了中文语音引擎,但是系统自带的语音工具无法满足商用要求,功能单一,所以势必引入第三方的语音引擎,依靠第三 ...

  4. 【Android App】实战项目之实现你问我答的智能语音机器人(超详细 附源码和演示视频)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.需求描述 想必大家都见过商场里的智能语音机器人,你对它提问时它可以自动回答你的问题,接下来我们也实现这样一个机器人,它依靠语音技术完成问询服务 基 ...

  5. Android开发音效增强中铃声播放Ringtone及声音池调度SoundPool的讲解及实战(超详细 附源码)

    需要源码请点赞关注收藏后评论区留下QQ~~~ 一.铃声播放 虽然媒体播放器MediaPlayer既可用来播放视频,也可以用来播放音频,但是在具体的使用场合,MediaPlayer存在某些播音方面的不足 ...

  6. Android App开发实战项目之仿喜马拉雅的听说书App实现(超详细 附源码和演示视频)

    需要全部源码请点赞关注收藏后评论区留下QQ~~~ 一.需求分析 用户不仅能在平台上收听音频,还能成为内容创作者,总之长音频分享平台需要满足两种角色的使用:一种是作为内容创作者发布自己的音频,另一种是作 ...

  7. Android 开发人脸识别之自动识别验证码功能讲解及实现(超详细 附源码)

    需要源码和图片集请点赞关注收藏后评论区留下QQ或者私信~~~ 一.自动识别验证码 验证码图片中最简单的是数字验证码,一张再普通不过的验证码拿到之后要进行以下步骤的处理 1:首先对图片适当裁剪,先去掉外 ...

  8. Android 开发中原始音频的录播和和自定义音频控制条的讲解及实战(超详细 附源码)

    需要源码请点赞关注收藏后评论区留下QQ~~~ 一.原始音频的录播 语音通话功能要求实时传输,如果使用MediaRecorder与MediaPlayer组合,那么只能整句话都录完并编码好了才能传给对方去 ...

  9. 【Android +Tensroflow Lite】实现从基于机器学习语音中识别指令讲解及实战(超详细 附源码和演示视频)

    需要源码和配置文件请点赞关注收藏后评论区留言~~~ 一.基于机器学习的语音推断 Tensorflow基于分层和模块化的设计思想,整个框架以C语言的编程接口为界,分为前端和后端两大部分 Tensorfl ...

最新文章

  1. golang 获取两个时间 相差多少 小时
  2. excel了解mysql_对比Excel、MySQL、Python,分别讲述 “if函数” 的使用原理!
  3. iOS使用NSURLConnection发送同步和异步HTTP Request
  4. Application Verifier
  5. qPCR引物设计经验教程
  6. 消防巡检控制器,消防泵巡检控制柜专用元件
  7. Win10环境VMware开WinXP虚拟机CPU占用100%
  8. leetcode 没有php,Leetcode PHP题解--D99 860. Lemonade Change
  9. 甘肃康县乡村“蝶变”:北方山沟引来“南方媳妇”
  10. 【SMAP 土壤水分的质量处理】
  11. 计算机连接不上蓝牙鼠标,蓝牙鼠标怎么连接到笔记本电脑?
  12. LT2611UXC 2-PORTLVDS 转HDMI2.0
  13. 进入中国内地第31年的麦当劳 ,为什么还能不断吸引新消费人群?
  14. 学习SEO就到SEOWHY,SEO十万个为什…
  15. Hadoop环境配置(6)-MySQL安装
  16. 计算机操作系统 - 内存管理
  17. 毕设必看——Python ttkbootstrap 制作账户注册信息界面
  18. SubString 函数总结
  19. python取数字前n位
  20. 红队攻击演练过程中必须具备哪些能力

热门文章

  1. 网页游戏开发基础——Canvas基本图形绘制
  2. 微分方程求解matlab冲激信号,用Matlab求冲激响应的几种方法
  3. 用户画像原理、技术选型及架构实现
  4. Coursera | Python for Everybody专项课程
  5. 触摸屏中应用的电容式触摸芯片
  6. PhoneWindowManager().interceptKeyBeforeQueueing()中的interactive变量值的来源
  7. ARFoundation之路-人脸检测增强之二
  8. 微信公众号数据2019_2019年5月全国房地产微信公众号25强排行榜
  9. Android 练习项目 ——简单记账软件的实现
  10. 利用阿里云免费镜像仓库,实现微服务的k8s部署