一只视频程序猿的移动直播SDK初体验

本文转自一只视频程序猿的移动直播SDK初体验,此处仅做排版改动。

今早老板召开站会,“移动直播这么火,市面上有一百多个APP,小斌,你下周交个原型APP瞅瞅!”

小弟心中一万匹草泥马奔过,这玩意儿哪儿是几天就能弄出来的?问候归问候,咱还是赶紧调研吧,端午还约了妹子游泳呢。

方案选项

作为公司音视频大神,对流媒体基本概念还是OK的。咱首先看看市面上火热的某客、某椒APP怎么工作的。主播端推流使用RTMP推向流媒体源站,服务器内部通过RTMP协议多级拉流至边缘CDN节点,播放端从边缘CDN节点获取直播内容,大致如下图:
这里写图片描述

其中上行RTMP推流很普遍了,很多游戏直播都使用obs推RTMP流。
在整个过程中,涉及很多流媒体的基本概念,先说说GOP。
GOP即Group of picture(图像组),指两个I帧之间的距离。即几秒有一个关键帧。分析线上主流的移动直播APP,大都在2、3秒之间。
这里写图片描述

一般的云服务公司都会提供多种协议的拉流方式,优缺点如下:

  • HLS协议,移动h5浏览器支持较好,但是延迟较大。移动端播放前需要产生三个分片,每个分片至少得是一个GOP。一个GOP即使是2秒,也意味着这个环节耗费了6秒的延时。
  • RTMP协议,需要访问1935端口,支持双向互动,实时性很好,PC flash原生支持。
  • HTTP-FLV,不支持双向互动,实时性和RTMP协议一致。

基于以下几点理由,小弟准备采用HTTP-FLV作为拉流协议:

  • 国内网络情况的恶劣程度,并不是每个网络防火墙都允许1935包通过。
  • RTMP协议和HTTP-FLV,实际传输的内容都是相同的FLV,实时性也一样。
  • RTMP协议握手方式比HTTP复杂。

确定好了拉流协议,再看看推流侧依赖的参数。

  • FPS,每秒编码传输的视频帧数;
  • 码率,每秒编码传输的音视频比特数;
  • GOP,关键帧间隔;
  • 分辨率。

在相同码率的情况下,FPS和分辨率越大,视频的图像质量越差。为了平衡主播上行带宽、用户观看下行带宽和图像质量的关系,需要很好处理这几个值。

SDK下载

首先,Android/iOS系统上,并不包含RTMP推流组件,这块需要自己开发。系统自带的播放器也不支持flv文件的播放。小弟只能去阿里云、腾讯云、百度云、金山云等大牛云服务公司找解决方案了。把每个帐号都注册一遍,大致情形如下。

这里写图片描述

其中,腾讯云ILVB实名认证后需要人工审核5个工作日,反正至今没有看到SDK。
更令人震惊的是,虽然阿里云提供多媒体云服务,但是至今尚未提供移动直播SDK。
总体来说,开放较好的是金山云,SDK放到了github上,每次change log都很清楚,几乎每周都有更新。 腾讯云就有些犹抱琵琶半遮面,给SDK试用都不痛快。

SDK功能对比

拿到SDK,首先对比一下相关功能。其中腾讯云LVB直播只提供了播放SDK,还仅只支持HLS播放,这个方案首先扑街。ILVB互动直播未拿到SDK,暂且不表。这样一来,可供选择的大型云服务商的方案就剩下金山云和百度云。

移动直播SDK涉及的功能比较多,我先解释一下几个基本功能点:

  • 推流编码,涉及软件编码和硬解编码。相同码率,软编图像质量更清晰,但是耗电更高;
  • 网络自适应,当网络抖动时根据网络情况调整发送速率;
  • 美颜,对主播图像进行美白、液化、磨皮等处理;
  • 混音,当主播聊天时,可以把背景音乐混到音视频里面;
  • 播放视频旋转,可以根据视频宽高,决定横屏还是竖屏播放;
  • 直播重加载,当播放状况不佳时,重新拉流播放。

