Roc 0.1, Ant 1.7 ๋ฐ Red5 1.1.1 ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ์ถœ์‹œ

์˜จ๋ผ์ธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๊ฐœ๋ฐฉํ˜• ๋ฏธ๋””์–ด ์„œ๋ฒ„ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋„์ž… ์ดˆํŒ
    ํฐ ๊ดด์กฐ๋Š” ๋ณด์žฅ๋œ ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ CD ์ˆ˜์ค€์˜ ํ’ˆ์งˆ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์˜ค๋””์˜ค๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ธฐ ์œ„ํ•œ ํˆดํ‚ท์ž…๋‹ˆ๋‹ค. ์ „์†ก ์ค‘์—๋Š” ๋ฐœ์‹ ์ž์™€ ์ˆ˜์‹ ์ž์˜ ์‹œ์Šคํ…œ ์‹œ๊ณ„ ์‹œ๊ฐ„ ํŽธ์ฐจ๊ฐ€ ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†์‹ค๋œ ํŒจํ‚ท ๋ณต๊ตฌ ์ง€์› ์ˆœ๋ฐฉํ–ฅ ์˜ค๋ฅ˜ ์ •์ • ๊ตฌํ˜„ ์ค‘ ์˜คํ”ˆFEC (์ตœ์†Œ ์ง€์—ฐ ๋ชจ๋“œ์—์„œ๋Š” Reed-Solomon ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ตœ๋Œ€ ์„ฑ๋Šฅ ๋ชจ๋“œ์—์„œ๋Š” LDPC-๊ณ„๋‹จ). ์ „์†ก์—๋Š” RTP ํ”„๋กœํ† ์ฝœ(AVP L16, 44100Hz PCM 16๋น„ํŠธ)์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” ์˜ค๋””์˜ค๋งŒ ์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋‚˜, ์˜์ƒ ๋ฐ ๊ธฐํƒ€ ์ฝ˜ํ…์ธ ๋„ ์ง€์›ํ•  ๊ณ„ํš์ด๋‹ค.

    ํ•œ ๋ช…์˜ ์ˆ˜์‹ ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ฐœ์‹ ์ž์˜ ์ŠคํŠธ๋ฆผ์„ ๋‹ค์ค‘ํ™”ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. CPU ์œ ํ˜•๊ณผ ์ „์†ก ์ง€์—ฐ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ƒ˜ํ”Œ๋ง ์„ค์ • ํ”„๋กœํ•„์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ, ์ธํ„ฐ๋„ท, ๋ฌด์„  ๋„คํŠธ์›Œํฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•œ ๋ฐฉ์†ก์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์„ค์ •, ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ฐ ํŒจํ‚ท ์†์‹ค์— ๋”ฐ๋ผ Roc๋Š” ํ•„์š”ํ•œ ์ŠคํŠธ๋ฆผ ์ธ์ฝ”๋”ฉ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์„ ํƒํ•˜๊ณ  ์ „์†ก ์ค‘์— ๊ฐ•๋„๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

    ์ด ํ”„๋กœ์ ํŠธ๋Š” C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ Roc๋ฅผ ์ „์†ก ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์ค„ ๋ฐ ๋ชจ๋“ˆ ์„ธํŠธ PulseAudio. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ํŒŒ์ผ์ด๋‚˜ ์‚ฌ์šด๋“œ ์žฅ์น˜์˜ ์˜ค๋””์˜ค๋ฅผ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ํŒŒ์ผ์ด๋‚˜ ์‚ฌ์šด๋“œ ์žฅ์น˜๋กœ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ALSA, PulseAudio ๋ฐ CoreAudio๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์˜ค๋””์˜ค ๋ฐฑ์—”๋“œ๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ๋ฐฐํฌ์ž MPL-2.0์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GNU/Linux ๋ฐ macOS์—์„œ์˜ ์ž‘์—…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ์„œ๋ฒ„์˜ ์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์Šค ๊ฐœ๋ฏธ ๋ฏธ๋””์–ด ์„œ๋ฒ„ 1.7, ์ ์‘ํ˜• ๋น„ํŠธ ์ „์†ก๋ฅ  ๋ณ€๊ฒฝ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜์—ฌ RTMP, RTSP ๋ฐ WebRTC ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ŠคํŠธ๋ฆฌ๋ฐ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ant๋Š” MP4, HLS ๋ฐ FLV ํ˜•์‹์œผ๋กœ ๋„คํŠธ์›Œํฌ ๋น„๋””์˜ค ๋…นํ™”๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅ์„ฑ ์ค‘์—๋Š” WebRTC-RTMP ๋ณ€ํ™˜๊ธฐ์˜ ์กด์žฌ, IP ์นด๋ฉ”๋ผ ๋ฐ IPTV ์ง€์›, ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆผ ๋ฐฐํฌ ๋ฐ ๋…นํ™”, ์†Œ์…œ ๋„คํŠธ์›Œํฌ๋กœ์˜ ์ŠคํŠธ๋ฆฌ๋ฐ ๊ตฌ์„ฑ, ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ๋ฅผ ํ†ตํ•œ ํ™•์žฅ, ํ•œ ์ง€์ ์—์„œ ์—ฌ๋Ÿฌ ์ง€์ ์œผ๋กœ์˜ ๋Œ€๋Ÿ‰ ๋ฐฉ์†ก ๊ฐ€๋Šฅ์„ฑ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 500ms ์ง€์—ฐ๋˜๋Š” ์ˆ˜์‹ ์ž๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

    ์ด ์ œํ’ˆ์€ Open Core ๋ชจ๋ธ์˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์—์„œ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Apache 2.0 ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ์ฃผ์š” ๋ถ€๋ถ„์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ๋ฃŒ ๋ฒ„์ „์—์„œ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ(์˜ˆ: Youtube๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ)์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์—์„œ๋Š” WebRTC๋ฅผ ํ†ตํ•œ ๋ฐฉ์†ก ์„ฑ๋Šฅ์ด 40% ํ–ฅ์ƒ๋˜์—ˆ์œผ๋ฉฐ, ๋กœ๊ทธ ๋ทฐ์–ด ์ถ”๊ฐ€, ์›น ํŒจ๋„ ๊ฐœ์„ , ํ†ต๊ณ„ ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ REST API ์ถ”๊ฐ€, ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„ ์ตœ์ ํ™”, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๊ฐœ์„  ๋ฐ ํ†ต๊ณ„๋ฅผ Apache Kafka๋กœ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. .

  • ์ผ์–ด๋‚ฌ๋‹ค ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ์ถœ์‹œ ๋ ˆ๋“œ5 1.1.1๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด FLV, F4V, MP4 ๋ฐ 3GP ํ˜•์‹์˜ ๋น„๋””์˜ค์™€ MP3, F4A, M4A, AAC ํ˜•์‹์˜ ์˜ค๋””์˜ค๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ ๋ฐฉ์†ก ๋ชจ๋“œ์™€ ๋…น์Œ ์Šคํ…Œ์ด์…˜ ํ˜•ํƒœ์˜ ์ž‘์—…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(FLV ์ปจํ…Œ์ด๋„ˆ์˜ FLV ๋ฐ AVC+AAC). ์ด ํ”„๋กœ์ ํŠธ๋Š” ์›๋ž˜ RTMP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ Flash Communication Server์— ๋Œ€ํ•œ ๋Œ€์•ˆ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด 2005๋…„์— ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— Red5๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด HLS, WebSockets, RTSP ๋ฐ WebRTC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์„ ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค.

    Red5๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•„ํŒŒ์น˜ ์˜คํ”ˆ๋ฏธํŒ… ์˜์ƒ ๋ฐ ์Œ์„ฑ ํšŒ์˜๋ฅผ ์กฐ์งํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” Java๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๊ณต๊ธ‰ Apache 2.0์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋…์  ์ œํ’ˆ์€ Red5๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ๋“œ5 ํ”„๋กœ, 500ms์˜ ๋‚ฎ์€ ์ „์†ก ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ AWS, Google Cloud ๋ฐ Azure ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ˆ˜๋ฐฑ๋งŒ ๋ช…์˜ ์‹œ์ฒญ์ž๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€