(เจฒเจ—เจญเจ—) เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจคเฉ‹เจ‚ เจฌเฉ‡เจ•เจพเจฐ เจตเฉˆเจฌเจ•เฉˆเจฎ เจธเจŸเฉเจฐเฉ€เจฎเจฟเฉฐเจ—เฅค เจญเจพเจ— 2. WebRTC

เจ•เจฟเจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เจ• เจชเฉเจฐเจพเจฃเฉ‡ เจ…เจคเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ›เฉฑเจกเฉ‡ เจ—เจ เจฒเฉ‡เจ–เจพเจ‚ เจคเฉ‹เจ‚, เจฎเฉˆเจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจฒเจฟเจ–เจฟเจ† เจนเฉˆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ เจฐเจพเจนเฉ€เจ‚ เจ•เฉˆเจจเจตเจธ เจคเฉ‹เจ‚ เจตเฉ€เจกเฉ€เจ“ เจจเฉ‚เฉฐ เจ•เจฟเฉฐเจจเฉ€ เจ†เจธเจพเจจเฉ€ เจ…เจคเฉ‡ เจ•เฉเจฆเจฐเจคเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ‰เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจธเฉฐเจ–เฉ‡เจช เจตเจฟเฉฑเจš เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เฉ€เจคเฉ€ เจธเฉ€ เจ•เจฟ เจ•เฉˆเจฎเจฐเฉ‡ เจคเฉ‹เจ‚ เจตเฉ€เจกเฉ€เจ“ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉˆเจชเจšเจฐ เจ•เจฐเจจเจพ เจนเฉˆ เจ…เจคเฉ‡ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจซเฉ‹เจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ†เจตเจพเจœเจผ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเฉ€ เจนเฉˆ MediaStream API, เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจˆ เจธเจŸเฉเจฐเฉ€เจฎ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจเจจเจ•เฉ‹เจก เจ•เจฐเจจเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ เจฐเจพเจนเฉ€เจ‚ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจญเฉ‡เจœเจฃเจพ เจนเฉˆเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ‰เจน เจ…เจœเจฟเจนเจพ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡, เจชเฉเจฐเจธเจพเจฐเจฃ เจฒเจˆ เจ‰เจน เจœเจพเจ‚ เจคเจพเจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ เจœเจฟเจธ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ: เจฌเฉฐเจฆ, เจ‡เจน เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ เจ“เจชเจจ เจฌเจฐเจพเจกเจ•เจพเจธเจŸ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ, เจœเจพเจ‚ เจ‰เจน WebRTC เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจœเฉ‹ เจ•เจฟ เจฌเจพเจ•เจธ เจฆเฉ‡ เจฌเจฟเจฒเจ•เฉเจฒ เจฌเจพเจนเจฐ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ, เจฏเจพเจจเฉ€ เจ‡เจธ เจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจชเจฒเฉฑเจ—เจ‡เจจ a la เจซเจฒเฉˆเจธเจผ เจชเจฒเฉ‡เจ…เจฐ เจฆเฉ€ เจธเจฅเจพเจชเจจเจพ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจœเฉ‹ เจฆเจธเฉฐเจฌเจฐ เจตเจฟเฉฑเจš เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ Chromium เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจคเฉ‹เจ‚ เจ•เฉฑเจŸเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพเฅค

