Android+Web视频直播装逼实现
一、前言
二、实现原理
看图说话:
通过上图可以看到,所谓的视频直播其实就是通过录相设备将采集到视频数据以流的方式推送到服务器,然后我们观看直播的时候,以流的方式再从服务器拉取视频数据。当然这个过程还牵涉到一系列复杂的编码、丢包、抖动、延时……等一系列的技术难点,但是这些都不在我们今天的讨论范围。我们只想安静的做个简单的装逼直播而已,所以关于直播的原理,你可以粗略的理解为一个大木桶上有两根水管,一根进水,一根出水,就这么简单。
本次的技术实现方案,进水的水管(视频采集与推流)我选择通过Android手机(进一步证明我穷),而出水的水管(视频拉取与播放)我选择通过H5的Video标签来实现(因为我懒)。也就是说,这次的直播思路,其实就是通过你手机的摄像头,实时采集视频数据,并推送到好友手机上打开的H5页面中,实现视频直播。
而刚才提到的所有技术难点我们暂且都不去深究,因为从成本角度来考虑,我决定选择通过第三方的视频云服务来作为我们底层的技术支撑。经过简单的挑选之后,今天我们先暂且选择通过百度的LSS视频直播服务来实现(因为我穷)。
三、具体实现
首先,通过一张图来帮助大家简单了解一下LSS的使用步骤
根据上图,我们注册并开通LSS服务后,第一步要做的是创建直播会话。我们先来创建一个指定设置的直播会话,如图所示:
这里大家可以看到我用一个红框标识了重点部分。此处建议大家选择一个合适的转码模板,因为默认的模板设置会导致最终视频直播时,服务器只做转发,保持输入分辨率与码率不变。这样有两个不妥之处:一是在用户实际观看时耗费的流量更大,延迟情况可能更加突出;二是在iPhone手机上,你会发现用HTML5当中默认的Video是无法直播的。这主要是因为iPhone手机默认对视频格式支持的问题。下面列出iPhone主要支持的视频格式:
1:H.264 视频:最高支持 1080p、60 fps、High Profile level 4.2 编码,其音频为 AAC-LC 格式、最高支持 160 Kbps、48kHz、立体声,文件封包格式为 .m4v、.mp4 和 .mov;
2:MPEG-4 视频:最高支持 2.5 Mbps、640 x 480 像素、30 fps、Simple Profile 编码,其音频为 AAC-LC 格式、最高支持每声道 160 Kbps、48kHz、立体声,文件封包格式为 .m4v、.mp4 和 .mov;
总而言之,在这里如果你想直接通过Video标签来观看后面的直播,这里就建议选择一个合适的转码模板,例如我只是用来装个逼,犯不着跟钱过不去,所以选择较低的640*360,而且实际上这个分辨率已经能在手机上取得不错的效果了。
2、实现Android端推流
首先下载LSS服务Adnroid推流端的SDK,然后做好相应的配置。在这里有一个地方要特别提一下,这个SDK包里面一共包括了如下几个文件:
关于jar文件的引入相信大家都不是问题。但关于so文件的引入,由于官方给的帮助文档还是基于Eclipse+ANT的引入方式(鄙视一个……),因此如果你使用的是Android Studio来作为开发工具,那么请按我下述的方法来操作:
1.在“src/main”目录中新建名为“jniLibs”的目录;
2.将so文件复制、粘贴到“jniLibs”目录内。
注:如果没有引用so文件,可能会在程序执行的时候加载类库失败,有类似如下的DEBUG提示——java.lang.UnsatisfiedLinkError: Couldn't load library xxxx from loader dalvik.system.PathClassLoader
引入了SDK后,接下来就要考虑实际的编码实现了。这里我废话就不多说了,直接示例程序的源代码,以供大家参考。具体请点击如下地址下载:
视频直播Android推送端
当你下载代码后,需要将程序当中的推流地址换成你自己的实际地址。具体关于推流与拉流的地址,你可以点击我们开始新创建的直播会话,进入会话详情页面,然后在这个地方获取。
最终完成的APP效果如下图所示:
3、实现Web端拉流播放
在Web端拉流播放有很多种实现方式,你可以自由选择使用第三方支持HLS的播放器。当然如果你希望能在直播时做一些更深层次的尝试,例如字幕、播放列表、广告、互动、直播授权等等,那么你也可以选择使用百度自家的T5播放内核。
而对于我来说仅仅为了装逼的需求,显然不足以推动我去继续花费时间,而且我需要的是别人能很轻松、没有任何限制的直接进入直播,不然我还怎么装逼?因此我选择了最简单粗暴的方式,就是直接做了一个适配移动端的H5页面,然后在里面使用了video标签,通过微信等方式直接分享给好友。关键代码如下:
<video src="http://gj0kf15c4z2aep308jr.exp.bcelive.com/lss-XXXXXXXXX/live.m3u8" height="300" width="100%" autoplay="autoplay"></video>
从个人隐私角度来考虑,所以我对上述拉流地址中的关键部分采用了XXXXXXXXX来代替,请大家不要在意这些小细节。实际使用的时候换上你自己的地址就好了。
4、装逼时刻
好了,接下来就是最后一步,你只需要把你刚做的移动端H5页面上传到你自己的虚拟空间或者云主机上,然后用微信扫描链接地址,并分享给你的女朋友(如果你真有的话……),或者你的好基友,就可以开启装逼模式了!切记,装逼莫太过,容易遭雷P……
四、一点感慨
随着信息技术的发展与开放,公有云技术的稳步提升,之前的一些技术难点,现在已经不再是困扰我们的瓶颈。从我个人来说,以视频直播为例,仅管我理解它的原理,也明白它的运行机制和关键的技术要点,但如果不是身在“云”的时代,让我从无到有搭建一套视频直播的架构并应用于实际生产,显示不是一朝一夕的事情。而现在半天的时间,借助云服务,我就能快速完成一个装逼的视频直播功能。感恩这个时代!这是一个属于我们技术人员的时代!
原文链接:http://www.jianshu.com/p/129e07b3e42f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
Android+Web视频直播装逼实现相关推荐
- ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播点播,还带运营在线支付功能!完全免费提供!...
ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播,点播!还带在线支付功能! ZLMS 开发团队在综合参考了各方面的合理建议之后,经过两个多月的紧张开发及测试,终于发布V1.2.0 ...
- android的视频直播,Android进行视频,直播播放
写在前面 忙忙碌碌一个多月没怎么写过文章了,今天来写写Android中的视频,直播播放,斗猫项目里用到直播流,坑踩了不少,可算是填上了.以下代码已上传至:https://github.com/Xxxx ...
- vue使用vue-video-player实现web视频直播展示m3u8格式
最近有一个需求,就是web展示摄像头的实时画面,mentor让我先探索探索,所以我先测试一些小demo. 这里边个人想了一下啊,还是比较复杂的,包含推流和拉流等操作,还有延迟的问题要解决. 自己主要负 ...
- android之视频直播与播放Vitamio
直播APP l 直播原理 直播本质:实时推送/拉取过来的音视频数据 直播相关的协议: l RTMP(实时消息的传输协议) RTMP协议是一个互联网TCP/IP五层体系结构中的应用层协议 RTMP协 ...
- android主流视频直播sdk,Android视频直播SDK集成指引
手动安装 目前 ZegoLiveRoom SDK 仅支持通过拷贝库文件的方式,集成步骤如下. 1 准备环境 请确保开发环境满足以下技术要求: Android Studio 2.1 或以上版本 已经下载 ...
- Android IOS 视频直播利用第三方SDK实现
SDK服务选择 目前有很多做直播云的服务平台: 腾讯云.阿里云.网易云信.七牛云.金山云.声网.即构科技,总的来说,腾讯云直播,七牛云,金山云更偏向于娱乐性的直播,网易云信是基于他的IM系统,而阿里云 ...
- android 音视频直播
@Author:明明不说话 @Statement:博客内容纯属个人观点,欢迎转载,转载请注明,谢谢 android 基于rtmp的语音采集和播放 前段时间研究了android使用rtmp协议进行语音采 ...
- qq空间把android改成iphone,装逼时代 教你如何修改QQ微信小尾巴为来自iphone6
导读:尽管iphone6已经开售,但是相信不少小琥珀般还需要等很长一段时间才能拿到iphone6,不过没关系,没有iphone6我们也能提升自己的逼格,下面小编我就来教教大家QQ.微信等消息的小尾巴, ...
- android 位置信息工具,装逼神器!伪装地理位置的安卓小工具
现在很多社交软件都是基于地理位置的,能够让你结交附近的人.但是,如果你想要结交远一点的人怎么办?其实在安卓上,方法多得是,伪装地理位置就是一个不错的解决方案!今天介绍的这款"大牛" ...
最新文章
- Andriod anim 补间(Tween)动画与Interpolator以及setCustomAnimations方法
- import与require的区别
- Redis源码剖析(四)过期键的删除策略
- ViewPager的事件冲突的解决
- MYSQL必知必会学习笔记(二)
- Android之在eclipse编译项目出现unable to resolve target android-20解决办法
- 华为云hcip认证试题_首信AAA认证计费系统通过华为云兼容性认证,成为华为认证级ISV伙伴...
- 【JavaScript】回流(reflow)与重绘(repaint)
- BP神经网络算法 原理讲解以及底层代码复现
- IE(11)浏览器清理缓存方法
- 起底白帽黑客郭盛华读过的学校,看完流眼泪了!
- iOS-instrument使用
- a-upload文件夹上传
- 【论文解读IJCAI 2019】Extracting Entities and Events as a Single Task Using a Transition-Based NeuralModel
- RabbitMQ服务启动成功后就自动停止
- 区块链开发之BTC离线签名
- js实现: while实现1-100相加求和, while do...while验证用户名和密码, 打印菱形、三角形,大小和尚分馒头。
- IOS Safari浏览器添加桌面图标
- Cows in a Row
- keil 更改黑色背景详细步骤,设置代码风格,添加自动格式化插件