整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

程序员的福利-腾讯重要开源框架汇总



、Android 热修复框架 Tinker★Star 8967

Tinker是Android的热修复解决方案库,它支持dex,库和资源更新,无需重新安装apk。有一些问题,Tinker不能动态更新:

无法更新AndroidManifest.xml,例如添加Android组件。;不支持一些三星型号与os版本的android-21;由于GooglePlay开发者分发协议,我们无法动态更新我们的apk(详情:

https://github.com/Tencent/tinker)

2、微信客户端跨平台组件Mars★Star 8874

Mars是微信官方的终端基础组件,目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。主要包括以下几个部分:

●comm:可以独立使用的公共库,包括socket,线程,消息队列,协程等;

●Xlog软件:日志组件,可靠性高,高性能

●SDT:网络诊断组件

●STN:信令分发网络模块,也是Mars最主要的部分。图。(详情:https://github.com/Tencent/mars)

3、微信移动数据库框架 WCDB(WeChatDatabase) ★Star3123

WCDB(WeChatDatabase)是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android,WCDB于6月9日正式对外开源。

开源地址:https://github.com/Tencent/wcdb

WCDB for iOS/macOS 基本功能

·WINQ(WCDB语言集成查询): 通过WINQ,开发者无须为了拼接SQL的字符串而写一大坨胶水代码。

·ORM(Object Relational Mapping):WCDB支持灵活、易用的ORM。开发者可以很便捷地定义表、索引、约束,并进行增删改查操作。

·多线程高并发: WCDB支持多线程读与读、读与写并发执行,写与写串行执行。

·加密:WCDB提供基于SQLCipher的数据库加密。

·损坏修复: WCDB内建了Repair Kit用于修复损坏的数据库。

·反注入: WCDB内建了对SQL注入的保护。

WCDB for Android 基本功能

·基于SQLCipher的数据库加密

·使用连接池实现并发读写

·内建 Repair Kit 可用于修复损坏数据库

·针对占用空间大小优化的数据库备份/恢复功能

·日志输出重定向以及性能跟踪接口

·内建用于全文搜索的mmicu FTS3/4 分词器

4、手机前端开发调试工具vConsole★Star 2393

vConsole是一款由微信公众平台前端团队打造的前端调试面板,专治手机端看 log 难题。 目前 vConsole 自带有 2 个面板,默认为“日志”面板,负责展示 log。第二个是“系统”面板,vConsole会自动将一些基础信息(如系统版本)打印出来,方便开发者定位问题。若页面是在微信内置浏览器中打开的,vConsole还会打印出微信版本号、当前网络类型等额外信息。(详情:https://github.com/WechatFE/vConsole)

5、微信团队前端开发工具WeFlow ★Star 2233

这是一个高效、强大、跨平台(macOS & Win)的前端工具,核心基于 tmt-workflow 工作流.(详情:

https://github.com/weixin/WeFlow)

6、分布式后台服务引擎MSEC★Star 2221

毫秒服务引擎(MSEC)由腾讯 QQ 团队开源。它是一个后端 DEV&OPS 引擎,包括RPC,名称查找,负载平衡,监控,发布和容量管理。毫秒服务引擎特性:

● 模块间访问采用RPC的方式,开发者不用关注网络与报文格式,像写单机程序一样开发分布式服务。

● 负载自动均衡与容错,对于单机故障、局部网络波动等状况自动应对,服务高可用性。

● 支持 C/C++/java/PHP 语言,如果选择 C/C++ 语言,支持协程,兼具开发和运行效率。

●Web 化的管理界面

● 简易部署,需要复杂部署的服务器都采用docker镜像的方式安装

● 相比使用其他开源组件拼凑起来的解决方案,毫秒服务引擎更加的体系化,对团队的规范更加到位(详情:http://haomiao.qq.com/)

7、随身调测平台GT★Star 2183

GT(随身调)是 APP 的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug Environment)。利用 GT,仅凭一部手机,无需连接电脑,您即可对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、 开发日志的查看、Crash日志查看、网络数据包的抓取、APP 内部参数的调试、真机代码耗时统计等。如果您觉得GT提供的功能还不够满足您的需要,您还可以利用 GT 提供的基础 API 自行开发有特殊功能的 GT 插件,帮助您解决更加复杂的 APP 调试问题。(详情:

https://github.com/Tencent/GT)

8、Unity3D 下 Lua 编程解决方案 xLua★Star 1816

xLua为Unity3D增加Lua脚本编程的能力,xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:

① 可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现;

② 出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc;

③ 编辑器下无需生成代码,开发更轻量;

(详情:https://github.com/Tencent/xLua)

9、RPC开发框架Tars★Star 1800

它是基于名字服务使用 Tars 协议的高性能 RPC 开发框架,配套一体化的运营管理平台。Tars 是腾讯从 2008 年到今天一直在使用的后台逻辑层的统一应用框架 TAF(Total Application Framework),目前支持 C ++ 和 Java 两种语言。目前该框架在腾讯内部,各大核心业务都在使用,颇受欢迎,基于该框架部署运行的服务节点规模达到上万个。(详情:

https://github.com/Tencent/Tars)

10、MySQL集群PhxSQL★Star 1759

PhxSQL是一个基于Paxos和Percona的高可用性和强大的一体化MySQL集群,PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下,可自身实现自动Master切换,且保证数据一致性。(详情:https://github.com/tencent-wechat/phxsql)

11、超轻量级 Web 手势库AlloyFinger★Star 1734

可以看到hammerjs体积远远大于AlloyFinger,对于手机QQ web加载速度性能追求极致的同学来说,使用hammerjs的大小是不可以接受的!那么,为什么hammerjs这么大?看下架构设计便知♂(详情:https://github.com/AlloyTeam/AlloyFinger)架构设计:

12、多机状态拷贝类库PhxPaxos★Star 1244

PhxPaxos是腾讯公司微信后台团队自主研发的一套基于 Paxos 协议的多机状态拷贝类库。它以库函数的方式嵌入到开发者的代码当中,使得一些单机状态服务可以扩展到多机器,从而获得强一致性的多副本以及自动容灾的特性。 这个类库在微信服务里面经过一系列的工程验证,并且我们对它进行过大量的恶劣环境下的测试,使其在一致性的保证上更为健壮。(详情:

https://github.com/tencent-wechat/phxpaxos)

13、Web组件化框架Omi ★1057

Omi是一款开放现代的Web组件化框架,有以下特性:

① 局部CSS:HTML+ Scoped CSS + JS组成可复用的组件。不用担心组件的CSS会污染组件外的,Omi会帮你处理好一切

② 超小的尺寸:7 kb (gzip),虽然文件尺寸小,但是兼容性很好!

③ 更新更自由:每个组件都有update方法,可自由更新。

④ 模板引擎可替换,开发者可以重写Omi.template方法来使用任意模板引擎

⑤ 完全面向对象

⑥ Omi提供了ES6+和ES5的两种开发方案

(详情:https://github.com/AlloyTeam/omi)

14、UI 前端框架 QMUI Web ★Star 888

QMUIWeb 是一个专注 Web UI 开发,帮助开发者快速实现特定的一整套设计的框架。通过 QMUI Web,开发者可以很轻松地提高 Web UI 开发的效率,同时保持了项目的高可维护性与稳健。如果你的项目需要有一套完整的设计,并且可能有频繁的变动,那么 QMUI Web 框架将会是你最好的解决方案。(详情:

https://github.com/QMUI/QMUI_Web)

15、curvejs★Star 749

是腾讯AlloyTeam打造的一款魔幻线条框架,让线条成为一名优秀的舞者,让线条们成为优秀的舞团,HTML5 Canvas就是舞台。其原理就是使用 Perlin-Noise +Particle System + Bézier Curve + Color Transition 制作而成。使用curvejs实现类似变幻线功能只需要不到10行代码。 https://github.com/AlloyTeam/curvejs

16、基于C ++的RPC框架 PhxRPC★Star 645

PhxRPC是微信后台团队推出的一个非常简洁小巧的RPC框架,编译生成的库只有450K(详情:

https://github.com/tencent-wechat/phxrpc)

17、Web 开发调试工具AlloyLever★533

AlloyLever是腾讯 AlloyTeam 团队开源的一款 Web开发调试工具。AlloyLever的功能:点击alloylever 按钮之间切换显示或隐藏工具面板; Console会输出所有用户打印的日志如 console.[log/error/info/debug/debug] ;Console会输出所有的错误信息(脚本错误和网络请求错误) ;XHR 面板会输出所有()AJAX 请求和服务器端返回的数据; Resouces 面板会输出所有的 Cookie 信息和 LocalStorage ;TimeLime 面板会输出页面相关的生命周期里的时间段耗时情况(详情:

https://github.com/AlloyTeam/AlloyLever)

18、bk-cmdb★Star 452

蓝鲸配置平台是一款面向应用的 CMDB,在 ITIL 体系里,CMDB是构建其它流程的基石,而在蓝鲸智云体系里,配置平台就扮演着基石的角色,为应用提供了各种运维场景的配置数据服务。现有功能如下:用户管理、业务管理、拓扑(集群、模块)管理、资源池管理、主机管理、日志查询(详情:

https://github.com/Tencent/bk-cmdb)

19、分布式开发框架Pebble-RPC★Star 351

Pebble是一个分布式开发框架。基于该框架,可以让开发者只需专注于业务逻辑的实现,而不需要关注基础功能的开发,如网络通信,数据存储,集群管理等。使用pebble配套的运营系统,可方便的进行游戏开区开服,版本升级,扩容缩容等操作。当前发布的Pebble版本,是一个Linux平台C++版本的后台开发框架。整个分布式开发框架包括:服务管理、集群管理、RPC通信、协程、广播、进程框架。(详情:https://github.com/TencentOpen/Pebble)

20、UI自动化测试框架GAutomator★Star 337

GAutomator是一 Unity 手游的UI 自动化测试框架。

WindowsOs 和软件要求:Windows 7(32/64位),Windows 8或更高版本;python 2.7;Android SDK(或adb),在设备上启用ADB设置,并使用usb与您的PC连接您的Android设备。Linux和软件要求:Ubuntu 14.04 LTS;python 2.7;Android SDK(或adb),在设备上启用ADB设置,并使用usb与您的PC连接您的Android设备。

Android:Android 4.3(API级别18)或更高版本。(详情:https://github.com/Tencent/GAutomator)

21、WeDemo★Star 297

WeDemo为微信团队开源项目,用于帮助微信开发者完成微信登录、微信分享等功能的接入和开发。开发者可参考源代码完成开发,也可以直接将代码应用到自己的App开发中,安全、便捷地在App中实现微信分享、微信登录功能。(详情:https://github.com/Tencent/WeDemo)

22、AI开发框架组件 Behaviac★Star 297

Behaviac是游戏 AI 的开发框架组件,也是游戏原型的快速设计工具。支持行为树BT,状态机 FSM,HTN 等多种范式,方便的编辑和调试。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发。编辑器可以运行在 PC 上,操作方便直观可靠,支持实时和离线调试;编辑器可以导出 xml,bson 等多种格式,更可以导出 C++,C# 源码,提供最高效率。 运行时支持全平台,有 C++ 和 C# 两个版本,原生支持Unity。 (详情:

https://github.com/Tencent/behaviac)

23、Fanvas★Star 214

Fanvas是一个把swf转为html5 canvas动画的系统,由两部分组成:Action实现的解析器、js运行库。(详情:https://github.com/Tencent/Fanvas)

24、HaboMalHunter★Star 161

HaboMalHunter是 Habo Malware 分析系统(https://habo.qq.com)的子项目,可用于Linux系统上的自动恶意软件分析和安全评估。该工具可用于 Linux x86 /x64 平台上 ELF 文件的静态和动态分析。(详情:

https://github.com/Tencent/HaboMalHunter)

25、基于ACE的服务框架 TEAF★157

TEAF(TencentEasy ACE Framework),基于 ACE 的高性能服务框架,单进程多线程模型,支持 select/epoll 等多种网络 IO 模型,同时支持 tcp 和 udp 协议,支持二进制(pb等)和文本格式(json等,易于理解),相对多进程模型的框架来说更易维护,更轻量。业务侧只需要开发自己的逻辑处理即可实现高性能的业务后台服务器。已经在腾讯互娱(IEG)大部分平台类产品中成熟应用,比如 idip,游戏人生,心悦,帮帮,新终端游戏中心 aj,cross 等,公司其他 BG 也有很多产品在使用。(详情:

https://github.com/Tencent/Teaf)

26、QT4A★Star 67

QT4A(Android的快速测试)是适用于 Android 应用程序的 QTA 测试自动化驱动程序。支持Android 2.3 - 6.0 版本,需要设备根。支持多设备同时测试;支持跨进程,跨应用测试;支持进行过控件混淆的安装包(需要映射文件);支持自定义控件(如果有代码混淆需要映射文件)(详情:

https://github.com/Tencent/QT4A)

27、辅助测试工具WeTest-Assistant★Star 49

WeTest助手包括性能测试和远程调试两大功能。手游客户端性能测试常用性能维度,CPU,内存,FPS,流量一次性全部收集, 图表化展示,数据可按场景化分类,并且支持离线和在线两种模式,地铁上都可以做测试,Web上看报告。 支持ROOT和非ROOT安卓手机,支持越狱iOS系统。(详情:https://github.com/Tencent/WeTest-Assistant)

28、QT4i★Star 44

QT4i是iOS应用程序的QTA测试自动化驱动程序。主要特性:轻松易用、支持iOS Native控件,webview控件和自定义控件;平台支持,高效维护。(详情:https://github.com/Tencent/QT4i)

29、KNVProtoEngine★Star 44

KNV是一个模式自由的高性能树型协议处理引擎,是对Key-Value的一个通用结构化扩展。(详情:

https://github.com/Tencent/KNVProtoEngine)

30、优图人脸识别Python_sdk★Star 32

优图人脸识别(Face Recognition), 是由腾讯优图团队研发的,基于人的脸部特征信息进行身份识别的一种生物识别技术。它提供了"人脸检测与分析"、“人脸比对”、“人脸验证”、"人脸识别"等一整套技术方案。(详情:

https://github.com/TencentYouTu/python_sdk)

WF是一种Adobe Flash文件格式,通常用于在Web浏览器中播放动画或嵌入式音频/视频。要打开SWF文件,以下两种选项可以任选其一:


第一种 Adobe Flash Player


Adobe Flash Player是打开SWF文件的官方软件,可以通过双击SWF文件或在Adobe Flash Player中打开SWF文件。


第二种 Web浏览器


使用最新版本的Web浏览器(如Google Chrome),则可以直接在浏览器中打开SWF文件。只需右键单击SWF文件,然后选择“在浏览器中打开”选项即可。

但是随着HTML5技术的普及,越来越多的网站已经停止使用Flash插件,这使得SWF格式的文件难以在现代的网页浏览器中播放。因此,将SWF格式转换为MP4格式可以帮助我们让SWF文件在更多的设备和平台上播放,提高了文件的可用性和实用性。


SWF转换方式(转MP4)


MP4格式被广泛应用于各种设备和平台,包括iOS、Android、Windows和Mac等,因此将SWF格式转换为MP4格式可以让文件在更广泛的设备和平台上播放。


如果你正在寻找一款优秀的视频转换工具,那么迅捷视频工具箱是一个值得考虑的选择。它可以转换几乎所有常见的视频格式,包括MP4、AVI、MOV、MKV、FLV等等。

该工具支持批量转换功能,可以同时转换多个视频文件。只需要将需要转换的SWF文件导入,即可点击转换,高效的转换算法,可以快速转换大量视频文件。

对于需要在多个设备和平台上播放的多媒体文件,SWF转MP4是一个必要的步骤。

前不久抽空对目前比较火的视频直播,做了下研究与探索,了解其整体实现流程,以及探讨移动端HTML5直播可行性方案。

发现目前 WEB 上主流的视频直播方案有 HLS 和 RTMP,移动 WEB 端目前以 HLS 为主(HLS存在延迟性问题,也可以借助 video.js 采用RTMP),PC端则以 RTMP 为主实时性较好,接下来将围绕这两种视频流协议来展开H5直播主题分享。

一、视频流协议HLS与RTMP

1. HTTP Live Streaming

HTTP Live Streaming(简称 HLS)是一个基于 HTTP 的视频流协议,由 Apple 公司实现,Mac OS 上的 QuickTime、Safari 以及 iOS 上的 Safari 都能很好的支持 HLS,高版本 Android 也增加了对 HLS 的支持。一些常见的客户端如:MPlayerX、VLC 也都支持 HLS 协议。

HLS 协议基于 HTTP,而一个提供 HLS 的服务器需要做两件事:

编码:以 H.263 格式对图像进行编码,以 MP3 或者 HE-AAC 对声音进行编码,最终打包到 MPEG-2 TS(Transport Stream)容器之中;分割:把编码好的 TS 文件等长切分成后缀为 ts 的小文件,并生成一个 .m3u8 的纯文本索引文件;浏览器使用的是 m3u8 文件。m3u8 跟音频列表格式 m3u 很像,可以简单的认为 m3u8 就是包含多个 ts 文件的播放列表。播放器按顺序逐个播放,全部放完再请求一下 m3u8 文件,获得包含最新 ts 文件的播放列表继续播,周而复始。整个直播过程就是依靠一个不断更新的 m3u8 和一堆小的 ts 文件组成,m3u8 必须动态更新,ts 可以走 CDN。一个典型的 m3u8 文件格式如下:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000
gear1/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=311111
gear2/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=484444
gear3/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=737777
gear4/prog_index.m3u8

可以看到 HLS 协议本质还是一个个的 HTTP 请求 / 响应,所以适应性很好,不会受到防火墙影响。但它也有一个致命的弱点:延迟现象非常明显。如果每个 ts 按照 5 秒来切分,一个 m3u8 放 6 个 ts 索引,那么至少就会带来 30 秒的延迟。如果减少每个 ts 的长度,减少 m3u8 中的索引数,延时确实会减少,但会带来更频繁的缓冲,对服务端的请求压力也会成倍增加。所以只能根据实际情况找到一个折中的点。

对于支持 HLS 的浏览器来说,直接这样写就能播放了:

<video src=”./bipbopall.m3u8″ height=”300″ width=”400″  preload=”auto” autoplay=”autoplay” loop=”loop” webkit-playsinline=”true”></video>

注意:HLS 在 PC 端仅支持safari浏览器,类似chrome浏览器使用HTML5 video

标签无法播放 m3u8 格式,可直接采用网上一些比较成熟的方案,如:sewise-player、MediaElement、videojs-contrib-hls、jwplayer。

程序猿的生活:web前端全栈资料粉丝福利(面试题、视频、资料笔记,进阶路线)zhuanlan.zhihu.com/p/136454207

2. Real Time Messaging Protocol

Real Time Messaging Protocol(简称 RTMP)是 Macromedia 开发的一套视频直播协议,现在属于 Adobe。这套方案需要搭建专门的 RTMP 流媒体服务如 Adobe Media Server,并且在浏览器中只能使用 Flash 实现播放器。它的实时性非常好,延迟很小,但无法支持移动端 WEB 播放是它的硬伤。

虽然无法在iOS的H5页面播放,但是对于iOS原生应用是可以自己写解码去解析的, RTMP 延迟低、实时性较好。浏览器端,HTML5 video

标签无法播放 RTMP 协议的视频,可以通过 video.js 来实现。

<link href=“http://vjs.zencdn.net/5.8.8/video-js.css” rel=“stylesheet”>
<video id=“example_video_1″ class=“video-js vjs-default-skin” controls preload=“auto” width=“640” height=“264” loop=“loop” webkit-playsinline>
<source src=“rtmp://10.14.221.17:1935/rtmplive/home” type=‘rtmp/flv’>
</video>
<script src=“http://vjs.zencdn.net/5.8.8/video.js”></script>
<script>
videojs.options.flash.swf = ‘video.swf’;
videojs(‘example_video_1′).ready(function() {
this.play();
});
</script>


3. 视频流协议HLS与RTMP对比


二、直播形式

目前直播展示形式,通常以YY直播、映客直播这种页面居多,可以看到其结构可以分成三层:

① 背景视频层

② 关注、评论模块

③ 点赞动画

而现行H5类似直播页面,实现技术难点不大,其可以通过实现方式分为:

① 底部视频背景使用video视频标签实现播放

② 关注、评论模块利用 WebScoket 来实时发送和接收新的消息通过DOM 和 CSS3 实现

③ 点赞利用 CSS3 动画

了解完直播形式之后,接下来整体了解直播流程。

相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】

音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~

三、直播整体流程

直播整体流程大致可分为:

视频采集端:可以是电脑上的音视频输入设备、或手机端的摄像头、或麦克风,目前以移动端手机视频为主。

直播流视频服务端:一台Nginx服务器,采集视频录制端传输的视频流(H264/ACC编码),由服务器端进行解析编码,推送RTMP/HLS格式视频流至视频播放端。

视频播放端:可以是电脑上的播放器(QuickTime Player、VLC),手机端的native播放器,还有就是 H5 的video标签等,目前还是以手机端的native播放器为主。

(web前端学习交流群:328058344 禁止闲聊,非喜勿进!)

四、H5 录制视频

对于H5视频录制,可以使用强大的 webRTC (Web Real-Time Communication)是一个支持网页浏览器进行实时语音对话或视频对话的技术,缺点是只在 PC 的 Chrome 上支持较好,移动端支持不太理想。

使用 webRTC 录制视频基本流程

① 调用 window.navigator.webkitGetUserMedia()

获取用户的PC摄像头视频数据。

② 将获取到视频流数据转换成 window.webkitRTCPeerConnection

(一种视频流数据格式)。

③ 利用 WebScoket

将视频流数据传输到服务端。

注意:

虽然Google一直在推WebRTC,目前已有不少成型的产品出现,但是大部分移动端的浏览器还不支持 webRTC(最新iOS 10.0也不支持),所以真正的视频录制还是要靠客户端(iOS,Android)来实现,效果会好一些。


WebRTC支持度

WebRTC支持度

iOS原生应用调用摄像头录制视频流程

① 音视频的采集,利用AVCaptureSession和AVCaptureDevice可以采集到原始的音视频数据流。

② 对视频进行H264编码,对音频进行AAC编码,在iOS中分别有已经封装好的编码库(x264编码、faac编码、ffmpeg编码)来实现对音视频的编码。

③ 对编码后的音、视频数据进行组装封包。

④ 建立RTMP连接并上推到服务端。


五、搭建Nginx+Rtmp直播流服务

安装nginx、nginx-rtmp-module

① 先clone nginx项目到本地:

brew tap homebrew/nginx

② 执行安装nginx-rtmp-module

brew install nginx-full –with-rtmp-module

2. nginx.conf配置文件,配置RTMP、HLS

查找到nginx.conf配置文件(路径/usr/local/etc/nginx/nginx.conf),配置RTMP、HLS。

① 在http节点之前添加 rtmp 的配置内容:

② 在http中添加 hls 的配置

3. 重启nginx服务

重启nginx服务,浏览器中输入 http://localhost:8080,是否出现欢迎界面确定nginx重启成功。

nginx -s reload

六、直播流转换格式、编码推流

当服务器端接收到采集视频录制端传输过来的视频流时,需要对其进行解析编码,推送RTMP/HLS格式视频流至视频播放端。通常使用的常见编码库方案,如x264编码、faac编码、ffmpeg编码等。鉴于 FFmpeg 工具集合了多种音频、视频格式编码,我们可以优先选用FFmpeg进行转换格式、编码推流。

1.安装 FFmpeg 工具

brew install ffmpeg

2.推流MP4文件

视频文件地址:/Users/gao/Desktop/video/test.mp4

推流拉流地址:rtmp://localhost:1935/rtmplive/home,rtmp://localhost:1935/rtmplive/home

//RTMP 协议流
ffmpeg -re -i /Users/gao/Desktop/video/test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://10.14.221.17:1935/rtmplive/home
//HLS 协议流
ffmpeg -re -i /Users/gao/Desktop/video/test.mp4 -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -q 10 rtmp://10.14.221.17:1935/hls/test


注意:

当我们进行推流之后,可以安装VLC、ffplay(支持rtmp协议的视频播放器)本地拉流进行演示

3.FFmpeg推流命令

① 视频文件进行直播

ffmpeg -re -i /Users/gao/Desktop/video/test.mp4 -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -q 10 rtmp://192.168.1.101:1935/hls/test
ffmpeg -re -i /Users/gao/Desktop/video/test.mp4 -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -q 10 rtmp://10.14.221.17:1935/hls/test


② 推流摄像头+桌面+麦克风录制进行直播

ffmpeg -f avfoundation -framerate 30 -i “1:0″ \-f avfoundation -framerate 30 -video_size 640x480 -i “0” \-c:v libx264 -preset ultrafast \-filter_complex ‘overlay=main_w-overlay_w-10:main_h-overlay_h-10′ -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://192.168.1.101:1935/hls/test


更多命令,请参考:

FFmpeg处理RTMP流媒体的命令大全

FFmpeg常用推流命令

七、H5 直播视频播放

移动端iOS和 Android 都天然支持HLS协议,做好视频采集端、视频流推流服务之后,便可以直接在H5页面配置 video 标签播放直播视频。

<video controls preload=“auto” autoplay=“autoplay” loop=“loop” webkit-playsinline>
<source src=“http://10.14.221.8/hls/test.m3u8″ type=“application/vnd.apple.mpegurl” />
<p class=“warning”>Your browser does not support HTML5 video.</p>
</video>

八、总结

本文从视频采集上传,服务器处理视频推流,以及H5页面播放直播视频一整套流程,具体阐述了直播实现原理,实现过程中会遇到很多性能优化问题。

① H5 HLS 限制必须是H264+AAC编码。

② H5 HLS 播放卡顿问题,server 端可以做好分片策略,将 ts 文件放在 CDN 上,前端可尽量做到 DNS 缓存等。

③ H5 直播为了达到更好的实时互动,也可以采用RTMP协议,通过video.js 实现播放。

原文 https://zhuanlan.zhihu.com/p/146323842