Suche senden
Hochladen
廖雪峰 Saa s ovp
•
0 gefällt mir
•
1,307 views
D
drewz lin
Folgen
Technologie
Melden
Teilen
Melden
Teilen
1 von 46
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Osgi Intro
Osgi Intro
Ching Yi Chan
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
Bo-Yi Wu
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
Liu Allen
微软Bot framework简介
微软Bot framework简介
Zhichao Liang
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
Bo-Yi Wu
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
Justin Lin
Empfohlen
Osgi Intro
Osgi Intro
Ching Yi Chan
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
Bo-Yi Wu
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
Liu Allen
微软Bot framework简介
微软Bot framework简介
Zhichao Liang
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
Bo-Yi Wu
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
Justin Lin
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
FLASH开发者交流会
JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
Ching Yi Chan
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
Bo-Yi Wu
ES5 introduction
ES5 introduction
otakustay
Web development with zend framework
Web development with zend framework
thinkinlamp
Maintainable PHP Source Code
Maintainable PHP Source Code
Bo-Yi Wu
Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)
振揚 陳
合久必分,分久必合
合久必分,分久必合
Qiangning Hong
凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學
Shengyou Fan
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CI
Chu-Siang Lai
Using armeria to write your RPC
Using armeria to write your RPC
koji lin
PHPUnit 入門介紹
PHPUnit 入門介紹
Jace Ju
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
Mu Chun Wang
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
Chong-Kuan Chen
高性能远程调用解决方案
高性能远程调用解决方案
Ady Liu
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
Frank Xu
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
Johnson Gau
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan
Glider
Glider
windyrobin
Erlang游戏开发
Erlang游戏开发
litaocheng
Open Api&Sip
Open Api&Sip
cenwenchu
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接
Renaun Erickson
Weitere ähnliche Inhalte
Was ist angesagt?
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
FLASH开发者交流会
JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
Ching Yi Chan
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
Bo-Yi Wu
ES5 introduction
ES5 introduction
otakustay
Web development with zend framework
Web development with zend framework
thinkinlamp
Maintainable PHP Source Code
Maintainable PHP Source Code
Bo-Yi Wu
Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)
振揚 陳
合久必分,分久必合
合久必分,分久必合
Qiangning Hong
凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學
Shengyou Fan
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CI
Chu-Siang Lai
Using armeria to write your RPC
Using armeria to write your RPC
koji lin
PHPUnit 入門介紹
PHPUnit 入門介紹
Jace Ju
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
Mu Chun Wang
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
Chong-Kuan Chen
Was ist angesagt?
(14)
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
ES5 introduction
ES5 introduction
Web development with zend framework
Web development with zend framework
Maintainable PHP Source Code
Maintainable PHP Source Code
Http Headers 與 Cache 機制(2016)
Http Headers 與 Cache 機制(2016)
合久必分,分久必合
合久必分,分久必合
凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CI
Using armeria to write your RPC
Using armeria to write your RPC
PHPUnit 入門介紹
PHPUnit 入門介紹
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
Ähnlich wie 廖雪峰 Saa s ovp
高性能远程调用解决方案
高性能远程调用解决方案
Ady Liu
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
Frank Xu
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
Johnson Gau
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan
Glider
Glider
windyrobin
Erlang游戏开发
Erlang游戏开发
litaocheng
Open Api&Sip
Open Api&Sip
cenwenchu
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接
Renaun Erickson
Berserk js
Berserk js
taobao.com
Beyond rails server
Beyond rails server
Michael Chen
非常靠谱 Html 5
非常靠谱 Html 5
Tony Deng
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
zhangsuoyong
Script with engine
Script with engine
Webrebuild
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
CC
HTML+COIMOTION 開發跨平台 app
HTML+COIMOTION 開發跨平台 app
Ben Lue
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
javatwo2011
Software Engineer Talk
Software Engineer Talk
Larry Cai
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
FLASH开发者交流会
深入浅出Netty l.t
深入浅出Netty l.t
oleone
Python 于 webgame 的应用
Python 于 webgame 的应用
勇浩 赖
Ähnlich wie 廖雪峰 Saa s ovp
(20)
高性能远程调用解决方案
高性能远程调用解决方案
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Glider
Glider
Erlang游戏开发
Erlang游戏开发
Open Api&Sip
Open Api&Sip
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接
Berserk js
Berserk js
Beyond rails server
Beyond rails server
非常靠谱 Html 5
非常靠谱 Html 5
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
Script with engine
Script with engine
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
HTML+COIMOTION 開發跨平台 app
HTML+COIMOTION 開發跨平台 app
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
Software Engineer Talk
Software Engineer Talk
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
深入浅出Netty l.t
深入浅出Netty l.t
Python 于 webgame 的应用
Python 于 webgame 的应用
Mehr von drewz lin
Web security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-keary
drewz lin
Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013
drewz lin
Phu appsec13
Phu appsec13
drewz lin
Owasp2013 johannesullrich
Owasp2013 johannesullrich
drewz lin
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2
drewz lin
I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2
drewz lin
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
drewz lin
Csrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equal
drewz lin
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
drewz lin
Appsec usa roberthansen
Appsec usa roberthansen
drewz lin
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaola
drewz lin
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_edits
drewz lin
Appsec2013 presentation
Appsec2013 presentation
drewz lin
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
drewz lin
Appsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martin
drewz lin
Amol scadaowasp
Amol scadaowasp
drewz lin
Agile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usa
drewz lin
Vulnex app secusa2013
Vulnex app secusa2013
drewz lin
基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架
drewz lin
新浪微博稳定性经验谈
新浪微博稳定性经验谈
drewz lin
Mehr von drewz lin
(20)
Web security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-keary
Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013
Phu appsec13
Phu appsec13
Owasp2013 johannesullrich
Owasp2013 johannesullrich
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2
I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Csrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equal
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Appsec usa roberthansen
Appsec usa roberthansen
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation
Appsec2013 presentation
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martin
Amol scadaowasp
Amol scadaowasp
Agile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usa
Vulnex app secusa2013
Vulnex app secusa2013
基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架
新浪微博稳定性经验谈
新浪微博稳定性经验谈
廖雪峰 Saa s ovp
1.
基于SaaS的OVP平台设计
@廖雪峰 视讯天下 www.video-tx.com
2.
什么是OVP Online Video Platform
3.
什么是OVP B2B模式
4.
什么是OVP B2B模式
5.
C2C和B2B2C
SaaS
6.
OVP流程
定制播放器 上传 视频库 发布 观看 转码
7.
跨平台问题 浏览器:FLV,MP4 iOS:TS流 Android:MP4
8.
iOS视频 HTTP Live Streaming
#EXTM3U #EXTM3U #EXTINF:10, #EXT-X-STREAM-INF: BANDWIDTH=200000 0.ts low.m3u8 #EXTINF:10, #EXT-X-STREAM-INF: BANDWIDTH=500000 1.ts high.m3u8 #EXTINF:10, 2.ts #EXTINF:10, 3.ts #EXTINF:10, 4.ts #EXT-X-ENDLIST
9.
Flash视频播放问题 快速 自适应带宽 快速启动 按需下载
10.
Flash视频播放问题 快速
RTMP 键帧定位: http pseudo streaming 小切片定位: http live streaming
11.
Flash视频播放问题 自适应带宽
RTMP多码流 HTTP Live Streaming 高 中 低
12.
Flash视频播放问题 快速启动 RTMP
递增式小切片 1 2 3 4 5 5 5 5
13.
Flash视频播放问题 按需下载 RTMP
小切片加载
14.
为什么不采用RTMP 快速
杂的私有协议 自适应带宽 RTMP服务器贵 快速启动 CDN加速贵 按需下载 不支持客户端缓存
15.
小切片优势 快速
HTTP协议 高性能免费Web服务器 自适应带宽 CDN加速 快速启动 客户端缓存 按需下载
16.
小切片劣势 Flash版本>=10.1 小文件太多
abc-300000-350000.flv abc.flv?start=300000&end=350000 abc.flv
17.
解决CDN问题 自建CDN成本高
使用商用CDN服务 CDN服务稳定性问题 多CDN备份+切换 RTMP加速成本高 使用HTTP 大文件加速容易中断 小切片加速
18.
直播解决方案 RTMP推流 HTTP切片
播放器 CDN加速 CDN加速 RTMP流 FLV切片文件 客户端 直播服务器 Web服务器
19.
直播解决方案 优势: 标准HTTP协议
支持动态码流 支持回看 可支持P2P加速
20.
播放器设计 核心播放功能 自定义外观 JavaScript接口 支持插件: 广告、分享、字幕
21.
播放器设计 <script src="http://ovp/bootstrap.js"></script> <script>
createPlayer({"playerId":"12345", "videoId":"12300"}); </script> GET /bootstrap.js GET /bootstrap.swf GET /player?id=12345 <player id="12345" url="/p-v1.2.swf"> <settings> <bgColor>#000000</bgColor> <autoPlay>false</autoPlay> <logoOverlay>/company-logo.png</logoOverlay> </settings> <plugins> <plugin id="ad">...</plugin> <plugin id="subtitle">...</plugin> </plugins> </player>
22.
API接口 传统视频平台
OVP视频平台 播放器 Web管理 播放器 Web管理 Web接口 API接口 后台系统 后台系统
23.
API接口 Web管理
播放器 App 3rd-part API接口 Transcode Livecast Storage Messaging Monitor Database
24.
API接口 Flex界面+API调用
25.
API接口 便于自动化测试 便于故障调试 便于性能优化 便于修改UI
26.
API设计 √
HTTP JSON 简洁,高效 Web Services 杂,低效
27.
Java接口设计 Spring 3.0
Servlet Container ApiServlet ApiServlet Spring Container ServletToBeanProxy ApiServlet ApiFacade1 ApiFacade2 ApiFacade3
28.
Java接口设计 @Component class ApiServlet extends
HttpServlet { @Autowired ApiFacade[] facades; Map<String, ApiInvocation> mapping = scan(); void service(HttpServletRequest req,HttpServletResponse resp) { securityCheck(req.getHeader("Authorization")); String method = fromUrl(req); Object[] args = convertArgs(req); Object result = mapping.get(method).invoke(args); String jsonResult = dumpJson(result); writeResult(resp, jsonResult); } }
29.
Java接口设计 @Component class VideoApiFacade
implements ApiFacade { @ApiGetMethod GET /getVideo?videoId=12345 public Video getVideo( &type=flv @ApiParam("videoId") String id, Authorization: OAuth2 XXXXX @ApiParam("type") String type ) { return findVideo(id); POST /updateVideo } Authorization: OAuth2 XXXXX @ApiPostMethod video=%7B%22id%22%3A12345%2C public void updateVideo( %22title%22%3A%22ABC%22%2C @ApiParam("video") Video video %22desc%22%3A%22description ) { %22%7D doUpdate(video); } video={"id":12345,"title":"A } BC","desc":"description"}
30.
缓存策略 Public/Private API Redis
field1 value1 Key = method/args[0] key1 field2 value2 field3 value3 Field = args[1:] ... ...
31.
缓存策略
统一的缓存入口 @Component class ApiServlet { Object callApi(String method, Object... args) { key = method + args[0]; field = left(args); Object result = fromRedis(key, field); if (result==null) { result = invoke(method, args); setRedis(key, field, result); } return result; } }
32.
缓存策略 @Component
/getVideo?videoId=123&type=flv class VideoApiFacade key: getVideo/123 implements ApiFacade { field: flv @ApiGetMethod public Video getVideo( /getVideo?videoId=123&type=ios @ApiParam("videoId") String id, key: getVideo/123 @ApiParam("type") String type field: ios ) { return find(videoId, type); } "flv" value1 void clear(String videoId) { deleteFromRedis( "getVideo/123" "ios" value2 "getVideo/" + videoId); } "mp4" value3 } ... ...
33.
缓存策略 分布式Redis缓存 客户端路由
34.
SDK接口 代码生成:Java SDK, C#
SDK, Flash SDK 动态接口:Python SDK, Ruby SDK, PHP SDK client = APIClient() client.getVideo(videoId="123", type="ios") def http_curl(url, **params): pass class APIClient(object): def __getattr__(self, attr): return functools.partial(http_curl, url="http://ovp/%s" % attr)
35.
部署方式 Nginx + Jetty Nginx:高效的Web服务器 Jetty:轻量级Java
Web服务器 Nginx Jetty Jetty Jetty Jetty ...
36.
部署方式 SVN + Maven
+ CI SVN:版本控制 Maven:包依赖管理和编译 Hudson:CI服务器
37.
Web测试接口
38.
经验和问题 Maven管理
杂 本地运行调试困难 Hudson编译时间长 迭代周期长
39.
动态语言优势 保留参数信息 无需编译 部署简单(打包−
制−解压) 在线调试 迭代周期快!
40.
Python接口 # video_api.py @jsonrpc('get') def getVideo(videoId,
type='flv'): ''' >>> _init_test() >>> r = getVideo('1234', 'flv') >>> r.title 'ABC' ''' return findVideo(videoId, type) @jsonrpc('post') def updateVideo(video): update(video) if __name__=='__main__': import doctest doctest.testmod()
41.
Python接口 def jsonrpc(method):
def _decorator(func): @functools.wraps(func) def _wrapper(*args, **kw): args_info = getargsinfo(func) realargs = convertargs(ctx.request, args_info) ret = func(*realargs) return json.dumps(ret) return _wrapper return _decorator
42.
Python接口 # video_api.py @jsonrpc('get') @cache(3600) def getVideo(videoId,
type='flv'): pass
43.
Python环境 web.py simplejson fabric
44.
部署方式 Nginx + WSGI
45.
未来方向 xen virtualization /
gluster IaaS + SaaS + CDN
46.
Thank You!
@廖雪峰 www.liaoxuefeng.com
Jetzt herunterladen