เจ…เฉฑเจœ เจ…เจธเฉ€เจ‚ WebRTC เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจตเฉˆเฉฑเจฌ เจฐเฉ€เจ…เจฒ-เจŸเจพเจˆเจฎ เจ•เจฎเจฟเจŠเจจเฉ€เจ•เฉ‡เจธเจผเจจ (WebRTC) เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ‡เจน เจฎเจฟเจ†เจฐเจพเจ‚, เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒเจพเจ‚ เจ…เจคเฉ‡ JavaScript API เจฆเจพ เจ‡เฉฑเจ• เจชเฉ‚เจฐเจพ เจธเฉฐเจ—เฉเจฐเจนเจฟ เจนเฉˆ เจœเฉ‹ เจ‡เจ•เฉฑเจ เฉ‡ เจชเฉ€เจ…เจฐ-เจŸเฉ‚-เจชเฉ€เจ…เจฐ เจฐเฉ€เจ…เจฒ-เจŸเจพเจˆเจฎ เจตเฉ€เจกเฉ€เจ“-เจ†เจกเฉ€เจ“ เจธเฉฐเจšเจพเจฐ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจจ เจฒเจˆ เจตเฉ€ เจตเจฐเจคเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจฌเจพเจˆเจจเจฐเฉ€ เจกเจพเจŸเจพ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจธเจพเจฅเฉ€เจ†เจ‚ เจตเจœเฉ‹เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจชเจฐ เจ‡เจน เจ‡เฉฑเจ• เจฎเฉ‹เจฌเจพเจˆเจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเฉ€ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆเฅค เจ—เจพเจนเจ•เจพเจ‚ เจตเจฟเจšเจ•เจพเจฐ p2p เจธเฉฐเจšเจพเจฐ เจจเฉ‚เฉฐ เจธเฉฐเจ—เจ เจฟเจค เจ•เจฐเจจ เจฒเจˆ, เจตเฉฑเจ–-เจตเฉฑเจ– เจ•เจฟเจธเจฎเจพเจ‚ เจฆเฉ‡ เจตเฉ€เจกเฉ€เจ“ เจ…เจคเฉ‡ เจ†เจกเฉ€เจ“ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจฒเจˆ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจธเจฎเจฐเจฅเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ•เจˆ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฒเจˆ เจธเจฎเจฐเจฅเจจ, เจฌเฉเจฐเจพเจŠเจœเจผเจฐ (OS เจฒเฉ‡เจ…เจฐเจพเจ‚ เจฐเจพเจนเฉ€เจ‚) เจจเจพเจฒ เจนเจพเจฐเจกเจตเฉ‡เจ…เจฐ เจฆเฉ€ เจ†เจชเจธเฉ€ เจคเจพเจฒเจฎเฉ‡เจฒ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ: เจตเฉˆเจฌเจ•เฉˆเจฎ, เจธเจพเจŠเจ‚เจก เจ•เจพเจฐเจกเฅค เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฆเฉ€ เจธเจนเฉ‚เจฒเจค เจฒเจˆ เจœเจพเจตเจพ เจธเจ•เฉเจฐเจฟเจชเจŸ API เจเจฌเจธเจŸเจฐเฉˆเจ•เจธเจผเจจ เจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจŸเฉˆเจ•เจจเจพเจฒเฉ‹เจœเฉ€ เจฆเจพ เจ‡เจน เจธเจพเจฐเจพ เจนเฉŒเจœเจชเฉŒเจœ เจฒเฉเจ•เจฟเจ† เจนเฉ‹เจ‡เจ† เจนเฉˆเฅค

เจ‡เจน เจธเจญ เจคเจฟเฉฐเจจ APIs เจคเฉฑเจ• เจ‰เจฌเจฒเจฆเจพ เจนเฉˆ:

  • MediaStream API - เจชเจฟเจ›เจฒเฉ€ เจตเจพเจฐ เจคเฉ‹เฉœเจฟเจ†, เจ…เฉฑเจœ เจฎเฉˆเจ‚ เจ‰เจธ เจฌเจพเจฐเฉ‡ เจฅเฉ‹เฉœเจพ เจนเฉ‹เจฐ เจฒเจฟเจ–เจพเจ‚เจ—เจพ. เจนเจพเจฐเจกเจตเฉ‡เจ…เจฐ เจคเฉ‹เจ‚ เจตเฉ€เจกเฉ€เจ“ / เจ†เจกเฉ€เจ“ เจธเจŸเฉเจฐเฉ€เจฎ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจธเฉ‡เจตเจพ เจ•เจฐเจฆเจพ เจนเฉˆ

  • RTCPeerConnection - เจฆเฉ‹ เจ—เจพเจนเจ•เจพเจ‚ เจตเจฟเจšเจ•เจพเจฐ เจธเฉฐเจšเจพเจฐ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆ (p2p)

  • RTCDataChannel - เจฆเฉ‹ เจ—เจพเจนเจ•เจพเจ‚ เจตเจฟเจšเจ•เจพเจฐ เจ†เจชเจนเฉเจฆเจฐเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจจ เจฒเจˆ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ

เจชเฉเจฐเจธเจพเจฐเจฃ เจฒเจˆ เจ†เจกเฉ€เจ“ เจ…เจคเฉ‡ เจตเฉ€เจกเฉ€เจ“ เจธเจŸเฉเจฐเฉ€เจฎเจพเจ‚ เจจเฉ‚เฉฐ เจคเจฟเจ†เจฐ เจ•เจฐเจจเจพ