为了对比其他方案,做了几张表格。

Android推流功能列表如下:

这里写图片描述

从表中可以看到,

  • 百度云接口还很粗糙,连移动直播必选的美颜功能都不支持,首先淘汰。
  • 小弟想有噪声抑制功能,但是这些SDK都没有支持,不过令人欣喜的是,金山云支持自定义音频数据处理,可以把自己的噪声抑制代码挂载进去。
  • 相比而已,金山云的接口较开放。其中金山云SDK支持的功能更丰富些,能满足当前移动直播的要求。

iOS推流功能列表如下:
这里写图片描述

  • 从表中可以看出,iOS推流功能丰富程度普遍较高,这和市面上主播大量使用iPhone推流有密切关系。
  • 从特色功能来看,只有金山云支持画中画和美声功能。
  • 自定义滤镜和原始数据处理,体现了SDK的开放程度,这方面百度云是严重失分的。
  • 在细节功能上,对声音和美颜的处理,体现了当前SDK对移动直播市场的重视程度。

Android播放功能列表如下:
这里写图片描述

iOS播放功能列表如下:
这里写图片描述

播放端关注点和推流端还有些不一样,播放侧除了考虑功能丰富以外,还需要考虑稳定性、功耗、包大小、开播速度等,静态对比可以作为参考。金山云支持直播重加载,能有效降低播放卡顿率。

总结一下,通过试用大型云服务商的移动直播SDK,得出以下结论:

  • 能完全运行起来的是金山云、百度云提供的SDK。腾讯云、阿里云尚未提供真正可用的移动直播SDK。
  • 从Android/iOS推流功能以及播放功能来看,金山云提供的功能最为丰富。
  • 百度云提供的推流功能还比较简单,离市面的要求有些距离。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程

Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一:前言 最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linux在ARM9上的移植,网上基本都是ZC702、zed的教程,这对于买了非标…

程序员的创业困境 谁来帮助出出主意?

【编者按】有人说,程序员是吃青春饭的,到一定年龄就得考虑转行,也有人选择自己创业。而当创业使你偏离了之前持续学习专业知识的轨道时,你会选择在创业路上继续坚持还是回归自己的老本行?编程编了十几年的Dan McComas半…

关于创业:希望有人在N年前就告诉我的一些事儿

【编者按】原文作者为前微软员工、创业家Amir Khella,他离开微软后开始自主创业,并成功创办了多家公司。他经常在博客中分享自己的创业故事和经验。以下是其中一篇博文,他认为创业者想要成功,首先需要找到自己的方向,再…

Rust核心团队前成员Brian Anderson加入PingCAP

昨天,国内新型分布式数据库公司PingCAP联合创始人兼CEO刘奇在朋友圈宣布,Rust核心团队前成员Brian Anderson将加入公司。PingCAP联合创始人兼CTO黄东旭进一步向InfoQ记者证实了此消息,并透露Brian将从事TiKV相关的工作,从存储引擎…

观察者模式-Observer Pattern

1.主要优点 观察者模式的主要优点如下: (1) 观察者模式可以实现表示层和数据逻辑层的分离,定义了稳定的消息更新传递机制,并抽象了更新接口,使得可以有各种各样不同的表示层充当具体观察者角色。 (2) 观察者模式在观察目标和观察者…

赌还是不赌 你应该辞职去创业吗?

【编者按】本文的作者是Amir Khella,他是一位著名的用户体验设计师,也是创业顾问和企业家。在过去的三年里,他成功的打造了十几家公司,其中不少还被大企所收购,比如说Google收购了他的DocVerse,LimeLight N…

Python 深浅copy 和文件操作

