рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдбреЛрдм-рдлреНрд▓реИрд╢ рдкреНрд▓реЗрдпрд░ рдЬреИрд╕реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╡реАрдбрд┐рдпреЛрд╕реНрдХреВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕ рдкрд░ рдХреНрдпрд╛ рдЖрдпрд╛ред
Adobe Flash - рдкреВрд░реНрд╡ рдореЗрдВ Macromedia Flash, рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдордВрдЪ рд╣реИред рдореАрдбрд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдПрдкреАрдЖрдИ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдПрдХ рд╡реЗрдм рдХреИрдорд░рд╛ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдФрд░ рдЖрд╡рд╛рдЬ рдХреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдордВрдЪ рдерд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдореНрдореЗрд▓рдиреЛрдВ рдФрд░ рдЪреИрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдореАрдбрд┐рдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рдЖрд░рдЯреАрдПрдордкреА (рд░рд┐рдпрд▓ рдЯрд╛рдЗрдо рдореИрд╕реЗрдЬрд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдмрдВрдж рдерд╛, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рдерд╛: рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЛ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдбреЛрдм рд╕реНрд╡рдпрдВ - рдПрдбреЛрдм рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд░ (рдПрдПрдордПрд╕) рд╕реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
2012 рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рдмрд╛рдж, Adobe "рдиреЗ RTMP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЛ " рдЖрддреНрдорд╕рдорд░реНрдкрдг рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдереВрдХ рджрд┐рдпрд╛ ", рдЬрд┐рд╕рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреВрд░реНрдг рдирд╣реАрдВ рдереАред рдЙрд╕ рд╕рдордп рддрдХ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП Wowza рд╕рд░реНрд╡рд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред 2011 рдореЗрдВ, Adobe рдиреЗ RTMP рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреЗрдЯреЗрдВрдЯ рдХреЗ рдЕрд╡реИрдз рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП Wowza рдХреЗ рдЦрд┐рд▓рд╛рдл рдореБрдХрджрдорд╛ рджрд╛рдпрд░ рдХрд┐рдпрд╛, 4 рд╕рд╛рд▓ рдмрд╛рдж рджреБрдирд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдШрд░реНрд╖ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдПрдбреЛрдм рдлреНрд▓реИрд╢ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЛ рд▓рдЧрднрдЧ 20 рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рдЧрдИ рдереА, рдЙрдиреНрд╣реЛрдВрдиреЗ 2020 рддрдХ рд╕рдорд░реНрдерди рдмрдВрдж рдХрд░рдиреЗ рдХрд╛
рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ , рдЗрд╕рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВред
рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддреБрд░рдВрдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлреНрд▓реИрд╢ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореБрдЦреНрдп рдХрд╛рд░рдг рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рдмрддрд╛рдпрд╛, рдлреНрд▓реИрд╢ рднреА рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ (рд╡рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░) рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдбреЛрдм рдлреНрд▓реИрд╢ рдХреЛ рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдмрд╛рдж рдореЗрдВ рдЬрд╛рдирд╛ рдХрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреА 2 рдкреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдХреЗрд╡рд▓ рдореЗрд░реЗ рдкрд╛рд╕ рдкреАрдпрд░ - рд╕рд░реНрд╡рд░ - рдкреАрдпрд░реНрд╕ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдордп рдкрд░ рдФрд░ рдЕрдзрд┐рдХ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдореЗрд▓реЛрдбреА рдЧреЛ рдкреИрдХреЗрдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдпрд╛:
рд╕рд░реНрд╡рд░ рдХреЛрдбpackage main import ( "errors" "github.com/go-chi/chi" "gopkg.in/olahol/melody.v1" "log" "net/http" "time" ) func main() { r := chi.NewRouter() m := melody.New() m.Config.MaxMessageSize = 204800 r.Get("/", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "public/index.html") }) r.Get("/ws", func(w http.ResponseWriter, r *http.Request) { m.HandleRequest(w, r) })
рдХреНрд▓рд╛рдЗрдВрдЯ (рдкреНрд░рд╕рд╛рд░рдг рдкрдХреНрд╖) рдкрд░, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдХреИрдорд░реЗ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣
MediaStream API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо
рдореАрдбрд┐рдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрдорд░реЗ / рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рддрдХ рдкрд╣реБрдВрдЪ (рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди) рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ API
MediaDevices.getUserMedia () рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреЙрдкрдЕрдк рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдПрдХ рдЦрд┐рдбрд╝рдХреА рдЬреЛ рдХреИрдорд░реЗ рдФрд░ / рдпрд╛ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫ рд░рд╣реА рд╣реИред рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ Google Chrome рдореЗрдВ рд╕рднреА рдкреНрд░рдпреЛрдЧ рдХрд┐рдП, рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рдЧрднрдЧ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХреЗ рдмрд╛рдж, getUserMedia () рдПрдХ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ MediaStream рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡реАрдбрд┐рдпреЛ рдФрд░ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдзрд╛рд░рд╛ред рд╣рдо рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ src рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдПрд▓рд┐рдореЗрдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб:
рдкреНрд░рд╕рд╛рд░рдг рдкрдХреНрд╖ <style> #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; } </style> </head> <body> <video autoplay id="videoObjectHtml5ApiServer"></video> <script type="application/javascript"> var video = document.getElementById('videoObjectHtml5ApiServer'); </script>
рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рдХрд╣реАрдВ рдПрдирдХреЛрдб рдХрд░рдиреЗ, рдЗрд╕реЗ рдмрдлрд░ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрдЪреНрдЪреА рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣
рдЬрдЧрд╣ рд╣реИ
рдЬрд╣рд╛рдБ MediaRecorder API рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдпрд╣ рдПрдкреАрдЖрдИ рдЖрдкрдХреЛ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдПрдиреНрдХреЛрдб рдФрд░ рддреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореИрдВ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рдореИрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдХрдо рдмрд╛рдЗрдЯ рдЪрд▓рд╛ рд╕рдХреВрдВред рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдЯреВрдЯрдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдореЗрдВ рднреЗрдЬрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдХреЛрдб:
рд╣рдо рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╣рд░рд╛рддреЗ рд╣реИрдВ <style> #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; } </style> </head> <body> <video autoplay id="videoObjectHtml5ApiServer"></video> <script type="application/javascript"> var video = document.getElementById('videoObjectHtml5ApiServer'); </script>
рдЕрдм websockets рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЬреЛрдбрд╝реЗрдВред рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ
WebSocket рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рднреЗрдЬрдиреЗ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рдирд╛рдо рдЕрдкрдиреЗ рд▓рд┐рдП рдмреЛрд▓рддреЗ рд╣реИрдВред рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХреЛрдб:
рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ <style> #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; } </style> </head> <body> <video autoplay id="videoObjectHtml5ApiServer"></video> <script type="application/javascript"> var video = document.getElementById('videoObjectHtml5ApiServer'); </script>
рдкреНрд░рд╕рд╛рд░рдг рдкрдХреНрд╖ рддреИрдпрд╛рд░ рд╣реИ! рдЕрдм рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд▓реЗрдиреЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдПрдХ рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рдиред рд╣рдо WebSocket рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ "рд╢реНрд░реЛрддрд╛" рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ, 'рд╕рдВрджреЗрд╢' рдИрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЧреНрд░рд╛рд╣рдХред рдЙрд╕реА рд╕рдордп, 'рд╕рдВрджреЗрд╢' рдШрдЯрдирд╛ рдХреЗ "рд╢реНрд░реЛрддрд╛" рд╕реЗ рдЬреБрдбрд╝реЗ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - vp8 рджреНрд╡рд╛рд░рд╛ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ред
рд╣рдо рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ <style> #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; } </style> </head> <body> <video autoplay id="videoObjectHtml5ApiServer"></video> <script type="application/javascript"> var video = document.getElementById('videoObjectHtml5ApiServer'), socket = new WebSocket('ws://127.0.0.1:3000/ws'), arrayOfBlobs = []; socket.addEventListener('message', function (event) { </script>
рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореИрдВрдиреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдкреНрд▓реЗрдмреИрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рддреБрд░рдВрдд рд╡реАрдбрд┐рдпреЛ рддрддреНрд╡ рдореЗрдВ рднреЗрдЬрдирд╛ рдЕрд╕рдВрднрд╡ рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╡реАрдбрд┐рдпреЛ рддрддреНрд╡ рд╕реЗ рдЬреБрдбрд╝реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмрдлрд░ рдореЗрдВ рдЯреБрдХрдбрд╝рд╛ рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╡рд╣ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдЦреЗрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
MediaSource API рдФрд░
FileReader API рдХреА
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред
MediaSource рдореАрдбрд┐рдпрд╛ рдкреНрд▓реЗрдмреИрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдЗрд╕ рдореАрдбрд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рдмреАрдЪ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдордзреНрдпрд╕реНрде рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред MediaSource рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ / рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдлрд░ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдмрдлрд░ рдореЗрдВ рдХреЗрд╡рд▓ Uint8 рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрдлрд░ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП FileReader рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛:
рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдЪрд▓рд╛рдПрдВ <style> #videoObjectHtml5ApiServer { width: 320px; height: 240px; background: #666; } </style> </head> <body> <video autoplay id="videoObjectHtml5ApiServer"></video> <script type="application/javascript"> var video = document.getElementById('videoObjectHtml5ApiServer'), socket = new WebSocket('ws://127.0.0.1:3000/ws'), mediaSource = new MediaSource(), </script>
рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рддреИрдпрд╛рд░ рд╣реИред рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдмреИрдХ рдкреНрд░рд╕рд╛рд░рдг рдкрдХреНрд╖ рдХреЗ рдкреАрдЫреЗ 100 рдПрдордПрд╕ рд╣реЛрдЧрд╛, рд╣рдо рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЦреБрдж рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рдЬрд╛рдВрдЪ рдХреА, рддреЛ рдореИрдВрдиреЗ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рдВрдЪрд╛рд░рдг рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрдХреНрд╖реЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рдЬрдорд╛ рдХрд┐рдпрд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдХрдореА рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХрд░ рджреА, рдФрд░ ...
RTCPeerConnection API рдХреЗ рдкрд╛рд░ рдЖрдпрд╛, рдЬреЛ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рдВрдЪрд┐рдд рдЕрдВрддрд░рд╛рд▓, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝рд╛ рд╡реЗрдм рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЛрдИ рдФрд░ рдЦреБрджрд╛рдИ рдирд╣реАрдВ рдХреА, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╢реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдореБрдЭреЗ рдпрд╣ рд╕рдореБрджрд╛рдп рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рд▓рд┐рдЦреВрдВрдЧрд╛ред