เจ‡เจน เจธเจญ เจตเฉˆเจฌเจ•เฉˆเจฎ เจ…เจคเฉ‡ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจซเฉ‹เจจ เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎ เจจเฉ‚เฉฐ "เจ•เฉˆเจชเจšเจฐ เจ•เจฐเจจ" เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจฌเฉ‡เจธเจผเฉฑเจ•, เจ•เฉฑเจšเฉ€เจ†เจ‚ เจธเจŸเฉเจฐเฉ€เจฎเจพเจ‚ เจŸเฉˆเจฒเฉ€เจ•เจพเจจเจซเจฐเฉฐเจธ เจฆเฉ‡ เจ†เจฏเฉ‹เจœเจจ เจฒเจˆ เจขเฉเจ•เจตเฉ‡เจ‚ เจจเจนเฉ€เจ‚ เจนเจจ, เจนเจฐเฉ‡เจ• เจธเจŸเฉเจฐเฉ€เจฎ 'เจคเฉ‡ เจ•เจพเจฐเจตเจพเจˆ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ: เจ—เฉเจฃเจตเฉฑเจคเจพ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ เจ•เจฐเฉ‹, เจตเฉ€เจกเฉ€เจ“ เจจเจพเจฒ เจ†เจกเฉ€เจ“ เจจเฉ‚เฉฐ เจธเจฎเจ•เจพเจฒเฉ€ เจฌเจฃเจพเจ“, เจตเฉ€เจกเฉ€เจ“ เจธเจŸเฉเจฐเฉ€เจฎ เจตเจฟเฉฑเจš เจธเจฎเจ•เจพเจฒเฉ€เจ•เจฐเจจ เจšเจฟเฉฐเจจเฉเจน เจฐเฉฑเจ–เฉ‹, เจ…เจคเฉ‡ เจšเฉˆเจจเจฒ เจฆเฉ€ เจฒเจ—เจพเจคเจพเจฐ เจฌเจฆเจฒ เจฐเจนเฉ€ เจฌเฉˆเจ‚เจกเจตเจฟเจกเจฅ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐเฉ€ เจฌเจฟเฉฑเจŸเจฐเฉ‡เจŸ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ“เฅค . เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจ‡เจธ เจธเจญ เจฆเจพ เจงเจฟเจ†เจจ เจฐเฉฑเจ–เจฆเจพ เจนเฉˆ, เจกเจฟเจตเฉˆเจฒเจชเจฐ เจจเฉ‚เฉฐ เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจพเจ‚ เจฒเจˆ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจšเจฟเฉฐเจคเจพ เจ•เจฐเจจ เจฆเฉ€ เจตเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ‡เฉฑเจ• เจ†เจงเฉเจจเจฟเจ• เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ, เจ•เฉˆเจชเจšเจฐเจฟเฉฐเจ—, เจ—เฉเจฃเจตเฉฑเจคเจพ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ (เจงเฉเจจเฉ€ เจคเฉ‹เจ‚ เจ—เฉ‚เฉฐเจœ เจ…เจคเฉ‡ เจธเจผเฉ‹เจฐ เจจเฉ‚เฉฐ เจนเจŸเจพเจ“, เจคเจธเจตเฉ€เจฐ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ เจ•เจฐเฉ‹), เจตเฉ€เจกเฉ€เจ“ เจ…เจคเฉ‡ เจ†เจกเฉ€เจ“ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจฒเจˆ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจธเจพเจซเจŸเจตเฉ‡เจ…เจฐ เจฒเฉ‡เจ…เจฐ เจนเจจเฅค เจฒเฉ‡เจ…เจฐ เจธเจ•เฉ€เจฎ เจจเฉ‚เฉฐ เจ…เฉฐเจœเฉ€เจฐ เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆเฅค 1:

(เจฒเจ—เจญเจ—) เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจคเฉ‹เจ‚ เจฌเฉ‡เจ•เจพเจฐ เจตเฉˆเจฌเจ•เฉˆเจฎ เจธเจŸเฉเจฐเฉ€เจฎเจฟเฉฐเจ—เฅค เจญเจพเจ— 2. WebRTCเจšเฉŒเจฒ. 1. เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจตเจฟเฉฑเจš เจ†เจกเฉ€เจ“ เจ…เจคเฉ‡ เจตเฉ€เจกเฉ€เจ“ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฆเฉ€เจ†เจ‚ เจชเจฐเจคเจพเจ‚