深浅copy 1,先看赋值运算。 l1 [1,2,3,[barry,alex]] l2 l1l1[0] 111 print(l1) # [111, 2, 3, [barry, alex]] print(l2) # [111, 2, 3, [barry, alex]]l1[3][0] wusir print(l1) # [111, 2, 3, [wusir, alex]] print(l2) # [111, 2, 3, [wusir, alex]] 对…

C# 实现生成带二维码的专属微信公众号推广海报

原文:C# 实现生成带二维码的专属微信公众号推广海报很多微信公众号中需要生成推广海报的功能,粉丝获得专属海报后可以分享到朋友圈或发给朋友,为公众号代言邀请好友即可获取奖励的。海报自带渠道二维码,粉丝长按二维码即可关注微信公众号&…

最新研究显示人类智力逐渐下降且变得更愚蠢

请大家去测试智力,看看是否正常水平?真的,智力在下降,在网络、电子设备和化肥、农药,转基因等因素下,人越来越差了。 保存到相册研究人员称现代人类将逐渐智力下降,这是因为我们不再需要智力来维…

缺陷的背后---LIMIT M,N 分页查找

一、问题发现篇 最近组内做了一次典型缺陷分享时,翻阅2018年的缺陷,找到了一个让我觉得“有料”的bug(别的同事测试发现的),先大致简单的描述下这个问题: 需要实现的功能:从一个DB库同步某一段时…

angularjs 结构的两种写法(2)

app.js里面 route.js 本项目中的路由写法,路由的意思是:对应的跳转页面路径,比如此处当路由是member.user-statisttic时,是会跳转到url:http://.../user-statisttic.html页面,然后此页面对应的ctrl会解析也页面的参数。…

设置Eclipse中的字符集为UTF-8

Eclipse 修改字符集 默认情况下 Eclipse 字符集为 GBK,但现在很多项目采用的是 UTF-8,这是我们就需要设置我们的 Eclipse 开发环境字符集为 UTF-8, 设置步骤如下: 在菜单栏选择 Window -> Preferences -> General -> Wor…

Python数据可视化2018:数据可视化库为什么这么多?

本文最初发布于Anaconda开发者博客,经原作者授权由InfoQ中文站翻译并分享。 在奥斯汀举行的SciPy 2018年特别会议上,大量开源Python可视化工具的代表分享了他们对Python数据可视化未来的展望。我们看到了Matplotlib、Plotly、VisPy等许多库的更新。我作为…

SpringMVC工作原理

大家好,我是IT修真院深圳分院第十一期学员,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务二的一个知识点:SpringMVC工作原理 1、背景介绍 一:背景介绍 JavaWeb经历的几个变化: 1:…

shell 数组

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1)定义数组: my_array(1 2 3 4) 也可这样赋值:my_array[4]爱 读取: echo ${my_array[2]…

Spring-jdbc:JdbcTemplate使用简介

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架. 作为 SpringJDBC 框架的核心, JDBC 模板…

嘉益仕(Litns)带您读懂MES系统:选型篇

自从智能制造概念提出以来,制造执行系统MES在国内掀起了新一波的热潮。众多企业在技术发展、政策导向和自身需要的推动下,纷纷上马MES请添加链接描述项目。 由此也带动了MES软件开发企业的快速发展。一夜之间MES软件开发企业遍地开花,MES产品…

js - 执行上下文和作用域以及闭包

首先,咱们通常被"执行上下文","执行上下文环境","上下文环境","执行上下文栈"这些名词搞混。那我们一一来揭秘这些名字的含义。 这一块一直比较晦涩难懂,还是需要仔细去斟酌斟…

Spring之JDBCTemplate

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术模…

从蚂蚁金服实践入手,带你深入了解 Service Mesh

本文整理自蚂蚁金服高级技术专家敖小剑在 QCon 上海 2018 上的演讲。我是来自蚂蚁金服中间件团队的敖小剑,目前是蚂蚁金服 Service Mesh 项目的 PD。我同时也是 Servicemesher 中国技术社区的创始人,是 Service Mesh 技术在国内最早的布道师。我今天给大…