SlideShare a Scribd company logo
1 of 18
Download to read offline
na copa do mundo 2014
Streaming de vídeo ao vivo
leandromoreira.com.br
Agenda - Lightning Talk
● Como funciona vídeo ao vivo?
● Lua para servir vídeo ao vivo
● Lua para “experiência de banda larga”
● Dicas gerais: testes, memory leak ...
● Perguntas
Como funciona o vídeo ao vivo (HLS)
240p.m3u8
480p.m3u8
720p.m3u8
1 - GET /variant.m3u8 (text)
2 - GET /720p.m3u8 (text)
240p.m3u8
variant.m3u8
480p.m3u8 720p.m3u8
3 - GET /seg3.ts (video)
4 - GET /seg4.ts (video)
5 - GET /720p.m3u8 (text)
6 - GET /seg5.ts (video)
7 - GET /seg6.ts (video)
8 - ...
http
http
seg3.ts
seg4.ts
seg5.ts
seg6.ts
seg3.ts
seg4.ts
seg5.ts
seg6.ts
seg3.ts
seg4.ts
seg5.ts
seg6.ts
Resumindo...
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:26
#EXTINF:9.901,
segment26.ts
#EXTINF:9.901,
segment27.ts
#EXTINF:9.501,
segment28.ts
0110111001101001011011
1001110100011001010110
1110011001000110111100
1000000110111001111000
0010000001101001011100
1100100000011000010010
0000011010000111010101
1001110110010100100000
0111001101110101011000
1101100011011001010111
001101110011
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-STREAM-INF:RESOLUTION=960x540
live/medium.m3u8
#EXT-X-STREAM-INF:RESOLUTION=1280x720
live/high.m3u8
#EXT-X-STREAM-INF:RESOLUTION=640x360
live/low.m3u8
Manifesto (texto) apontando para
outros manifestos (qualidades)
Manifesto (texto) apontando
para os vídeo
Video (binário) MPEG TS
com pedaços do vídeo
Lua para servir vídeo ao vivo
Encoder
HLS
packager
Camera
PythonCassandra
raw rtmp
.m3u8
.ts
Backend
Comunicação com cassandra no nginx/lua
session = cassandra.new()
session:set_timeout(1000)
connected, err = session:connect("127.0.0.1", 9042)
local video, err = session:execute("SELECT seq, name from videos")
assert.same("gnews", video[1].name)
assert.same("multishow", video[2].name)
assert.same("viva", video[3].name)
Driver para cassandra - Juarez Bochi
tcp = ngx.socket.tcp || require("socket").tcp
sock = tcp()
sock:connect(host, host_port)
local frame = version .. flags .. stream_id .. string.char(op_code) .. length .. body
local bytes, err = sock:send(frame)
local header, err = sock:receive(8)
local header_buffer = decoding.create_buffer(header)
local length = decoding.read_int(header_buffer)
body, err = sock:receive(length)
Lua para gerar manifesto (.m3u8) e servir binário (.ts)
Lua para “melhor experiência de banda larga”
???
ISPx
ISPy
ISPk
SPBGP announcement
186.192.81.0/24
ISPx ISPy
ISPk
RJ
186.192.81.2
BGP announcement
186.192.81.0/24
PoP
PoP
Lição aprendida
As entidades da Internet geralmente sabem por
qual link (rota, capacidade) vão responder a
uma requisição.
*tudo isso com uma certa precisão
O problema da banda não infinita
ISP X
ISP Y
20Gbps
5Gbps
IXP
ISP K
80Gbps
8Gbps
Lição aprendida
Quando há saturação em um link, estamos
prejudicando todos os usuários daquele link.
A ideia
ISP Y
5Gbps
Dicas gerais: testes (busted) e memory leak
it("should support a page_size option", function()
local rows, err = session:execute("SELECT * FROM pagination_test_table")
assert.falsy(err)
assert.same(200, #rows)
end)
$ luac -p -l myprogram.lua | grep ETGLOBAL
Ou para Lua 5.2
$ luac -p -l myprogram.lua | grep ‘ETGLOBAL.*_ENV’
Links & perguntas
● http://lua-users.org/wiki/DetectingUndefinedVariables
● https://github.com/jbochi/lua-resty-cassandra
● https://leandromoreira.com.br
● http://olivinelabs.com/busted/
● http://blog.togo.io/how-to/adding-interval-sets-to-redis/
● https://en.wikipedia.org/wiki/Border_Gateway_Protocol
● https://tools.ietf.org/html/draft-pantos-http-live-streaming-19
● https://github.com/openresty/lua-nginx-module
● https://openresty.gitbooks.io/programming-
openresty/content/testing/test-modes.html#_valgrind_mode

More Related Content

What's hot

Boas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspecBoas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspecfabio perrella
 
STC NG5 DR2 José Manuel
STC NG5 DR2 José ManuelSTC NG5 DR2 José Manuel
STC NG5 DR2 José ManuelAlberto Casaca
 
Explorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenhoExplorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenhoRafael Monteiro e Pereira
 
Memórias
MemóriasMemórias
Memóriaswendhel
 
GDG Conf Node JS sem segredos
GDG Conf Node JS sem segredosGDG Conf Node JS sem segredos
GDG Conf Node JS sem segredosCaio Cutrim
 

What's hot (6)

Boas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspecBoas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspec
 
gaussian.erros
gaussian.errosgaussian.erros
gaussian.erros
 
STC NG5 DR2 José Manuel
STC NG5 DR2 José ManuelSTC NG5 DR2 José Manuel
STC NG5 DR2 José Manuel
 
Explorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenhoExplorando protocolos de serialização de alto desempenho
Explorando protocolos de serialização de alto desempenho
 
Memórias
MemóriasMemórias
Memórias
 
GDG Conf Node JS sem segredos
GDG Conf Node JS sem segredosGDG Conf Node JS sem segredos
GDG Conf Node JS sem segredos
 

Similar to Lua em transmissões ao vivo

Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Leandro Moreira
 
Sistemas embarcados: motivação e primeiros passos
Sistemas embarcados: motivação e primeiros passosSistemas embarcados: motivação e primeiros passos
Sistemas embarcados: motivação e primeiros passosMarcelo Barros de Almeida
 
Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!Rodrigo Campos
 
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniZ13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniJoao Galdino Mello de Souza
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoFabio Telles Rodriguez
 
Webinar: Conheça o RTOS NuttX
Webinar: Conheça o RTOS NuttXWebinar: Conheça o RTOS NuttX
Webinar: Conheça o RTOS NuttXEmbarcados
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...Sandro Suffert
 
Apostila 2 conceitos de hardware e software
Apostila 2   conceitos de hardware e softwareApostila 2   conceitos de hardware e software
Apostila 2 conceitos de hardware e softwarePaulo Fonseca
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoEmerson Macedo
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
curso-de-montagem-e-manutencao-de-computadores-xtends-aula21.ppt
curso-de-montagem-e-manutencao-de-computadores-xtends-aula21.pptcurso-de-montagem-e-manutencao-de-computadores-xtends-aula21.ppt
curso-de-montagem-e-manutencao-de-computadores-xtends-aula21.pptCristian129328
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?tdc-globalcode
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Aula05 discos rigidos_completo
Aula05 discos rigidos_completoAula05 discos rigidos_completo
Aula05 discos rigidos_completoElsa Matânia
 
Sistemas operacionais e multimidia
Sistemas operacionais e multimidiaSistemas operacionais e multimidia
Sistemas operacionais e multimidiaWesley Rabêlo
 
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTVDesenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTVmulder3
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linuxeliezer
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linuxeliezer
 

Similar to Lua em transmissões ao vivo (20)

Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17
 
Sistemas embarcados: motivação e primeiros passos
Sistemas embarcados: motivação e primeiros passosSistemas embarcados: motivação e primeiros passos
Sistemas embarcados: motivação e primeiros passos
 
Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!
 
Palestra omap
Palestra omapPalestra omap
Palestra omap
 
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniZ13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Webinar: Conheça o RTOS NuttX
Webinar: Conheça o RTOS NuttXWebinar: Conheça o RTOS NuttX
Webinar: Conheça o RTOS NuttX
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
 
Apostila 2 conceitos de hardware e software
Apostila 2   conceitos de hardware e softwareApostila 2   conceitos de hardware e software
Apostila 2 conceitos de hardware e software
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - Introdução
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
curso-de-montagem-e-manutencao-de-computadores-xtends-aula21.ppt
curso-de-montagem-e-manutencao-de-computadores-xtends-aula21.pptcurso-de-montagem-e-manutencao-de-computadores-xtends-aula21.ppt
curso-de-montagem-e-manutencao-de-computadores-xtends-aula21.ppt
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Aula05 discos rigidos_completo
Aula05 discos rigidos_completoAula05 discos rigidos_completo
Aula05 discos rigidos_completo
 
Sistemas operacionais e multimidia
Sistemas operacionais e multimidiaSistemas operacionais e multimidia
Sistemas operacionais e multimidia
 
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTVDesenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
 

Lua em transmissões ao vivo