เจธเจพเจฐเฉ€ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจธเจฟเฉฑเจงเฉ‡ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจตเจฟเฉฑเจš เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ•เฉ‹เจˆ เจตเจพเจงเฉ‚ เจจเจนเฉ€เจ‚เฅค เจ•เฉ‹เจˆ เจชเจฒเฉฑเจ—เจ‡เจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚เฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, 2020 เจฒเจˆ เจšเฉ€เจœเจผเจพเจ‚ เจ…เจœเฉ‡ เจตเฉ€ เจ‡เฉฐเจจเฉ€เจ†เจ‚ เจ—เฉเจฒเจพเจฌเฉ€ เจจเจนเฉ€เจ‚ เจนเจจ. เจ…เจœเจฟเจนเฉ‡ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจนเจจ เจœเฉ‹ เจ…เจœเฉ‡ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจธเจฎเจฐเจฅเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ MediaStream API, เจคเฉเจธเฉ€เจ‚ เจฒเจฟเฉฐเจ• เจฆเฉ€ เจชเจพเจฒเจฃเจพ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจฌเจฟเจฒเจ•เฉเจฒ เจนเฉ‡เจ เจพเจ‚ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ เจธเจพเจฐเจฃเฉ€ เจจเฉ‚เฉฐ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ–เจพเจธ เจ•เจฐเจ•เฉ‡ IE เจซเจฟเจฐ เจจเจฟเจฐเจพเจธเจผเจพเจœเจจเจ• เจนเฉˆเฅค

เจคเฉเจธเฉ€เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ€เจ†เจ‚ เจธเจŸเฉเจฐเฉ€เจฎเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจฌเจนเฉเจค เจฆเจฟเจฒเจšเจธเจช เจšเฉ€เจœเจผเจพเจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹: เจคเฉเจธเฉ€เจ‚ เจ•เจฒเฉ‹เจจ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจตเฉ€เจกเฉ€เจ“ เจฐเฉˆเจœเจผเฉ‹เจฒเจฟเจŠเจธเจผเจจ เจจเฉ‚เฉฐ เจฌเจฆเจฒ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ†เจกเฉ€เจ“ เจ—เฉเจฃเจตเฉฑเจคเจพ เจตเจฟเฉฑเจš เจนเฉ‡เจฐเจพเจซเฉ‡เจฐเฉ€ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจคเฉเจธเฉ€เจ‚ เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎ เจธเจŸเฉเจฐเฉ€เจฎ เจจเฉ‚เฉฐ เจฒเฉˆ เจ…เจคเฉ‡ "เจนเฉเฉฑเจ•" เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ html เจชเฉฐเจจเฉ‡ 'เจคเฉ‡ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจŸเฉˆเจ— เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจฆเฉ‡เจ–เฉ‹เฅค เจœเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ•เฉˆเจจเจตเจธ 'เจคเฉ‡ เจ‡เฉฑเจ• เจธเจŸเฉเจฐเฉ€เจฎ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ…เจคเฉ‡ WebGL เจœเจพเจ‚ CSS3 เจธเฉˆเฉฑเจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ…เจคเฉ‡ เจตเฉ€เจกเฉ€เจ“ 'เจคเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจซเจฟเจฒเจŸเจฐ เจฒเจ—เจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เฉ€เจคเฉ‡ เจตเฉ€เจกเฉ€เจ“ เจจเฉ‚เฉฐ เจ•เฉˆเจจเจตเจธ เจคเฉ‹เจ‚ เจ•เฉˆเจชเจšเจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจซเจฟเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจจเฉˆเฉฑเจŸเจตเจฐเจ• 'เจคเฉ‡ เจธเจฐเจตเจฐ 'เจคเฉ‡ เจญเฉ‡เจœ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจŸเฉเจฐเจพเจ‚เจธเจ•เฉ‹เจก เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจนเจฐ เจ•เจฟเจธเฉ‡ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ (เจนเฉˆเจฒเฉ‹ เจฌเจฟเจ—เฉ‹ เจฒเจพเจˆเจต, เจŸเจตเจฟเจš เจ…เจคเฉ‡ เจนเฉ‹เจฐ). เจ‡เฉฑเจฅเฉ‡ เจฎเฉˆเจ‚ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจจเจนเฉ€เจ‚ เจ•เจฐเจพเจ‚เจ—เจพ เจ•เจฟ เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ, เจฎเฉˆเจ‚ เจตเฉˆเฉฑเจฌ 'เจคเฉ‡ เจฎเจฟเจฒเฉ€เจ†เจ‚ เจ•เฉเจ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเฉ‡เจตเจพเจ‚เจ—เจพ:

