рдкрд░рд┐рдЪрдп
рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдкрд╣рд▓реЗ, рд╣рдмрд░ рдореЗрдВ рдПрдХ рд▓реЗрдЦ
" рдирд╛рдЬрд╝рд┐рдирдХреНрд╕
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдирд▓рд╛рдЗрди рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдирд╛" рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ
рдПрдХреЗрддрди рдиреЗ рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП
рдирдЧреАрдиреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА -
рдирдЧрдиреЗрдХреНрд╕-рдЖрд░рдЯреАрдПрдордкреА -рдореЙрдбреНрдпреВрд▓ред рддрдм рд╕реЗ, рдЙрддреНрдкрд╛рдж рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдпрд╛ рддреЛ рд▓рд╛рдЗрд╡ рд╕реНрдЯреНрд░реАрдо рдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рд╡реАрдбрд┐рдпреЛ (VOD, рд╡реАрдбрд┐рдпреЛ-рдСрди-рдбрд┐рдорд╛рдВрдб) рдХрд╛ рдкреНрд░рд╕рд╛рд░рдг рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╕рд╛рд░рдг рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ, рд╣рдо RTMP рдпрд╛ MPEG-TS рдЬреИрд╕реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рд╕рд╛рде рд╣реА HTTP рдкрд░ рдЕрдиреБрдХреВрд▓реА рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓рд┐рдпрд╛ рддрдХрдиреАрдХреЛрдВ рдХреЛ рднреА рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдореЗрдВ HLS (Apple), HDS (Adobe), рд╕реНрдореВрде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ (Microsoft), MPEG-DASH рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп, рдореБрдЦреНрдп рдХрд╛рд░рдХ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ RTMP рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╕рд╛рд░рдг рд╕рдмрд╕реЗ рдЖрдо рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдПрдЪрдПрд▓рдПрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдРрдкреНрдкрд▓ рдбрд┐рд╡рд╛рдЗрд╕, рд╕рд╛рде рд╣реА рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдмрдирд╛рдПрдБ рдФрд░ nginx-rtmp рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
Nginx-rtmp рдореЙрдбреНрдпреВрд▓ рдХреЛ nginx рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ nginx рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреА рддрд░рд╣ --add- рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
./configure --add-module=/path/to/nginx-rtmp-module
рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, rtmp {} рдЕрдиреБрднрд╛рдЧ рдХреЛ nginx.conf рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЬрдбрд╝ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
rtmp { server { listen 1935; application myapp { live on; } } }
рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд░рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдпрд╣ myMP рдирд╛рдо рдХрд╛ RTMP рдПрдкреНрд▓реАрдХреЗрд╢рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╣рдо рдмрд╛рдж рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдирд╕реЗ рдЗрд╕реЗ рдЦреЗрд▓реЗрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдХрд╛ рдЕрдкрдирд╛ рдЕрдиреВрдард╛ рдирд╛рдо рднреА рд╣реЛрдЧрд╛ред рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдпрд╣ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ рдЬрдм рдирдЧрдиреЗрдХреНрд╕ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИ (рдЖрдорддреМрд░ рдкрд░ nginx.conf рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ)ред
worker_processes 1;
рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрд╡ рдкреНрд░рд╕рд╛рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢ рдкрд░ rtmp_auto_push рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЕрдиреБрднрд╛рдЧ
"рд╢реНрд░рдорд┐рдХ рдФрд░ рд╕реНрдерд╛рдиреАрдп рд░рд┐рд▓реЗ" рджреЗрдЦреЗрдВ )ред
рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ рдФрд░ рд▓рд╛рдЗрд╡ рд╕реНрдЯреНрд░реАрдо рдЦреЗрд▓реЗрдВ
рд╡реАрдбрд┐рдпреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдлрд╝реНрд▓реИрд╢ рдкреНрд▓реЗрдпрд░ (JWPlayer, FlowPlayer, Strobe, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, ffmpeg (рдФрд░ ffplay) рдЕрдХреНрд╕рд░ рд╕рд░реНрд╡рд░ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде test.mp4 рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреНрд░рд╕рд╛рд░рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
ffmpeg -re -i /var/videos/test.mp4 -c copy -f flv rtmp://localhost/myapp/mystream
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрд░рдЯреАрдПрдордкреА рдХреЛрдбреЗрдХреНрд╕ рдХреЗ рд╕реАрдорд┐рдд рд╕реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреЛрдбреЗрдХреНрд╕, рдЬреИрд╕реЗ рдПрдЪ 264 рдФрд░ рдПрдПрд╕реА, рдЙрдирдореЗрдВ рд╕реЗ рд╣реИрдВред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдбреЗрдХреНрд╕ RTMP рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
ffmpeg -re -i /var/videos/test.mp4 -c:v libx264 -c:a libfaac -ar 44100 -ac 2 -f flv rtmp://localhost/myapp/mystream
рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрд░реЛрдд рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд▓рд╛рдЗрд╡ MPEG-TS рд╕реНрдЯреНрд░реАрдо рд╡реАрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ
редexample.com /
livechannel.ts , рдЖрдк рдЗрд╕реЗ rtmp рдореЗрдВ рднреА рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ:
ffmpeg -i http://video.example.com/livechannel.ts -c copy -f flv rtmp://localhost/myapp/mystream
рд╕реНрдерд╛рдиреАрдп рд╡реЗрдмрдХреИрдо рд╕реЗ рдкреНрд░рд╕рд╛рд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
ffmpeg -f video4linux2 -i /dev/video0 -c:v libx264 -an -f flv rtmp://localhost/myapp/mystream
рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде ffplay рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреНрд░реАрдо рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
ffplay rtmp://localhost/myapp/mystream
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП JWPlayer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг (рдкреВрд░реА рддрд░рд╣ рд╕реЗ / рдкрд░реАрдХреНрд╖рдг / www рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ) рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛:
<script type="text/javascript" src="/jwplayer/jwplayer.js"></script> <div id="container">Loading the player ...</div> <script type="text/javascript"> jwplayer("container").setup({ modes: [ { type: "flash", src: "/jwplayer/player.swf", config: { bufferlength: 1, file: "mystream", streamer: "rtmp://localhost/myapp", provider: "rtmp", } } ] }); </script>
рд╡реАрдбрд┐рдпреЛ рдСрди рдбрд┐рдорд╛рдВрдб
рдореЙрдбреНрдпреВрд▓ mp4 рдФрд░ flv рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╕реЗрдЯрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг:
application vod { play /var/videos; }
рдЦреЗрд▓рддреЗ рд╕рдордп, рдХреНрд░рдорд╢рдГ, рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рд╕рдм рдХреБрдЫ рд▓рд╛рдЗрд╡ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИред
ffplay rtmp://localhost/vod/movie1.mp4 ffplay rtmp://localhost/vod/movie2.flv
рд░рд┐рд▓реЗ
рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рд▓реЛрдб рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реЗ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ
рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ред рдореЙрдбреНрдпреВрд▓ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рд┐рд▓реЗрдЗрдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: рдкреБрд╢ рдФрд░ рдкреБрд▓ред рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░рд┐рд▓реЗ
рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реНрдЯреНрд░реАрдо рдХреЛ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рд░рд┐рдореЛрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рджреВрд╕рд░рд╛ рд╣реИ
рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдЯреНрд░реАрдоред рд░рд┐рд▓реЗ рдзрдХреНрдХрд╛ рдЙрджрд╛рд╣рд░рдг:
application myapp { live on; push rtmp://cdn.example.com; }
рдЬрд┐рд╕ рдХреНрд╖рдг rtmp рдкрд░ рдкреНрд░рдХрд╛рд╢рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ: // localhost / myapp / mystream, рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ rtmp рдХреЗ рдЖрдЧреЗ рдорд┐рд╕реНрдЯреНрд░реА рд╕реНрдЯреНрд░реАрдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: //cdn.example.com/myapp/mystreamред рдЬрдм рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХрд╛рд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ cdn.example.com рдХрд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡рддрдГ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд░рд┐рд╡рд░реНрд╕ рд░рд┐рд▓реЗ рд░рд┐рд╡рд░реНрд╕ рдСрдкрд░реЗрд╢рди рдХрд░реЗрдВ:
application myapp { live on; pull rtmp://cdn.example.com; }
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░реАрдо rtmp рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ: // localhost / myapp / mystream рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ, rtmp рдХреЗ рд╕рд╛рде рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛: //cdn.example.com/myapp/mytstream рдФрд░ рд░рд┐рдореЛрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рд╕реЗ рд░рд┐рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдмрди рдЬрд╛рдПрдЧрд╛ред рд╕рднреА рд╕реНрдерд╛рдиреАрдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рднред рдлрд┐рд▓рд╣рд╛рд▓ рдЬрдм рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИ, рддреЛ рдХрдиреЗрдХреНрд╢рди рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдореЛрдмрд╛рдЗрд▓ рдкреНрд░рд╕рд╛рд░рдг (HLS)
IPhone / iPad рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА Android рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, HLS рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (HTTP рд▓рд╛рдЗрд╡ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ Apple рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ HTTP рдкрд░ рднреЗрдЬреЗ рдЧрдП MPEG-TS / H264 / AAC рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ "рдХрдЯрд╛ рд╣реБрдЖ" рд╣реИред M3u8 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЬреБрдбрд╝реА рд╣реИред Nginx рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ HTTP рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред рддреЛ, рдЖрдкрдХреЛ рдмрд╕ рдПрдЪрдПрд▓рдПрд╕ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдФрд░ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкреБрд░рд╛рдиреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ nginx-rtmp-hls рдореЙрдбреНрдпреВрд▓ рд╣реИред рдпрд╣ hls рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ffmpeg рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ libavformat рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред HLS рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде nginx рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
./configure --add-module=/path/to/nginx-rtmp-module --add-module=/path/to/nginx-rtmp-module/hls
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ ffmpeg рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХрд╛рдВрдЯрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ - ffmpeg рдФрд░ avconv, рдФрд░ рдЗрд╕рд▓рд┐рдП, рддреБрд░рдВрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╕рдВрдЧрддрддрд╛ (рдпрд╛ рдмрд▓реНрдХрд┐, рдЕрд╕рдВрдЧрддрд┐) рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред Nginx-rtmp рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдореВрд▓ ffmpeg рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрд╕реА рд╕рдордп, рдХреБрдЫ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдиреЗ рдПрд╡реЛрдХреЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛, рдЬреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд┐рд╕реНрддреГрдд
рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦреЗред
рдПрдЪрдПрд▓рдПрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
application myapp { live on; hls on; hls_path /tmp/hls; hls_fragment 5s; }
рдФрд░ рдЕрдВрдд рдореЗрдВ, http {} рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, HLS рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдЪреАрдЬреЛрдВ рдХреА рд╡рд╛рдкрд╕реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:
location /hls { root /tmp; }
рдЕрдм рд╣рдо рдорд╛рдЗрд╕реНрдЯреНрд░реАрдо рд╕реНрдЯреНрд░реАрдо рдХреЛ myapp рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ iPhone рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╣рдо рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ
example.com/hls/mystream.m3u8 рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдЯреНрд░реАрдо рдХреЛ html рд╡реАрдбрд┐рдпреЛ рдЯреИрдЧ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
<video width="600" height="300" controls="1" autoplay="1" src="http://example.com/hls/mystream.m3u8"></video>
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ iPhone рдкрд░ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░реАрдо рдХреЛ H264 рдФрд░ AAC рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╕реНрд░реЛрдд рдзрд╛рд░рд╛ рдЗрди рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
recoding
рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЕрдХреНрд╕рд░ рдЖрдиреЗ рд╡рд╛рд▓реА рдзрд╛рд░рд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЧреБрдгрд╡рддреНрддрд╛ рдпрд╛ рдЕрдиреНрдп рдХреЛрдбреЗрдХреНрд╕ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдп рдореВрд▓ рд░реВрдк рд╕реЗ RTMP рд╡рд┐рддрд░рдг рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдФрд░ рдмрд╛рдж рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЙрдЪреНрдЪ CPU рд▓реЛрдб, рдмрдбрд╝реА рдФрд░ рд╕рдХреНрд░рд┐рдп рдореЗрдореЛрд░реА рдЦрдкрдд рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╕реНрдерд┐рд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдЗрд╕реЗ рдореБрдЦреНрдп рд╕рд░реНрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрдкрдХрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ - рдпрд╣ рдПрдХ рд╣реА ffmpeg рд╣реИред рдпрд╣ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреЛрдбреЗрдХреНрд╕, рдкреНрд░рд╛рд░реВрдк рдФрд░ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдХрдИ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдпрд╣ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИред Nginx-rtmp рдореЙрдбреНрдпреВрд▓ ffmpeg рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдирд┐рд╖реНрдкрд╛рджрди рдирд┐рд░реНрджреЗрд╢ рдЖрдкрдХреЛ рдЖрдиреЗ рд╡рд╛рд▓реА рдзрд╛рд░рд╛ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рдордп рдПрдХ рдмрд╛рд╣рд░реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬрдм рдкреНрд░рдХрд╛рд╢рди рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдЕрдЪрд╛рдирдХ рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
application myapp { live on; exec ffmpeg -i rtmp://localhost/myapp/$name -c:v flv -c:a -s 32x32 -f flv rtmp://localhost/myapp32x32/$name; } application myapp32x32 { live on; }
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, ffmpeg рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╡реАрдбрд┐рдпреЛ рдХреЛ Sorenson-H263 рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ 32x32 рдореЗрдВ рдЖрдХрд╛рд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ myapp32x32 рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдирд┐рд╖реНрдкрд╛рджрди рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдирд┐рд░реНрджреЗрд╢ рдХрдИ рдЪрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ $ рдРрдк (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╛рдо) рдФрд░ $ рдирд╛рдо (рд╕реНрдЯреНрд░реАрдо рдирд╛рдо) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╢реНрд░рдорд┐рдХ рдФрд░ рд╕реНрдерд╛рдиреАрдп рд░рд┐рд▓реЗ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдирдЧреАрдирдХреНрд╕ рдПрдХ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рд╕рд░реНрд╡рд░ рд╣реИред рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рднреА рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдХрдИ рд╢реНрд░рдорд┐рдХреЛрдВ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред HTTP рдЕрдиреБрд░реЛрдз рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрд╢ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ), рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓рд╛рдЗрд╡ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд╕рд╛рде, рд╕реНрдерд┐рддрд┐ рдЕрд▓рдЧ рд╣реИред рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдХреНрд╖рдореНрдп, рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЗрд╕рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдиреБрдХрд╕рд╛рди рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдХрдИ рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, UNIX рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд░рд┐рд▓реЗ рддрдВрддреНрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджрд░рдЕрд╕рд▓, рдРрд╕реА рд░рд┐рд▓реЗрд╢рдВрд╕ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рд╣рд░реА рдкреБрд╢-рд░рд┐рд▓реЗрдпрд┐рдВрдЧреНрд╕ рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рд╕реНрдерд╛рдиреАрдп рд░рд┐рд▓реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд╖рдо рд╣реИрдВред
rtmp_auto_push on;
рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдореВрд▓ рднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рд╕рд╛рд░рдг рдХреЗрд╡рд▓ рд▓рд╛рдЗрд╡ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред
рдЕрднрд┐рд▓реЗрдЦ
рдЕрдХреНрд╕рд░ рдбрд┐рд╕реНрдХ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реНрдЯреНрд░реАрдо рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░реАрдо (рдСрдбрд┐рдпреЛ, рд╡реАрдбрд┐рдпреЛ, рдХреБрдВрдЬреА рдлрд╝реНрд░реЗрдо) рдФрд░ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░, рд╕рд╛рде рд╣реА рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝реНрд░реЗрдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдкрд╣рд▓реЗ 128K рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИред
record all; record_path /tmp/rec; record_max_size 128K;
рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ flv рдкреНрд░рд╛рд░реВрдк рдореЗрдВ / tmp / rec рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрддреА рд╣реИред
рдЖрдк http рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рдореЛрдб рдореЗрдВ рдЪрд╛рд▓реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдВрддреНрд░рдг рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ
рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡реАрдбрд┐рдпреЛ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдз рдпрд╛ рд▓реЗрдЦрд╛рдВрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рддрд░реНрдХ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдорд╛рдорд▓рд╛ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдПрдХреНрд╕реЗрд╕ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ HTTP рдХреЙрд▓рдмреИрдХ рдЬреИрд╕реЗ on_publish рдФрд░ on_play рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЙрдкрд▓рдмреНрдз рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрд╕рдХрд╛ рдкрддрд╛, рд╕реНрдЯреНрд░реАрдо рдирд╛рдо, рдкреГрд╖реНрда рдХрд╛ рдкрддрд╛ рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрджрд┐ HTTP рд╕реНрдерд┐рддрд┐ 2xx рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреЙрд▓рдмреИрдХ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдХрдиреЗрдХреНрд╢рди рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред
on_publish http://example.com/check_publisher; on_play http://example.com/check_player;
рдЖрдВрдХрдбрд╝реЗ
рдХрд┐рд╕реА рднреА рд╕рдордп, рд╣рдЬрд╛рд░реЛрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЙрдирдХреА рд╕реВрдЪреА, рд╕рд╛рде рд╣реА рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдпрд╛ рдЦреЗрд▓реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдзрд╛рд░рд╛рдУрдВ рдХреА рд╕рднреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдиреЗрддреНрд░рд╣реАрди рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдП рдЧрдП рджреЛрдиреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреА рд╣реИред Nginx-rtmp рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдРрд╕рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ nginx.conf рдХреЗ http рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /path/to/stat.xsl/dir/; }
Rtmp_stat рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдПрдХ XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд▓рд╛рдЗрд╡ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд╢рди рдпрд╛ рд╕реНрдЯреНрд░реАрдо, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕рд░реНрд╡рд░ рдХреА рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рджреГрд╢реНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИред рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рд╕реВрдЪреА рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, rtmp_stat_stylesheet рдирд┐рд░реНрджреЗрд╢ XML XML рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ (stat.xsl) рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдореВрд▓ рдореЗрдВ рд╣реИред рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ URL рдкрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП nginx рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдВрддреНрд░рдг рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИред
рд╕рд░рд▓ рдЗрдВрдЯрд░рдиреЗрдЯ рд░реЗрдбрд┐рдпреЛ
рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдореИрдВрдиреЗ рд▓рдЧрд╛рддрд╛рд░ "рд╡реАрдбрд┐рдпреЛ" рд╢рдмреНрдж рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рдмреЗрд╢рдХ, рдореЙрдбреНрдпреВрд▓ рди рдХреЗрд╡рд▓ рд╡реАрдбрд┐рдпреЛ, рдмрд▓реНрдХрд┐ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рднреА рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдмреИрд╢ рдЗрдВрдЯрд░рдиреЗрдЯ рд░реЗрдбрд┐рдпреЛ рд╕реНрдЯреЗрд╢рди рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреЛ рдХрд┐ / var / рд╕рдВрдЧреАрдд рд╕реЗ рдПрдордкреА 3 рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдзрд╛рд░рд╛ рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдПрдХ рд╕рд╛рдзрд╛рд░рдг JWPlayer рдЦреЗрд▓ рд╕рдХрддреА рд╣реИред
while true; do ffmpeg -re -i "`find /var/music -type f -name '*.mp3'|sort -R|head -n 1`" -vn -c:a libfaac -ar 44100 -ac 2 -f flv rtmp://localhost/myapp/mystream; done
рдЕрдиреБрдХреВрд▓рддрд╛
рдореЙрдбреНрдпреВрд▓ FMS / FMLE, Wowza, рд╡рд╛рдпрд░рдХрд╛рд╕реНрдЯ рд╕рд╣рд┐рдд RTMP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдореБрдЦреНрдп рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╕рдмрд╕реЗ рдЖрдо рдлрд╝реНрд▓реИрд╢ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ JWPlayer, FlowPlayer, StrobeMediaPlayback рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ ffmpeg / avconv рдФрд░ rtmpdump рдХреЗ рд╕рд╛рде рднреА рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рднрд╛рд░
рдореЙрдбреНрдпреВрд▓ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб nginx рд╕рд░реНрд╡рд░ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо рд╕рд┐рдВрдЧрд▓ рд╡рд░реНрдХрд░ рдореЛрдб рдореЗрдВ Intel Xeon E5320 / E5645 рдорд╢реАрдиреЛрдВ рдкрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдореЛрдб рдореЗрдВ, рдореМрдЬреВрджрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдХреА рдЕрдзрд┐рдХрддрдо рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ - 2 рдЬреАрдмреАрдкреАрдПрд╕ред рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдИ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд░рд┐рд▓реЗ рдореЛрдб рдореЗрдВ рдЙрд╕реА рдЕрдиреБрдкрд╛рдд (2Gbps рдкреНрд░рддрд┐ рдХреЛрд░) рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВред рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЖрдорддреМрд░ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд░рд╣рддрд╛ рд╣реИ, рди рдХрд┐ рд╕реАрдкреАрдпреВ рдкрд░ред
рдореИрдВ рдЕрдиреНрдп рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпрдХреНрд╖ рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, "рднрд╛рд░реА" рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдПрдлрдПрдордПрд╕, рд╡реЛрдЬрд╛ рдФрд░ рд░реЗрдб 5, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЬреБрдбрд╝реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕реАрдкреАрдпреВ рд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдореЗрд░реЗ рдирд┐рд░реНрдгрдп рд╕реЗ рдХрд╛рдлреА рд╣рдж рддрдХ рд╣рд╛рд░ рдЬрд╛рддреЗ рд╣реИрдВред рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рддреБрд▓рдирд╛ рдХреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдмреАрдПрд╕рдбреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд▓рд┐рдирдХреНрд╕, рдлреНрд░реАрдмреАрдПрд╕рдбреА рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ рдмрдирд╛рддрд╛ рдФрд░ рдЪрд▓рддрд╛ рд╣реИред рд▓реЗрдЦ nginx-rtmp- рдореЙрдбреНрдпреВрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЗрдм рдХреЗ рдкрд╛рдардХреЛрдВ рдХреЛ рд░реБрдЪрд┐рдХрд░ рд▓рдЧреЗред
рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!