https://jeeliz.com/ - เจฎเฉเฉฐเจกเฉ‡ เจœเจพเจตเจพเจธเจ•เฉเจฐเจฟเจชเจŸ เจตเจฟเฉฑเจš เจฐเฉ€เจ…เจฒเจŸเจพเจˆเจฎ เจธเฉ€เจตเฉ€ เจ•เจฐ เจฐเจนเฉ‡ เจนเจจเฅค เจ‰เจจเฉเจนเจพเจ‚ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจชเฉ‚เจฐเจพ เจนเฉˆ เจ…เจธเจฒเจพ เจ•เฉˆเจจเจตเจธ 'เจคเฉ‡ เจตเฉ€เจกเฉ€เจ“ เจธเจŸเฉเจฐเฉ€เจฎ เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจตเฉฑเจ–-เจตเฉฑเจ– js เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚: เจšเจฟเจนเจฐเจฟเจ†เจ‚, เจตเจธเจคเฉ‚เจ†เจ‚ เจฆเจพ เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃเจพ, เจซเจฟเจฒเจŸเจฐ เจฒเจ—เจพเจ‰เจฃเจพ (เจฎเจพเจธเจ•, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‡เฉฐเจธเจŸเจพเจ—เฉเจฐเจพเจฎ เจตเจฟเฉฑเจš), เจ†เจฆเจฟเฅค เจคเฉเจธเฉ€เจ‚ เจตเจพเจงเฉ‚ เจชเจฒเฉฑเจ—เจ‡เจจเจพเจ‚ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจตเจฟเฉฑเจš เจฐเฉ€เจ…เจฒ-เจŸเจพเจˆเจฎ เจตเฉ€เจกเฉ€เจ“ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ‡เจธเจฆเฉ€ เจ‡เฉฑเจ• เจธเจผเจพเจจเจฆเจพเจฐ เจ‰เจฆเจพเจนเจฐเจฃเฅค

Canvas captureStream API - เจ•เฉˆเจจเจตเจธ เจคเฉ‹เจ‚ เจตเฉ€เจกเฉ€เจ“ เจธเจŸเฉเจฐเฉ€เจฎ เจจเฉ‚เฉฐ เจ•เฉˆเจชเจšเจฐ เจ•เจฐเจจ เจฒเจˆ API เจฆเจธเจคเจพเจตเฉ‡เจœเจผเฅค Chrome, Opera เจ…เจคเฉ‡ Firefox เจตเจฟเฉฑเจš เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจธเจฎเจฐเจฅเจฟเจค เจนเฉˆ

RTCPeerConnection

เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจฌเจฟเฉฐเจฆเฉ‚ 'เจคเฉ‡ เจ†เจ, เจชเจฐ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจตเฉ€เจกเฉ€เจ“ เจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจจเจพ เจนเฉˆ? เจธเจพเจนเจฎเจฃเฉ‡ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ RTCPeerConnection. เจธเฉฐเจ–เฉ‡เจช เจตเจฟเฉฑเจš, เจฒเจ—เจญเจ— เจ‡เจธ เจชเฉœเจพเจ… 'เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• RTCPeerConnection เจตเจธเจคเฉ‚ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

const peerConnection = new RTCPeerConnection({
  iceServers: [{
    urls: 'stun:stun.l.google.com:19302'
  }]
});

เจ…เจธเฉ€เจ‚ iceServers เจจเฉ‚เฉฐ เจตเจฟเจ•เจฒเจชเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ - เจ‡เจน เจ‡เฉฑเจ• เจธเจฐเจตเจฐ เจนเฉˆ เจœเฉ‹ NAT'om เจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจฆเฉ‹ เจฌเฉเจฐเจพเจ‰เจœเจผเจฐเจพเจ‚ เจตเจฟเจšเจ•เจพเจฐ เจ‡เฉฑเจ• เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจฎเจฆเจฆ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจญเจพเจต, เจธเจฎเฉฑเจธเจฟเจ† เจ‡เฉฑเจฅเฉ‡ เจนเฉฑเจฒ เจนเฉ‹ เจ—เจˆ เจนเฉˆ: เจตเจพเจฐเจคเจพเจ•เจพเจฐ เจฆเจพ เจ†เจˆเจชเฉ€ เจ•เจฟเจตเฉ‡เจ‚ เจชเจคเจพ เจฒเจ—เจพเจ‡เจ† เจœเจพเจตเฉ‡ เจœเฉ‡ เจ‰เจน เจ†เจชเจฃเฉ‡ เจชเฉเจฐเจฆเจพเจคเจพ เจฆเฉ‡ NAT เจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจนเฉˆ? ICE เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฌเจšเจพเจ… เจฒเจˆ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ, เจตเจพเจธเจคเจต เจตเจฟเฉฑเจš, ICE เจฌเจฟเจฒเจ•เฉเจฒ เจตเฉ€ WebRTC 'เจคเฉ‡ เจฒเจพเจ—เฉ‚ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ, เจชเจฐ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจ‡เจธ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐเฅค

เจชเจนเจฟเจฒเจพเจ‚, เจธเจพเจจเฉ‚เฉฐ เจฏเฉ‚เจœเจผเจฐเจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจพเจ‚ เจฎเจฟเจฒเฉ€เจ†เจ‚:

navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(stream => {
  // Usermedia-ะฟะพั‚ะพะบะธ, ะพะฑั‹ั‡ะฝะพ ัั‚ะพ ะฒะธะดะตะพ ะธ ะฐัƒะดะธะพ 
  const tracks = stream.getTracks();

   for (const track of tracks) {
     // ะบะฐะถะดั‹ะน ั‚ั€ะตะบ ะฟั€ะธัะพะตะดะธะฝัะตะผ ะบ peerConnection
     peerConnection.addTrack(track);
   }
}).catch(console.error);

เจ…เฉฑเจ—เฉ‡, เจชเฉ€เจ…เจฐ เจ•เจจเฉˆเจ•เจธเจผเจจ 'เจคเฉ‡ เจ—เฉฑเจฒเจฌเจพเจค เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจ˜เจŸเจจเจพ เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจœเจฟเจธ เจฆเฉ‡ เจนเฉˆเจ‚เจกเจฒเจฐ เจตเจฟเฉฑเจš เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจชเฉ‡เจธเจผเจ•เจธเจผ เจฌเจฃเจพเจ‰เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ (SDP - เจธเฉˆเจธเจผเจจ เจตเจฐเจฃเจจ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš) เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ setLocalDescription เจตเจฟเจงเฉ€ เจฐเจพเจนเฉ€เจ‚ เจชเฉ€เจ…เจฐ เจ•เจจเฉˆเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจธเฉŒเจ‚เจชเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค SDP เจฌเจพเจฐเฉ‡ - เจ‡เจน เจ•เฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจชเฉ‡เจธเจผเจ•เจธเจผ เจ…เจคเฉ‡ เจœเจตเจพเจฌ เจฆเฉ‡ เจซเจพเจฐเจฎเฉˆเจŸเจพเจ‚ เจฌเจพเจฐเฉ‡ - เจ…เจธเฉ€เจ‚ เจ…เฉฑเจ—เฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

LocalDescription peerConnection เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจ†เจˆเจธ เจ‰เจฎเฉ€เจฆเจตเจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ "เจ‡เจ•เฉฑเจ เจพ" เจ•เจฐเจฆเจพ เจนเฉˆ, เจฏเจพเจจเฉ€ NAT เจฐเจพเจนเฉ€เจ‚ เจธเฉฐเจšเจพเจฐ เจ•เจฐเจจ เจฆเฉ‡ เจ•เจˆ เจคเจฐเฉ€เจ•เฉ‡ เจฒเฉฑเจญเจฆเจพ เจนเฉˆเฅค เจ†เจจเจฟเจธเจ—เฉˆเจฆเจฐเจฟเฉฐเจ—เจธเจŸเฉ‡เจŸเจšเฉ‡เจ‚เจœ เจ˜เจŸเจจเจพ เจจเฉ‚เฉฐ เจ…เฉฑเจ— เจฒเฉฑเจ— เจ—เจˆเฅค onicegatheringstatechange เจนเฉˆเจ‚เจกเจฒเจฐ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจธเจพเจฅเฉ€เจ†เจ‚ เจตเจฟเจšเจ•เจพเจฐ เจธเฉˆเจธเจผเจจ เจตเจฐเจฃเจจ เจฆเจพ เจ†เจฆเจพเจจ-เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฒเจˆ webrtc-signaling-server เจธเจŸเฉเจฐเฉ€เจฎ เจจเจพเจฒ เจ‡เฉฑเจ• เจ•เจจเฉˆเจ•เจธเจผเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚:

peerConnection.oniceconnectionstatechange = (event) => {
      console.log('Connection state: ', peerConnection.iceConnectionState);

      if (peerConnection.iceConnectionState === 'connected') {
        // ะœะพะถะตะผ ะฐะบั‚ะธะฒะธั€ะพะฒะฐั‚ัŒ ะบะฝะพะฟะบัƒ Start broadcast
        setBroadcasting(true);
        setBroadcastingBtnActive(true);
      }
    };

// ะกะพะฑั‹ั‚ะธะต ัั€ะฐะฑะฐั‚ั‹ะฒะฐะตั‚ ัั€ะฐะทัƒ, ะบะฐะบ ั‚ะพะปัŒะบะพ ะดะพะฑะฐะฒะธะปัั ะผะตะดะฐะธะฐะฟะพั‚ะพะบ ะฒ peerConnection
peerConnection.onnegotiationneeded = (event) => {
      // ะกะพะทะดะฐะตะผ ะธ ะฝะฐะทะฝะฐั‡ะฐะตะผ SDP offer
      peerConnection.createOffer().
        then((offer) => peerConnection.setLocalDescription(offer)).
        catch(console.error);
    };

// ะกะพะฑั‹ั‚ะธะต ัั€ะฐะฑะฐั‚ั‹ะฒะฐะตั‚ ะบะฐะถะดั‹ะน ั€ะฐะท, ะบะฐะบ ะฟะพัะฒะปัะตั‚ัั ICE ะบะฐะฝะดะธะดะฐั‚
peerConnection.onicegatheringstatechange = (ev) => {
      let connection = ev.target;

      // Now we can activate broadcast button
      if (connection.iceGatheringState === 'complete') {
        let delay = 50;
        let tries = 0;
        let maxTries = 3;

        let timerId = setTimeout(function allowStreaming() {
          if (isOnline) {
            setBroadcastingBtnActive(true);
            return;
          }

          if (tries < maxTries) {
            tries += 1;
            delay *= 2;
            timerId = setTimeout(allowStreaming, delay);
          } else {
            // TODO: show user notification
            console.error("Can't connect to server");

            alert("Can't connect to server");
          }
        }, delay);
      }
    };

webrtc-signaling-server เจ‡เฉฑเจ• เจธเจฐเจตเจฐ เจนเฉˆ เจœเฉ‹ เจฆเฉ‹ เจธเจพเจฅเฉ€เจ†เจ‚ เจตเจฟเจšเจ•เจพเจฐ เจธเฉˆเจธเจผเจจ เจฆเฉ‡ เจตเจฐเจฃเจจ เจฆเจพ เจ†เจฆเจพเจจ-เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ เจนเฉˆ, เจ‡เจน เจ•เจฟเจธเฉ‡ เจตเฉ€ PL 'เจคเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจธเจฐเจฒ เจตเฉˆเจฌเจธเจพเจ•เฉ‡เจŸ เจœเจพเจ‚ xhr-เจธเจฐเจตเจฐ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจธเจฆเจพ เจ•เฉฐเจฎ เจธเจงเจพเจฐเจจ เจนเฉˆ: เจ‡เฉฑเจ• เจชเฉ€เจ…เจฐ เจคเฉ‹เจ‚ เจธเฉˆเจธเจผเจจ เจฆเฉ‡ เจตเฉ‡เจฐเจตเฉ‡ เจจเฉ‚เฉฐ เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจฆเฉ‚เจœเฉ‡ เจตเจฟเฉฑเจš เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจจเจพเฅค

เจธเฉˆเจธเจผเจจ เจฆเฉ‡ เจตเฉ‡เจฐเจตเจฟเจ†เจ‚ เจฆเฉ‡ เจ†เจฆเจพเจจ-เจชเฉเจฐเจฆเจพเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจฆเฉ‹เจตเฉ‡เจ‚ เจงเจฟเจฐเจพเจ‚ เจตเฉ€เจกเฉ€เจ“ เจธเจŸเฉเจฐเฉ€เจฎเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจคเจฟเจ†เจฐ เจนเจจ, เจœเจฟเจธ เจชเจพเจธเฉ‡ เจตเฉ€เจกเฉ€เจ“ เจธเจŸเฉเจฐเฉ€เจฎ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ“เจจเจŸเจฐเฉˆเจ• เจ‡เจตเฉˆเจ‚เจŸ เจจเฉ‚เฉฐ เจชเฉ€เจ…เจฐ เจ•เจจเฉˆเจ•เจธเจผเจจ 'เจคเฉ‡ เจšเจพเจฒเฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจฆเฉ‡ เจนเฉˆเจ‚เจกเจฒเจฐ เจตเจฟเฉฑเจš, เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจŸเจฐเฉˆเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ…เจคเฉ‡ เจ†เจชเจฃเฉ‡ เจฎเจจเจชเจธเฉฐเจฆ เจตเจพเจฐเจคเจพเจ•เจพเจฐ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เฉ‹เฅค เจนเฉ‹เจฐ เจฅเจฟเจŠเจฐเฉ€ เจ…เจคเฉ‡ เจตเฉ‡เจฐเจตเฉ‡.

เจฒเจฟเฉฐเจ• เจ…เจคเฉ‡ เจธเจพเจนเจฟเจค:

https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection - เจฆเจธเจคเจพเจตเฉ‡เจœเจผ RTCPeerConnection

https://github.com/pion/webrtc - เจœเจพเจ‚เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ WebRTC เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ

https://webrtcforthecurious.com/ - pion เจฆเฉ‡ เจธเจฟเจฐเจœเจฃเจนเจพเจฐเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจ•เจฟเจคเจพเจฌ

https://hpbn.co/ - เจฌเฉเฉฑเจ• เจนเจพเจˆ เจชเจฐเจซเจพเจฐเจฎเฉˆเจ‚เจธ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจจเฉˆเฉฑเจŸเจตเจฐเจ•เจฟเฉฐเจ—เฅค เจตเฉˆเฉฑเจฌ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจ‰เฉฑเจš เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ‡ เจฎเฉเฉฑเจฆเจฟเจ†เจ‚ 'เจคเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจจเจพเจฒ เจšเจฐเจšเจพ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆเฅค เจ…เฉฐเจค เจตเจฟเฉฑเจš, WebRTC เจฆเจพ เจตเจฐเจฃเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจ•เจฟเจคเจพเจฌ เจฌเฉ‡เจธเจผเฉฑเจ• เจชเฉเจฐเจพเจฃเฉ€ เจนเฉˆ (2013), เจชเจฐ เจ‡เจธเจฆเฉ€ เจธเจพเจฐเจฅเจ•เจคเจพ เจจเจนเฉ€เจ‚ เจ—เฉเจ†เจ‰เจ‚เจฆเฉ€เฅค

เจ…เจ—เจฒเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจฅเจฟเจŠเจฐเฉ€ เจฆเจพ เจฅเฉ‹เฉœเจพ เจนเฉ‹เจฐ เจนเจฟเฉฑเจธเจพ เจฆเฉ‡เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ…เจญเจฟเจ†เจธ เจตเจฟเฉฑเจš เจชเฉ€เจ“เจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเจฐเจตเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจตเฉ€เจกเฉ€เจ“ เจธเจŸเฉเจฐเฉ€เจฎ เจฆเฉ‡ เจฐเจฟเจธเฉˆเจชเจธเจผเจจ เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจ เจฒเจˆ, เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจตเจฟเฉฑเจš เจฆเจฐเจธเจผเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจ…เจ—เจฒเฉ‡ เจชเฉเจฐเจธเจพเจฐเจฃ เจฒเจˆ ffmpeg เจฆเฉเจ†เจฐเจพ HLS เจจเฉ‚เฉฐ เจŸเฉเจฐเจพเจ‚เจธเจ•เฉ‹เจกเจฟเฉฐเจ— เจ•เจฐเจจเจพ.

เจฌเฉ‡เจšเฉˆเจจ เจฒเจˆ: twitch เจตเจฟเฉฑเจš เจ‡เฉฑเจ• pion-เจ…เจงเจพเจฐเจฟเจค เจธเจฐเจตเจฐ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจคเฉ€เจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจตเฉˆเจฌเจ•เฉˆเจฎ เจคเฉ‹เจ‚ เจตเฉ€เจกเฉ€เจ“ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เจฐเจจ เจฆเจพ เจฎเฉ‡เจฐเจพ เจฌเจนเฉเจค เจนเฉ€ เจ•เฉฑเจšเจพ เจชเฉเจฐเฉ‹เจŸเฉ‹เจŸเจพเจˆเจช (เจ‡เจน เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจชเฉเจฐเจฏเฉ‹เจ— เจนเฉˆ)เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