{"id":7196,"date":"2020-10-21T09:32:23","date_gmt":"2020-10-21T02:32:23","guid":{"rendered":"https:\/\/blog.tinohost.com\/?p=7196"},"modified":"2020-10-21T09:32:23","modified_gmt":"2020-10-21T02:32:23","slug":"webrtc-la-gi","status":"publish","type":"post","link":"https:\/\/tino.vn\/blog\/webrtc-la-gi\/","title":{"rendered":"WebRTC l\u00e0 g\u00ec? T\u00ecm hi\u1ec3u v\u1ec1 WebRTC A-Z"},"content":{"rendered":"\n<p><strong>\u201cWebRTC l\u00e0 kh\u1ea3 n\u0103ng giao ti\u1ebfp tr\u1ef1c ti\u1ebfp v\u1edbi m\u1ed9t ai \u0111\u00f3 ho\u1eb7c m\u1ed9t c\u00e1i g\u00ec \u0111\u00f3 nh\u01b0 th\u1ec3 b\u1ea1n \u0111ang \u1edf ngay b\u00ean c\u1ea1nh v\u1eady. WebRTC l\u1ea5p \u0111\u1ea7y kho\u1ea3ng tr\u1ed1ng t\u1edbi h\u1ea1n trong n\u1ec1n t\u1ea3ng web khi b\u1ea1n c\u00f3 th\u1ec3 giao ti\u1ebfp trong th\u1eddi gian th\u1ef1c ch\u1ec9 b\u1eb1ng vi\u1ec7c t\u1ea3i m\u1ed9t trang web,\u201d Justin Uberti, Tr\u01b0\u1edfng B\u1ed9 ph\u1eadn k\u1ef9 thu\u1eadt v\u1ec1 WebRTC, Google cho hay.<\/strong><\/p>\n\n\n<h2 id=\"WebRTC_l\u00e0_g\u00ec?&nbsp;\"><b>WebRTC l\u00e0 g\u00ec?&nbsp;<\/b><\/h2>\n\n\n<p><span style=\"font-weight: 400;\">\u0110\u00e2y l\u00e0 ch\u1eef vi\u1ebft t\u1eaft c\u1ee7a c\u1ee5m t\u1eeb <\/span><b>&#8220;Web Real-Time Communication&#8221;<\/b><span style=\"font-weight: 400;\">, t\u1ea1m d\u1ecbch l\u00e0 <\/span><i><span style=\"font-weight: 400;\">&#8220;Giao ti\u1ebfp v\u1edbi website theo th\u1eddi gian th\u1ef1c&#8221;<\/span><\/i><span style=\"font-weight: 400;\">.<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">WebRTC l\u00e0 m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c h\u00e0m l\u1eadp tr\u00ecnh (web API) \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng <a href=\"https:\/\/tino.vn\/blog\/html-css-javascript-la-gi\/\" target=\"_blank\" rel=\"noopener noreferrer\">JavaScript<\/a> gi\u00fap giao ti\u1ebfp theo th\u1eddi gian th\u1ef1c m\u00e0 kh\u00f4ng c\u1ea7n \u0111\u1ebfn plugin hay ph\u1ea7n m\u1ec1m h\u1ed7 tr\u1ee3. H\u00ecnh th\u1ee9c giao ti\u1ebfp l\u00e0 th\u00f4ng qua Video Call, Voice Call hay transfer data P2P(peer-to-peer).\u00a0<\/span><\/p>\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2020\/10\/1.png\" alt=\"webrtc-la-gi\" class=\"wp-image-13930\" title=\"\"><\/figure><\/div>\n\n\n<h3 id=\"L\u1ecbch_s\u1eed_c\u1ee7a_WebRTC\"><b>L\u1ecbch s\u1eed c\u1ee7a WebRTC<\/b><\/h3>\n\n\n<p><span style=\"font-weight: 400;\">WebRTC l\u00e0 m\u1ed9t s\u1ea3n ph\u1ea9m c\u1ee7a World Wide Web Consortium (W3C).<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">T\u1eeb nh\u1eefng n\u0103m 2009, nh\u00f3m k\u1ef9 s\u01b0 ch\u1ecbu tr\u00e1ch nhi\u1ec7m cho Google Hangout \u0111\u00e3 &#8220;thai ngh\u00e9n&#8221; \u00fd t\u01b0\u1edfng h\u00ecnh th\u00e0nh WebRTC. L\u00fac b\u1ea5y gi\u1edd, Flash l\u00e0 l\u1ef1a ch\u1ecdn h\u00e0ng \u0111\u1ea7u khi mu\u1ed1n truy\u1ec1n t\u1ea3i video, h\u00ecnh \u1ea3nh tr\u00ean web.&nbsp;<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">L\u00e0 ng\u01b0\u1eddi &#8220;trong ng\u00e0nh&#8221;, h\u1ecd \u1ea5p \u1ee7 \u00fd t\u01b0\u1edfng v\u1ec1 m\u1ed9t chu\u1ea9n ri\u00eang thay v\u00ec s\u1eed d\u1ee5ng c\u00f4ng ngh\u1ec7 s\u1eafp l\u1ed7i th\u1eddi n\u00e0y. V\u00e0 WebRTC ra \u0111\u1eddi t\u1eeb \u0111\u00e2y.&nbsp;<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">N\u0103m 2010, Google th\u00e2u t\u00f3m hai c\u00f4ng ty On2 v\u00e0 Global IP Solutions (GIPS) \u0111\u1ec3 s\u1edf h\u1eefu b\u1ea3n quy\u1ec1n c\u00f4ng ngh\u1ec7 truy\u1ec1n d\u1eef li\u1ec7u th\u1eddi gian th\u1ef1c l\u00e0m n\u1ec1n t\u1ea3ng cho WebRTC v\u1ec1 sau.<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">Th\u00e1ng 5\/2011, d\u1ef1 \u00e1n ngu\u1ed3n m\u1edf h\u1ed7 tr\u1ee3 giao ti\u1ebfp th\u1eddi gian th\u1ef1c gi\u1eefa tr\u00ecnh duy\u1ec7t WebRTC c\u00f3 nh\u1eefng b\u01b0\u1edbc ti\u1ebfn \u0111\u1ea7u ti\u00ean.&nbsp;<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">Trong khi \u0111\u00f3, Hi\u1ec7p h\u1ed9i World Wide Web (W3C) v\u00e0 Hi\u1ec7p h\u1ed9i K\u1ef9 s\u01b0 qu\u1ed1c t\u1ebf (IETF) c\u0169ng ph\u00e1t tri\u1ec3n c\u00e1c giao th\u1ee9c k\u1ebft n\u1ed1i th\u1eddi gian th\u1ef1c. V\u00ec th\u1ebf, h\u1ecd \u0111\u00e3 quy\u1ebft \u0111\u1ecbnh b\u1eaft tay \u0111\u1ec3 chung s\u1ee9c ho\u00e0n thi\u1ec7n s\u1ea3n ph\u1ea9m n\u00e0y.&nbsp;<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">Th\u00e1ng 10\/2011, c\u00f9ng nhau x\u00e2y d\u1ef1ng s\u1ea3n ph\u1ea9m n\u00e0y. 27\/10\/2011, b\u1ea3n nh\u00e1p \u0111\u1ea7u ti\u00ean c\u1ee7a WebRTC ch\u00ednh th\u1ee9c \u0111\u01b0\u1ee3c &#8220;tr\u00ecnh l\u00e0ng&#8221;.&nbsp;<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">Th\u00e1ng 11, Chrome 23 ra \u0111\u1eddi v\u00e0 tr\u1edf th\u00e0nh tr\u00ecnh duy\u1ec7t \u0111\u1ea7u ti\u00ean t\u00edch h\u1ee3p s\u1eb5n WebRTC.<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">Cho \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m n\u00e0y, WebRTC v\u1eabn c\u00f2n \u0111ang ti\u1ebfp t\u1ee5c \u0111\u01b0\u1ee3c ph\u00e1t tri\u1ec3n ch\u1ee9 ch\u01b0a ho\u00e0n thi\u1ec7n m\u1ed9t c\u00e1ch ch\u00ednh th\u1ee9c.<\/span><\/p>\n\n\n<h3 id=\"C\u00f4ng_d\u1ee5ng_c\u1ee7a_WebRTC\"><b>C\u00f4ng d\u1ee5ng c\u1ee7a WebRTC<\/b><\/h3>\n\n\n<ul class=\"wp-block-list\"><li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Truy\u1ec1n t\u1ea3i video, \u00e2m thanh, g\u1eedi d\u1eef li\u1ec7u \u201cPeer-to-Peer\u201d (P2P) theo th\u1eddi gian th\u1ef1c gi\u1eefa hai hay nhi\u1ec1u thi\u1ebft b\u1ecb m\u00e0 kh\u00f4ng qua trung gian, kh\u00f4ng c\u1ea7n c\u00e0i th\u00eam plugin.<\/span><\/li><li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Ph\u00e1t tri\u1ec3n game ch\u01a1i tr\u1ef1c ti\u1ebfp trong tr\u00ecnh duy\u1ec7t. Ng\u01b0\u1eddi ch\u01a1i ch\u1ec9 c\u1ea7n s\u1eed d\u1ee5ng tr\u00ecnh duy\u1ec7t c\u00f3 h\u1ed7 tr\u1ee3 WebRTC \u0111\u1ec3 ch\u01a1i, kh\u00f4ng c\u1ea7n c\u00e0i \u0111\u1eb7t r\u01b0\u1eddm r\u00e0.<\/span><\/li><li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">\u1ee8ng d\u1ee5ng kh\u00e1c.<\/span><\/li><\/ul>\n\n\n<h2 id=\"\u01afu_&#8211;_nh\u01b0\u1ee3c_\u0111i\u1ec3m_c\u1ee7a_WebRTC\"><b>\u01afu &#8211; nh\u01b0\u1ee3c \u0111i\u1ec3m c\u1ee7a WebRTC<\/b><\/h2>\n\n\n<h3 id=\"\u01afu_\u0111i\u1ec3m\"><b>\u01afu \u0111i\u1ec3m<\/b><\/h3>\n\n\n<h4 id=\"M\u00e3_ngu\u1ed3n_m\u1edf_mi\u1ec5n_ph\u00ed\"><b>M\u00e3 ngu\u1ed3n m\u1edf mi\u1ec5n ph\u00ed<\/b><\/h4>\n\n\n<p><span style=\"font-weight: 400;\">WebRTC l\u00e0 m\u1ed9t d\u1ef1 \u00e1n m\u00e3 ngu\u1ed3n m\u1edf mi\u1ec5n ph\u00ed. Google cho bi\u1ebft \u0111\u00e2y l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 truy\u1ec1n th\u00f4ng th\u1eddi gian th\u1ef1c ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed v\u00e0 c\u00f3 s\u1eb5n tr\u00ean m\u1ecdi tr\u00ecnh duy\u1ec7t.<\/span><\/p>\n\n\n<h3 id=\"\"><\/h3>\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2020\/10\/2-1.jpg\" alt=\"webrtc-la-gi\" class=\"wp-image-13932\" title=\"\"><\/figure><\/div>\n\n\n<h4 id=\"H\u1ed7_tr\u1ee3_\u0111a_n\u1ec1n_t\u1ea3ng\"><b>H\u1ed7 tr\u1ee3 \u0111a n\u1ec1n t\u1ea3ng<\/b><\/h4>\n\n\n<p><span style=\"font-weight: 400;\">B\u1ea5t k\u00ec tr\u00ecnh tr\u00ecnh duy\u1ec7t n\u00e0o v\u1edbi h\u1ec7 \u0111i\u1ec1u h\u00e0nh b\u1ea5t k\u00ec c\u0169ng c\u00f3 th\u1ec3 t\u1ea1o tr\u1ef1c ti\u1ebfp m\u1ed9t real-time voice ho\u1eb7c video k\u1ebft n\u1ed1i t\u1edbi thi\u1ebft b\u1ecb WebRTC kh\u00e1c. Tr\u00ecnh duy\u1ec7t web, c\u00e1c PC, laptop, MacBook, Smartphone c\u00e1c phi\u00ean b\u1ea3n H\u0110H (Windows, <a href=\"https:\/\/tino.vn\/blog\/he-dieu-hanh-linux-la-gi\/\" target=\"_blank\" rel=\"noopener noreferrer\">Linux<\/a><\/span><span style=\"font-weight: 400;\">, MacOS\u2026),c\u00e1c thi\u1ebft b\u1ecb th\u00f4ng minh kh\u00e1c.<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">L\u1eadp tr\u00ecnh vi\u00ean c\u00f3 th\u1ec3 vi\u1ebft c\u00e1c \u0111o\u1ea1n m\u00e3 HTML l\u00e0m vi\u1ec7c v\u1edbi m\u00e1y t\u00ednh ho\u1eb7c thi\u1ebft b\u1ecb di \u0111\u1ed9ng.<\/span><\/p>\n\n\n<h4 id=\"B\u1ea3o_m\u1eadt_voice_v\u00e0_video\"><b>B\u1ea3o m\u1eadt voice v\u00e0 video<\/b><\/h4>\n\n\n<p><span style=\"font-weight: 400;\">D\u1eef li\u1ec7u media s\u1ebd \u0111\u01b0\u1ee3c m\u00e3 h\u00f3a v\u00e0 x\u00e1c th\u1ef1c nh\u1edd giao th\u1ee9c SRTP (Secure Real-Time Transport Protocol). Nh\u1edd v\u1eady, trong qu\u00e1 tr\u00ecnh th\u1ef1c hi\u1ec7n t\u00e1c v\u1ee5 video hay voice, b\u1ea1n c\u00f3 th\u1ec3 y\u00ean t\u00e2m, kh\u00f4ng b\u1ecb nghe tr\u1ed9m.&nbsp;&nbsp;<\/span><\/p>\n\n\n<h4 id=\"Kh\u00f4ng_c\u1ea7n_plugin_hay_ph\u1ea7n_m\u1ec1m_h\u1ed7_tr\u1ee3\"><b>Kh\u00f4ng c\u1ea7n plugin hay ph\u1ea7n m\u1ec1m h\u1ed7 tr\u1ee3<\/b><\/h4>\n\n\n<p><span style=\"font-weight: 400;\">\u0110\u00e2y l\u00e0 \u0111i\u1ec3m m\u1ea1nh quan tr\u1ecdng c\u1ee7a WebRTC. Ho\u1ea1t \u0111\u1ed9ng kh\u00f4ng c\u1ea7n \u0111\u1ebfn plugin b\u00ean th\u1ee9 ba mang \u0111\u1ebfn s\u1ef1 ti\u1ec7n l\u1ee3i, t\u1ed1i \u01b0u t\u1ed1c \u0111\u1ed9, ti\u1ebft ki\u1ec7m chi ph\u00ed,\u2026<\/span><\/p>\n\n\n<h4 id=\"Kh\u00e1_d\u1ec5_s\u1eed_d\u1ee5ng\"><strong>Kh\u00e1 d\u1ec5 s\u1eed d\u1ee5ng<\/strong><\/h4>\n\n\n<p><span style=\"font-weight: 400;\">WebRTC c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u00edch h\u1ee3p trong c\u00e1c d\u1ecbch v\u1ee5 web b\u1eb1ng c\u00e1ch d\u00f9ng JavaScript APIs, c\u00e1c Framework c\u00f3 s\u1eb5n.<\/span><\/p>\n\n\n<h4 id=\"Th\u00edch_\u1ee9ng_v\u1edbi_c\u00e1c_\u0111i\u1ec1u_ki\u1ec7n_m\u1ea1ng_kh\u00e1c_nhau&nbsp;\"><b>Th\u00edch \u1ee9ng v\u1edbi c\u00e1c \u0111i\u1ec1u ki\u1ec7n m\u1ea1ng kh\u00e1c nhau&nbsp;<\/b><\/h4>\n\n\n<p><span style=\"font-weight: 400;\">WebRTC h\u1ed7 tr\u1ee3 vi\u1ec7c t\u00edch h\u1ee3p v\u1edbi nhi\u1ec1u ki\u1ec3u media v\u00e0 c\u00e1c thi\u1ebft b\u1ecb \u0111\u1ea7u cu\u1ed1i kh\u00e1c nhau. Nh\u1edd v\u1eady, c\u00e1c \u1ee9ng d\u1ee5ng t\u01b0\u01a1ng t\u00e1c video ho\u1eb7c g\u1ecdi tho\u1ea1i c\u1ee7a ng\u01b0\u1eddi d\u00f9ng s\u1eed d\u1ee5ng b\u0103ng th\u00f4ng hi\u1ec7u qu\u1ea3 h\u01a1n.C\u00e1c APIs WebRTC v\u00e0 signaling c\u00f3 th\u1ec3 th\u1ecfa thu\u1eadn k\u00edch th\u01b0\u1edbc v\u00e0 \u0111\u1ecbnh d\u1ea1ng cho m\u1ed7i thi\u1ebft b\u1ecb \u0111\u1ea7u cu\u1ed1i.<\/span><\/p>\n\n\n<h4 id=\"Ti\u1ebft_ki\u1ec7m_chi_ph\u00ed\"><b>Ti\u1ebft ki\u1ec7m chi ph\u00ed<\/b><\/h4>\n\n\n<p><span style=\"font-weight: 400;\">Nh\u1edd t\u00ednh n\u0103ng video call, ng\u01b0\u1eddi d\u00f9ng kh\u00f4ng ph\u1ea3i t\u1ed1n c\u01b0\u1edbc \u0111i\u1ec7n tho\u1ea1i cho m\u1ed7i cu\u1ed9c g\u1ecdi n\u1eefa.<\/span><\/p>\n\n\n<h3 id=\"Nh\u01b0\u1ee3c_\u0111i\u1ec3m\"><b>Nh\u01b0\u1ee3c \u0111i\u1ec3m<\/b><\/h3>\n\n\n<ul class=\"wp-block-list\"><li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">B\u1ecb c\u1ea3n tr\u1edf khi t\u1ea1o k\u1ebft n\u1ed1i peer-to-peer b\u1edfi t\u01b0\u1eddng l\u1eeda v\u00e0 NAT.<\/span><\/li><li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">WebRTC t\u1ea1o ra k\u1ebft n\u1ed1i peer-to-peer gi\u1eefa c\u00e1c tr\u00ecnh duy\u1ec7t m\u00e0 kh\u00f4ng c\u00f3 m\u1ed9t c\u01a1 ch\u1ebf b\u00e1o hi\u1ec7u (signaling) n\u00e0o \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t s\u1eb5n.<\/span><\/li><\/ul>\n\n\n<h3 id=\"Doanh_nghi\u1ec7p_\u0111\u01b0\u1ee3c_g\u00ec_khi_s\u1eed_d\u1ee5ng_WebRTC?\"><b>Doanh nghi\u1ec7p \u0111\u01b0\u1ee3c g\u00ec khi s\u1eed d\u1ee5ng WebRTC?<\/b><\/h3>\n\n\n<p><span style=\"font-weight: 400;\">WebRTC gi\u00fap doanh nghi\u1ec7p:<\/span><\/p>\n\n\n<ul class=\"wp-block-list\"><li><span style=\"font-weight: 400;\">Gi\u1ea3m \u0111\u1ed9 tr\u1ec5 trong vi\u1ec7c truy\u1ec1n t\u1ea3i<\/span><\/li><li><span style=\"font-weight: 400;\">Gi\u1ea3m \u0111\u1ed9 ph\u1ee9c t\u1ea1p khi ph\u00e1t tri\u1ec3n \u1ee9ng d\u1ee5ng&nbsp;<\/span><\/li><li><span style=\"font-weight: 400;\">Gi\u1ea3m chi ph\u00ed v\u1eadn h\u00e0nh (v\u00ec kh\u00f4ng ph\u1ea3i tr\u1ea3 ti\u1ec1n thu\u00ea server, ti\u1ec1n \u0111i\u1ec7n, ti\u1ec1n b\u1ea3o d\u01b0\u1ee1ng\u2026),<\/span><\/li><li><span style=\"font-weight: 400;\">Nh\u1eefng l\u1ee3i nhu\u1eadn b\u00ean tr\u00ean s\u1ebd d\u1eabn \u0111\u1ebfn gi\u00e1 b\u00e1n d\u1ecbch v\u1ee5 (n\u1ebfu c\u00f3) s\u1ebd th\u1ea5p h\u01a1n, ph\u00f9 h\u1ee3p v\u1edbi nhi\u1ec1u \u0111\u1ed1i t\u01b0\u1ee3ng kh\u00e1ch h\u00e0ng h\u01a1n.<\/span><\/li><\/ul>\n\n\n<h2 id=\"Ki\u1ebfn_tr\u00fac_c\u1ee7a_WebRTC\">Ki\u1ebfn tr\u00fac c\u1ee7a WebRTC<\/h2>\n\n\n<h3 id=\"S\u01a1_\u0111\u1ed3_k\u1ebft_n\u1ed1i_gi\u1eefa_Client&nbsp;\">S\u01a1 \u0111\u1ed3 k\u1ebft n\u1ed1i gi\u1eefa Client&nbsp;<\/h3>\n\n\n<p>Ki\u1ebfn tr\u00fac c\u1ee7a WebRTC kh\u00e1 \u0111\u01a1n gi\u1ea3n, n\u00f3 bao g\u1ed3m c\u00e1c Client k\u1ebft n\u1ed1i v\u1edbi nhau th\u00f4ng qua Server Signalling. C\u1ee5 th\u1ec3 s\u01a1 h\u1ed3 \u0111\u01b0\u1ee3c tr\u00ecnh b\u00e0y ngay h\u00ecnh b\u00ean d\u01b0\u1edbi \u0111\u00e2y:&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2020\/10\/1cbb8714-2b17-4426-893c-c030ca5d6cb8-tile-1.jpg\" alt=\"webrtc-la-gi\" class=\"wp-image-13938\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2020\/10\/1cbb8714-2b17-4426-893c-c030ca5d6cb8-tile-1.jpg 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2020\/10\/1cbb8714-2b17-4426-893c-c030ca5d6cb8-tile-1-300x161.jpg 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/figure><\/div>\n\n\n<h3 id=\"C\u00e1c_ph\u1ea7n_ch\u00ednh_c\u1ee7a_WebRTC&nbsp;\"><b>C\u00e1c ph\u1ea7n ch\u00ednh c\u1ee7a WebRTC&nbsp;<\/b><\/h3>\n\n\n<h4 id=\"MediaStream\"><b>MediaStream<\/b><\/h4>\n\n\n<p><span style=\"font-weight: 400;\">\u0110\u00e2y l\u00e0 m\u1ed9t stream d\u1eef li\u1ec7u \u00e2m thanh v\u00e0 h\u00ecnh \u1ea3nh, b\u1eb1ng c\u00e1ch g\u1ecdi h\u00e0m getUserMedia \u0111\u1ec3 kh\u1edfi t\u1ea1o khi l\u00e0m vi\u1ec7c c\u1ee5c b\u1ed9. GetUserMedia s\u1ebd cho ph\u00e9p tr\u00ecnh duy\u1ec7t web truy c\u1eadp v\u00e0o camera v\u00e0\/ho\u1eb7c microphone \u0111\u1ec3 l\u1ea5y d\u1eef li\u1ec7u h\u00ecnh \u1ea3nh \u00e2m thanh cho vi\u1ec7c truy\u1ec1n t\u1ea3i.<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">Sau khi m\u1ed9t k\u1ebft n\u1ed1i WebRTC \u0111\u01b0\u1ee3c thi\u1ebft l\u1eadp v\u1edbi m\u1ed9t m\u00e1y t\u00ednh, MediaStream s\u1ebd cho ph\u00e9p truy c\u1eadp v\u00e0o stream c\u1ee7a m\u1ed9t m\u00e1y t\u00ednh kh\u00e1c.<\/span><\/p>\n\n\n<h4 id=\"RTCDataChannel\"><b>RTCDataChannel<\/b><\/h4>\n\n\n<p><span style=\"font-weight: 400;\">Hi\u1ec3u \u0111\u01a1n gi\u1ea3n, RTCDataChannel cho ph\u00e9p tr\u00ecnh duy\u1ec7t chia s\u1ebb d\u1eef li\u1ec7u peer-to-peer.<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">\u0110\u00e2y l\u00e0 m\u1ed9t k\u00eanh hai chi\u1ec1u ch\u1ecbu tr\u00e1ch nhi\u1ec7m trao \u0111\u1ed5i d\u1eef li\u1ec7u th\u1eddi gian th\u1ef1c. RTCDataChannel s\u1ebd trao \u0111\u1ed5i c\u00e1c d\u1eef li\u1ec7u d\u1ea1ng text, chia s\u1ebb t\u1ec7p P2P v\u00e0 c\u00e1c lo\u1ea1i kh\u00e1c m\u00e0 kh\u00f4ng ch\u1ee9a c\u00e1c d\u1eef li\u1ec7u nghe nh\u00ecn(\u00e2m thanh, h\u00ecnh \u1ea3nh).&nbsp;<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">RTCDataChannel trao \u0111\u1ed5i th\u00f4ng tin nhanh ch\u00f3ng, an to\u00e0n, \u0111\u00e1ng tin.&nbsp;<\/span><\/p>\n\n\n<h4 id=\"RTCPeerConnection\"><b>RTCPeerConnection<\/b><\/h4>\n\n\n<p><span style=\"font-weight: 400;\">Hi\u1ec3u \u0111\u01a1n gi\u1ea3n, RTCPeerConnection \u0111\u01b0\u1ee3c d\u00f9ng \u0111\u1ec3 c\u00e0i \u0111\u1eb7t videocall\/voicecall d\u00f9ng cho vi\u1ec7c truy\u1ec1n t\u1ea3i.<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">\u0110\u00e2y l\u00e0 ph\u1ea7n quan tr\u1ecdng gi\u00fap k\u1ebft n\u1ed1i MediaStream v\u00e0 RTCDataChannel tr\u1edf th\u00e0nh WebRTC. RTCPeerConnection l\u00e0 API gi\u00fap k\u1ebft n\u1ed1i gi\u1eefa hai tr\u00ecnh duy\u1ec7t, cung c\u1ea5p c\u00e1c ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ec3 k\u1ebft n\u1ed1i, duy tr\u00ec k\u1ebft n\u1ed1i v\u00e0 \u0111\u00f3ng k\u1ebft n\u1ed1i khi kh\u00f4ng c\u00f2n nhu c\u1ea7u s\u1eed d\u1ee5ng.<\/span><\/p>\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2020\/10\/3-1.jpg\" alt=\"webrtc-la-gi\" class=\"wp-image-13934\" title=\"\"><\/figure><\/div>\n\n\n<h2 id=\"H\u01b0\u1edbng_d\u1eabn_vi\u1ebft_\u1ee9ng_d\u1ee5ng_g\u1ecdi_video_gi\u1eefa_2_ng\u01b0\u1eddi_b\u1eb1ng_WebRTC_v\u00e0_Firebase_\u0111\u01a1n_gi\u1ea3n\"><strong>H\u01b0\u1edbng d\u1eabn vi\u1ebft \u1ee9ng d\u1ee5ng g\u1ecdi video gi\u1eefa 2 ng\u01b0\u1eddi b\u1eb1ng WebRTC v\u00e0 Firebase \u0111\u01a1n gi\u1ea3n<\/strong><\/h2>\n\n\n<h3 id=\"B\u01b0\u1edbc_1:_C\u00e0i_\u0111\u1eb7t_Firebase\"><strong>B\u01b0\u1edbc 1: C\u00e0i \u0111\u1eb7t Firebase<\/strong><\/h3>\n\n\n<p>Firebase l\u00e0 m\u1ed9t d\u1ecbch v\u1ee5 c\u01a1 s\u1edf d\u1eef li\u1ec7u th\u1eddi gian th\u1ef1c ho\u1ea1t \u0111\u1ed9ng tr\u00ean n\u1ec1n t\u1ea3ng \u0111\u00e1m m\u00e2y \u0111\u01b0\u1ee3c cung c\u1ea5p b\u1edfi Google. T\u00ednh n\u0103ng c\u1ee7a Firebase l\u00e0 \u0111\u01a1n gi\u1ea3n h\u00f3a c\u00e1c thao t\u00e1c v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u1ec3 gi\u00fap c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean ph\u00e1t tri\u1ec3n nhanh c\u00e1c \u1ee9ng d\u1ee5ng.<\/p>\n\n\n<p>Qu\u00e1 tr\u00ecnh c\u00e0i \u0111\u1eb7t Firebase nh\u01b0 sau:<\/p>\n\n\n<ul class=\"wp-block-list\"><li>B\u1ea1n truy c\u1eadp trang firebase.google.com<\/li><li>\u0110\u0103ng nh\u1eadp t\u00e0i kho\u1ea3n Google c\u1ee7a b\u1ea1n<\/li><li>Ch\u1ecdn <strong>\u201cCreate a project\u201d<\/strong> \u0111\u1ec3 t\u1ea1o m\u1edbi m\u1ed9t project.<\/li><li>Th\u00eam <strong>?hl=en<\/strong> v\u00e0o cu\u1ed1i URL v\u00ec Firebase kh\u00f4ng hi\u1ec3n th\u1ecb ng\u00f4n ng\u1eef ti\u1ebfng Anh.<br \/>\u0110i\u1ec1n t\u00ean cho project v\u00e0 ch\u1ecdn <strong>\u201cContinue\u201d<\/strong> \u0111\u1ec3 ti\u1ebfp t\u1ee5c.<\/li><li>T\u1eaft Google Analytic cho project<br \/>Ch\u1ecdn \u201cCreate Project\u201d, ch\u1edd m\u1ed9t l\u00fac \u0111\u1ec3 ch\u01b0\u01a1ng tr\u00ecnh kh\u1edfi t\u1ea1o. Sau \u0111\u00f3, b\u1ea1n nh\u1ea5n<strong> \u201cContinue\u201d<\/strong> \u0111\u1ec3 ti\u1ebfp t\u1ee5c.<\/li><li>Ch\u1ecdn bi\u1ec3u t\u01b0\u1ee3ng Setting b\u00ean c\u1ea1nh <strong>\u201cProject Overview\u201d<\/strong><br \/>K\u00e9o thanh tr\u01b0\u1ee3t xu\u1ed1ng \u0111\u1ec3 ch\u1ecdn lo\u1ea1i platform, ch\u1ecdn bi\u1ec3u t\u01b0\u1ee3ng Web v\u00ec ch\u00fang ta vi\u1ebft \u1ee9ng d\u1ee5ng cho web.<\/li><li>\u0110i\u1ec1n t\u00ean App, ch\u1ecdn c\u00e0i \u0111\u1eb7t Hosting cho app ho\u1eb7c b\u1ea1n c\u00f3 th\u1ec3 c\u00e0i \u0111\u1eb7t sau v\u00e0 ch\u1ecdn<strong> \u201cRegister app\u201d<\/strong>.<\/li><li>Sao ch\u00e9p v\u00e0 d\u00e1n \u0111o\u1ea1n code n\u00e0y v\u00e0o b\u00ean d\u01b0\u1edbi th\u1ebb &lt;body&gt;<\/li><li>Ti\u1ebfp t\u1ee5c ch\u1ecdn<strong> \u201cNext\u201d<\/strong> cho \u0111\u1ebfn ph\u1ea7n cu\u1ed1i b\u1ea1n ch\u1ecdn <strong>\u201cContinue to Console\u201d<\/strong>.<br \/>K\u00e9o thanh tr\u01b0\u1ee3t xu\u1ed1ng m\u1ee5c Firebase SDK snippet v\u00e0 ch\u1ecdn CDN, ch\u00fang ta s\u1ebd ti\u1ebfp t\u1ee5c \u0111\u1ebfn ph\u1ea7n code web.<\/li><li>B\u1ea1n c\u1ea7n th\u1ef1c hi\u1ec7n th\u00eam m\u1ed9t b\u01b0\u1edbc n\u1eefa, \u0111\u00f3 l\u00e0 t\u1ea1o Realtime Database.<\/li><li>Ch\u1ecdn test mode \u0111\u1ec3 ng\u01b0\u1eddi kh\u00e1c c\u00f3 th\u1ec3 ghi v\u00e0o database c\u1ee7a b\u1ea1n.<\/li><\/ul>\n\n\n<h3 id=\"B\u01b0\u1edbc_2:_Code_web_\u0111\u1ec3_k\u1ebft_n\u1ed1i_Firebase\"><strong>B\u01b0\u1edbc 2: Code web \u0111\u1ec3 k\u1ebft n\u1ed1i Firebase<\/strong><\/h3>\n\n\n<p>T\u1ea1o ra m\u1ed9t giao di\u1ec7n website v\u1edbi 2 khung hi\u1ec3n th\u1ecb cho camera 2 m\u00e1y \u0111\u01b0\u1ee3c k\u1ebft n\u1ed1i. S\u1eed d\u1ee5ng th\u1ebb &lt;video&gt;&lt;\/video&gt; v\u00e0 th\u00eam CSS \u0111\u1ec3 giao di\u1ec7n th\u00eam r\u00f5 r\u00e0ng.<\/p>\n\n\n<p>\u0110\u00e2y l\u00e0 m\u1ed9t code web ho\u00e0n ch\u1ec9nh:<\/p>\n\n\n<pre class=\"wp-block-preformatted lang:default decode:true prettyprinted\"><span class=\"tag\">&lt;html&gt;<\/span>\n<span class=\"tag\">&lt;head&gt;<\/span>\n<span class=\"tag\">&lt;script<\/span> <span class=\"atn\">src<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"https:\/\/www.gstatic.com\/firebasejs\/5.0.4\/firebase.js\"<\/span><span class=\"tag\">&gt;&lt;\/script&gt;<\/span>\n<span class=\"tag\">&lt;link<\/span> <span class=\"atn\">href<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/twitter-bootstrap\/3.3.7\/css\/bootstrap.min.css\"<\/span> <span class=\"atn\">rel<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"stylesheet\"<\/span><span class=\"tag\">&gt;<\/span>\n<span class=\"tag\">&lt;style<\/span> <span class=\"atn\">type<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"text\/css\"<\/span><span class=\"tag\">&gt;<\/span><span class=\"pln\">\nvideo <\/span><span class=\"pun\">{<\/span><span class=\"pln\">\nbackground<\/span><span class=\"pun\">-<\/span><span class=\"pln\">color<\/span><span class=\"pun\">:<\/span> <span class=\"com\">#ddd;<\/span><span class=\"pln\">\nborder<\/span><span class=\"pun\">-<\/span><span class=\"pln\">radius<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">7px<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\nmargin<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">10px<\/span> <span class=\"lit\">0px<\/span> <span class=\"lit\">0px<\/span> <span class=\"lit\">10px<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\nwidth<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">320px<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\nheight<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">240px<\/span><span class=\"pun\">;<\/span>\n<span class=\"pun\">}<\/span><span class=\"pln\">\nbutton <\/span><span class=\"pun\">{<\/span><span class=\"pln\">\nmargin<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">5px<\/span> <span class=\"lit\">0px<\/span> <span class=\"lit\">0px<\/span> <span class=\"lit\">10px<\/span> <span class=\"pun\">!<\/span><span class=\"pln\">important<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\nwidth<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">654px<\/span><span class=\"pun\">;<\/span>\n<span class=\"pun\">}<\/span>\n<span class=\"tag\">&lt;\/style&gt;<\/span>\n<span class=\"tag\">&lt;\/head&gt;<\/span>\n<span class=\"tag\">&lt;body<\/span> <span class=\"atn\">onload<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"<\/span><span class=\"pln\">showMyFace<\/span><span class=\"pun\">()<\/span><span class=\"atv\">\"<\/span><span class=\"tag\">&gt;<\/span>\n<span class=\"tag\">&lt;video<\/span> <span class=\"atn\">id<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"yourVideo\"<\/span> <span class=\"atn\">autoplay<\/span> <span class=\"atn\">muted<\/span><span class=\"tag\">&gt;&lt;\/video&gt;<\/span>\n<span class=\"tag\">&lt;video<\/span> <span class=\"atn\">id<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"friendsVideo\"<\/span> <span class=\"atn\">autoplay<\/span><span class=\"tag\">&gt;&lt;\/video&gt;<\/span>\n<span class=\"tag\">&lt;br<\/span> <span class=\"tag\">\/&gt;<\/span>\n<span class=\"tag\">&lt;button<\/span> <span class=\"atn\">onclick<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"<\/span><span class=\"pln\">showFriendsFace<\/span><span class=\"pun\">()<\/span><span class=\"atv\">\"<\/span> <span class=\"atn\">type<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"button\"<\/span> <span class=\"atn\">class<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"btn btn-primary btn-lg\"<\/span><span class=\"tag\">&gt;&lt;span<\/span> <span class=\"atn\">class<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"glyphicon glyphicon-facetime-video\"<\/span> <span class=\"atn\">aria-hidden<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"true\"<\/span><span class=\"tag\">&gt;&lt;\/span&gt;<\/span><span class=\"pln\"> Call<\/span><span class=\"tag\">&lt;\/button&gt;<\/span>\n<span class=\"tag\">&lt;script<\/span> <span class=\"atn\">type<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"text\/javascript\"<\/span><span class=\"tag\">&gt;<\/span><span class=\"pln\">\nvar config = {\napiKey: \" <\/span><span class=\"tag\">&lt;API_KEY&gt;<\/span><span class=\"pln\">\",\nauthDomain: \" <\/span><span class=\"tag\">&lt;PROJECT_ID&gt;<\/span><span class=\"pln\">.firebaseapp.com\",\ndatabaseURL: \" https:\/\/<\/span><span class=\"tag\">&lt;DATABASE_NAME&gt;<\/span><span class=\"pln\">.firebaseio.com\",\nprojectId: \" <\/span><span class=\"tag\">&lt;PROJECT_ID&gt;<\/span><span class=\"pln\">\",\nstorageBucket: \" <\/span><span class=\"tag\">&lt;BUCKET&gt;<\/span><span class=\"pln\">.appspot.com\",\nmessagingSenderId: \" <\/span><span class=\"tag\">&lt;SENDER_ID&gt;<\/span><span class=\"pln\">\"\n};\nfirebase.initializeApp(config);\nvar database = firebase.database().ref();\nvar yourVideo = document.getElementById(\"yourVideo\");\nvar friendsVideo = document.getElementById(\"friendsVideo\");\nvar yourId = Math.floor(Math.random()*1000000000);\nvar servers = {'iceServers': [{'urls': 'stun:stun.services.mozilla.com'}, {'urls': 'stun:stun.l.google.com:19302'}, {'urls': 'turn:numb.viagenie.ca','credential': 'webrtc','username': 'websitebeaver@mail.com'}]};\nvar pc = new RTCPeerConnection(servers);\npc.onicecandidate = (event =&gt; event.candidate?sendMessage(yourId, JSON.stringify({'ice': event.candidate})):console.log(\"Sent All Ice\") );\npc.onaddstream = (event =&gt; friendsVideo.srcObject = event.stream);\nfunction sendMessage(senderId, data) {\nvar msg = database.push({ sender: senderId, message: data });\nmsg.remove();\n}\nfunction readMessage(data) {\nvar msg = JSON.parse(data.val().message);\nvar sender = data.val().sender;\nif (sender != yourId) {\nif (msg.ice != undefined)\n{\npc.addIceCandidate(new RTCIceCandidate(msg.ice));\n}\nelse if (msg.sdp.type == \"offer\")\n{\nvar r = confirm(\"Answer call?\");\nif (r == true) {\npc.setRemoteDescription(new RTCSessionDescription(msg.sdp))\n.then(() =&gt; pc.createAnswer())\n.then(answer =&gt; pc.setLocalDescription(answer))\n.then(() =&gt; sendMessage(yourId, JSON.stringify({'sdp': pc.localDescription})));\n} else {\nalert(\"Rejected the call\");\n}\n}\nelse if (msg.sdp.type == \"answer\")\n{\npc.setRemoteDescription(new RTCSessionDescription(msg.sdp));\n}\n}\n};\ndatabase.on('child_added', readMessage);\nfunction showMyFace() {\nnavigator.mediaDevices.getUserMedia({audio:true, video:true})\n.then(stream =&gt; yourVideo.srcObject = stream)\n.then(stream =&gt; pc.addStream(stream));\n}\nfunction showFriendsFace() {\npc.createOffer()\n.then(offer =&gt; pc.setLocalDescription(offer) )\n.then(() =&gt; sendMessage(yourId, JSON.stringify({'sdp': pc.localDescription})) );\n}\n\/script&gt;\n<\/span><span class=\"tag\">&lt;\/body&gt;<\/span>\n<span class=\"tag\">&lt;\/html&gt;<\/span><\/pre>\n\n\n<h2 id=\"Nh\u1eefng_c\u00e2u_h\u1ecfi_th\u01b0\u1eddng_g\u1eb7p_v\u1ec1_WebRTC\"><b>Nh\u1eefng c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 WebRTC<\/b><\/h2>\n\n\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"WebRTC_d\u00f9ng_cho_trang_web_c\u00f3_\u0111u\u00f4i_HTML_hay_PHP?\">WebRTC d\u00f9ng cho trang web c\u00f3 \u0111u\u00f4i HTML hay PHP?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>V\u1edbi kh\u1ea3 n\u0103ng h\u1ed7 tr\u1ee3 \u0111a n\u1ec1n t\u1ea3ng v\u00e0 \u0111a ng\u00f4n ng\u1eef, WebRTC c\u00f3 th\u1ec3 h\u1ed7 tr\u1ee3 cho trang web c\u00f3 \u0111u\u00f4i HTML l\u1eabn PHP.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"WebRTC_c\u00f3_h\u1ed7_tr\u1ee3_cho_native_app_hay_kh\u00f4ng?\">WebRTC c\u00f3 h\u1ed7 tr\u1ee3 cho native app hay kh\u00f4ng?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p><span style=\"font-weight: 400;\">C\u00e2u tr\u1ea3 l\u1eddi l\u00e0: C\u00f3!<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">B\u1ea1n c\u00f3 th\u1ec3 x\u00e2y d\u1ef1ng library cho c\u00e1c n\u1ec1n t\u1ea3ng Windows, Mac OS X, Linux, Android v\u00e0 iOS.&nbsp;&nbsp;<\/span><\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"WebRTC_c\u00f3_an_to\u00e0n_kh\u00f4ng?_\">WebRTC c\u00f3 an to\u00e0n kh\u00f4ng? <\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>WebRTC \u0111\u01b0\u1ee3c xem l\u00e0 b\u01b0\u1edbc ti\u1ebfp n\u1ed1i cho Adobe Flash v\u00e0 s\u1eed d\u1ee5ng \u0111\u1ec3 giao ti\u1ebfp theo th\u1eddi gian th\u1ef1c tr\u00ean tr\u00ecnh duy\u1ec7t. May m\u1eafn thay, WebRTC kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t ph\u1ea7n m\u1ec1m c\u00e0i th\u00eam t\u1eeb b\u00ean ngo\u00e0i, n\u00f3 s\u1edf h\u1eefu t\u00ednh n\u0103ng b\u1ea3o m\u1eadt t\u1ed1t. Do \u0111\u00f3, WebRTC kh\u00f4ng g\u1eb7p c\u00e1c tr\u01b0\u1eddng h\u1ee3p b\u1ecb t\u1ea5n c\u00f4ng b\u1edfi hacker hay malware. WebRTC kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t Plugin nh\u01b0 Flash. N\u00f3 l\u00e0 m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c h\u00e0m API \u0111\u01b0\u1ee3c l\u1eadp tr\u00ecnh vi\u00ean s\u1eed d\u1ee5ng n\u00ean kh\u00f3 b\u1ecb khai th\u00e1c h\u01a1n r\u1ea5t nhi\u1ec1u so v\u1edbi Flash.&nbsp;<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"WebRTC_c\u00f3_cho_ph\u00e9p_ng\u01b0\u1eddi_d\u00f9ng_chia_s\u1ebb_m\u00e0n_h\u00ecnh,_nh\u1eafn_tin_l\u00fac_g\u1ecdi_video_kh\u00f4ng?_\">WebRTC c\u00f3 cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng chia s\u1ebb m\u00e0n h\u00ecnh, nh\u1eafn tin l\u00fac g\u1ecdi video kh\u00f4ng? <\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>WebRTC c\u00f3 cho ph\u00e9p b\u1ea1n chia s\u1ebb m\u00e0n h\u00ecnh. Ng\u01b0\u1eddi d\u00f9ng ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 t\u00edch h\u1ee3p t\u00ednh n\u0103ng n\u00e0y trong \u1ee9ng d\u1ee5ng khi d\u00f9ng c\u00f4ng ngh\u1ec7 WebRTC.&nbsp;<\/p>\n\n\n<p>H\u01a1n n\u1eefa, WebRTC c\u0169ng cho ph\u00e9p b\u1ea1n nh\u1eafn tin trong l\u00fac g\u1ecdi video tr\u1ef1c tuy\u1ebfn.&nbsp;<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"Nh\u1eefng_tr\u1edf_ng\u1ea1i_c\u1ee7a_WebRTC_l\u00e0_g\u00ec?_\">Nh\u1eefng tr\u1edf ng\u1ea1i c\u1ee7a WebRTC l\u00e0 g\u00ec? <\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p>Hi\u1ec7n t\u1ea1i, WebRTC ch\u1ec9 m\u1edbi ph\u00e1t tri\u1ec3n \u1edf giai \u0111o\u1ea1n nh\u00e1p ch\u1ee9 ch\u01b0a ho\u00e0n t\u1ea5t. Do \u0111\u00f3 vi\u1ec7c h\u1ed7 tr\u1ee3 cho c\u00e1c tr\u00ecnh l\u1eadp vi\u00ean khi c\u1ea7n gi\u00fap \u0111\u1ee1 c\u00f2n nhi\u1ec1u kh\u00f3 kh\u0103n, trong khi t\u00e0i li\u1ec7u th\u00ec ch\u01b0a th\u1eadt s\u1ef1 \u0111\u1ea7y \u0111\u1ee7.&nbsp;<\/p>\n\n\n<p>B\u00ean c\u1ea1nh \u0111\u00f3, nh\u1eefng h\u00e3ng tr\u00ecnh duy\u1ec7t ch\u01b0a th\u1ed1ng nh\u1ea5t v\u1edbi nhau l\u00e0 chu\u1ea9n video n\u00e0o s\u1ebd \u0111\u01b0\u1ee3c d\u00f9ng cho WebRTC. Google v\u00e0 Mozilla th\u00ec mu\u1ed1n x\u00e0i VP8 ho\u1eb7c VP9, m\u1ed9t codec video do ch\u00ednh Google ph\u00e1t tri\u1ec3n theo m\u00f4 h\u00ecnh m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 ai c\u0169ng c\u00f3 th\u1ec3 x\u00e0i \u0111\u01b0\u1ee3c m\u00e0 kh\u00f4ng t\u1ed1n chi ph\u00ed. Trong khi \u0111\u00f3, Microsoft v\u00e0 m\u1ed9t s\u1ed1 c\u00f4ng ty kh\u00e1c th\u00ec mu\u1ed1n \u0111\u1ec1 xu\u1ea5t x\u00e0i H.264 ho\u1eb7c H.265 cho WebRTC, hi\u1ec7n \u0111ang l\u00e0 codec \u0111\u01b0\u1ee3c x\u00e0i ph\u1ed5 bi\u1ebfn nh\u1ea5t hi\u1ec7n nay tr\u00ean th\u1ebf gi\u1edbi Internet. Tuy nhi\u00ean, H.264 l\u1ea1i thu\u1ed9c quy\u1ec1n s\u1edf h\u1eefu c\u1ee7a hi\u1ec7p h\u1ed9i MPEG LA v\u00e0 ph\u1ea3i tr\u1ea3 ph\u00ed b\u1ea3n quy\u1ec1n \u0111\u1ec3 s\u1eed d\u1ee5ng.&nbsp;<\/p>\n\n\n<p>S\u1ed1 l\u01b0\u1ee3ng h\u00e0m API WebRTC \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 trong c\u00e1c tr\u00ecnh duy\u1ec7t r\u1ea5t kh\u00e1c nhau. \u0110i\u1ec1u n\u00e0y l\u00e0m gi\u1ea3m \u0111i kh\u1ea3 n\u0103ng ho\u1ea1t \u0111\u1ed9ng c\u1ee7a c\u00e1c \u1ee9ng d\u1ee5ng WebRTC, l\u1eadp tr\u00ecnh ph\u1ea3i t\u1ed1n nhi\u1ec1u c\u00f4ng s\u1ee9c \u0111\u1ec3 tinh ch\u1ec9nh l\u1ea1i website ho\u1eb7c \u1ee9ng d\u1ee5ng c\u1ee7a m\u00ecnh cho ph\u00f9 h\u1ee3p v\u1edbi tr\u00ecnh duy\u1ec7t. V\u00ec th\u1ebf, n\u00f3 l\u00e0m gi\u1ea3m \u0111i ph\u1ea7n n\u00e0o l\u1ee3i \u00edch c\u1ed1t l\u00f5i c\u1ee7a WebRTC.&nbsp;<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\n<script type=\"application\/ld+json\">\n\t{\n\t\t\"@context\": \"https:\/\/schema.org\",\n\t\t\"@type\": \"FAQPage\",\n\t\t\"mainEntity\": [\n\t\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"WebRTC d\u00f9ng cho trang web c\u00f3 \u0111u\u00f4i HTML hay PHP?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>V\u1edbi kh\u1ea3 n\u0103ng h\u1ed7 tr\u1ee3 \u0111a n\u1ec1n t\u1ea3ng v\u00e0 \u0111a ng\u00f4n ng\u1eef, WebRTC c\u00f3 th\u1ec3 h\u1ed7 tr\u1ee3 cho trang web c\u00f3 \u0111u\u00f4i HTML l\u1eabn PHP.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"WebRTC c\u00f3 h\u1ed7 tr\u1ee3 cho native app hay kh\u00f4ng?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>C\u00e2u tr\u1ea3 l\u1eddi l\u00e0: C\u00f3!<\/p><p>B\u1ea1n c\u00f3 th\u1ec3 x\u00e2y d\u1ef1ng library cho c\u00e1c n\u1ec1n t\u1ea3ng Windows, Mac OS X, Linux, Android v\u00e0 iOS.&nbsp;&nbsp;<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"WebRTC c\u00f3 an to\u00e0n kh\u00f4ng? \",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>WebRTC \u0111\u01b0\u1ee3c xem l\u00e0 b\u01b0\u1edbc ti\u1ebfp n\u1ed1i cho Adobe Flash v\u00e0 s\u1eed d\u1ee5ng \u0111\u1ec3 giao ti\u1ebfp theo th\u1eddi gian th\u1ef1c tr\u00ean tr\u00ecnh duy\u1ec7t. May m\u1eafn thay, WebRTC kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t ph\u1ea7n m\u1ec1m c\u00e0i th\u00eam t\u1eeb b\u00ean ngo\u00e0i, n\u00f3 s\u1edf h\u1eefu t\u00ednh n\u0103ng b\u1ea3o m\u1eadt t\u1ed1t. Do \u0111\u00f3, WebRTC kh\u00f4ng g\u1eb7p c\u00e1c tr\u01b0\u1eddng h\u1ee3p b\u1ecb t\u1ea5n c\u00f4ng b\u1edfi hacker hay malware. WebRTC kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t Plugin nh\u01b0 Flash. N\u00f3 l\u00e0 m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c h\u00e0m API \u0111\u01b0\u1ee3c l\u1eadp tr\u00ecnh vi\u00ean s\u1eed d\u1ee5ng n\u00ean kh\u00f3 b\u1ecb khai th\u00e1c h\u01a1n r\u1ea5t nhi\u1ec1u so v\u1edbi Flash.&nbsp;<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"WebRTC c\u00f3 cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng chia s\u1ebb m\u00e0n h\u00ecnh, nh\u1eafn tin l\u00fac g\u1ecdi video kh\u00f4ng? \",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>WebRTC c\u00f3 cho ph\u00e9p b\u1ea1n chia s\u1ebb m\u00e0n h\u00ecnh. Ng\u01b0\u1eddi d\u00f9ng ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 t\u00edch h\u1ee3p t\u00ednh n\u0103ng n\u00e0y trong \u1ee9ng d\u1ee5ng khi d\u00f9ng c\u00f4ng ngh\u1ec7 WebRTC.&nbsp;<\/p><p>H\u01a1n n\u1eefa, WebRTC c\u0169ng cho ph\u00e9p b\u1ea1n nh\u1eafn tin trong l\u00fac g\u1ecdi video tr\u1ef1c tuy\u1ebfn.&nbsp;<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"Nh\u1eefng tr\u1edf ng\u1ea1i c\u1ee7a WebRTC l\u00e0 g\u00ec? \",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>Hi\u1ec7n t\u1ea1i, WebRTC ch\u1ec9 m\u1edbi ph\u00e1t tri\u1ec3n \u1edf giai \u0111o\u1ea1n nh\u00e1p ch\u1ee9 ch\u01b0a ho\u00e0n t\u1ea5t. Do \u0111\u00f3 vi\u1ec7c h\u1ed7 tr\u1ee3 cho c\u00e1c tr\u00ecnh l\u1eadp vi\u00ean khi c\u1ea7n gi\u00fap \u0111\u1ee1 c\u00f2n nhi\u1ec1u kh\u00f3 kh\u0103n, trong khi t\u00e0i li\u1ec7u th\u00ec ch\u01b0a th\u1eadt s\u1ef1 \u0111\u1ea7y \u0111\u1ee7.&nbsp;<\/p><p>B\u00ean c\u1ea1nh \u0111\u00f3, nh\u1eefng h\u00e3ng tr\u00ecnh duy\u1ec7t ch\u01b0a th\u1ed1ng nh\u1ea5t v\u1edbi nhau l\u00e0 chu\u1ea9n video n\u00e0o s\u1ebd \u0111\u01b0\u1ee3c d\u00f9ng cho WebRTC. Google v\u00e0 Mozilla th\u00ec mu\u1ed1n x\u00e0i VP8 ho\u1eb7c VP9, m\u1ed9t codec video do ch\u00ednh Google ph\u00e1t tri\u1ec3n theo m\u00f4 h\u00ecnh m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 ai c\u0169ng c\u00f3 th\u1ec3 x\u00e0i \u0111\u01b0\u1ee3c m\u00e0 kh\u00f4ng t\u1ed1n chi ph\u00ed. Trong khi \u0111\u00f3, Microsoft v\u00e0 m\u1ed9t s\u1ed1 c\u00f4ng ty kh\u00e1c th\u00ec mu\u1ed1n \u0111\u1ec1 xu\u1ea5t x\u00e0i H.264 ho\u1eb7c H.265 cho WebRTC, hi\u1ec7n \u0111ang l\u00e0 codec \u0111\u01b0\u1ee3c x\u00e0i ph\u1ed5 bi\u1ebfn nh\u1ea5t hi\u1ec7n nay tr\u00ean th\u1ebf gi\u1edbi Internet. Tuy nhi\u00ean, H.264 l\u1ea1i thu\u1ed9c quy\u1ec1n s\u1edf h\u1eefu c\u1ee7a hi\u1ec7p h\u1ed9i MPEG LA v\u00e0 ph\u1ea3i tr\u1ea3 ph\u00ed b\u1ea3n quy\u1ec1n \u0111\u1ec3 s\u1eed d\u1ee5ng.&nbsp;<\/p><p>S\u1ed1 l\u01b0\u1ee3ng h\u00e0m API WebRTC \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 trong c\u00e1c tr\u00ecnh duy\u1ec7t r\u1ea5t kh\u00e1c nhau. \u0110i\u1ec1u n\u00e0y l\u00e0m gi\u1ea3m \u0111i kh\u1ea3 n\u0103ng ho\u1ea1t \u0111\u1ed9ng c\u1ee7a c\u00e1c \u1ee9ng d\u1ee5ng WebRTC, l\u1eadp tr\u00ecnh ph\u1ea3i t\u1ed1n nhi\u1ec1u c\u00f4ng s\u1ee9c \u0111\u1ec3 tinh ch\u1ec9nh l\u1ea1i website ho\u1eb7c \u1ee9ng d\u1ee5ng c\u1ee7a m\u00ecnh cho ph\u00f9 h\u1ee3p v\u1edbi tr\u00ecnh duy\u1ec7t. V\u00ec th\u1ebf, n\u00f3 l\u00e0m gi\u1ea3m \u0111i ph\u1ea7n n\u00e0o l\u1ee3i \u00edch c\u1ed1t l\u00f5i c\u1ee7a WebRTC.&nbsp;<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t]\n\t}\n<\/script>\n\n\n<p><span style=\"font-weight: 400;\">M\u1ecdi th\u1eafc m\u1eafc v\u00e0 g\u00f3p \u00fd li\u00ean quan, xin vui l\u00f2ng<\/span><a href=\"https:\/\/tinohost.com\/lien-he\/\" target=\"_blank\" rel=\"noopener\"> <span style=\"font-weight: 400;\">li\u00ean h\u1ec7 ngay TinoHost<\/span><\/a><span style=\"font-weight: 400;\"> \u0111\u1ec3 \u0111\u01b0\u1ee3c t\u01b0 v\u1ea5n chi ti\u1ebft ho\u1eb7c<\/span><a href=\"https:\/\/www.facebook.com\/tinohostdotcom\/\" rel=\"nofollow noopener\" target=\"_blank\"> <span style=\"font-weight: 400;\">Fanpage<\/span><\/a><span style=\"font-weight: 400;\"> \u0111\u1ec3 c\u1eadp nh\u1eadt nh\u1eefng th\u00f4ng tin m\u1edbi nh\u1ea5t nh\u00e9!<\/span><\/p>\n\n\n<p><span style=\"font-weight: 400;\">V\u1edbi b\u1ec1 d\u00e0y kinh nghi\u1ec7m h\u01a1n 5 n\u0103m cung c\u1ea5p hosting, d\u1ecbch v\u1ee5 cho thu\u00ea m\u00e1y ch\u1ee7, c\u00e1c d\u1ecbch v\u1ee5 li\u00ean quan \u0111\u1ebfn t\u00ean mi\u1ec1n v\u00e0 b\u1ea3o m\u1eadt website, h\u00e3y \u0111\u1ec3 TinoHost \u0111\u1ed3ng h\u00e0nh c\u00f9ng b\u1ea1n tr\u00ean con \u0111\u01b0\u1eddng kh\u1eb3ng \u0111\u1ecbnh th\u01b0\u01a1ng hi\u1ec7u tr\u00ean b\u1ea3n \u0111\u1ed3 c\u00f4ng ngh\u1ec7 to\u00e0n c\u1ea7u!<\/span><\/p>\n\n\n<p><b><\/b><\/p>\n\n\n<ul class=\"wp-block-list\"><li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"><\/span><span style=\"font-weight: 400;\"><br \/><\/span><span style=\"font-weight: 400;\"><\/span><\/li><li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"><\/span><span style=\"font-weight: 400;\"><br \/><\/span><span style=\"font-weight: 400;\"><\/span><\/li><li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\"><\/span><\/li><li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Website: <\/span><a href=\"https:\/\/tinohost.com\/?aff=447\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\"><\/span><\/a><\/li><\/ul>\n\n","protected":false},"excerpt":{"rendered":"<p>\u201cWebRTC l\u00e0 kh\u1ea3 n\u0103ng giao ti\u1ebfp tr\u1ef1c ti\u1ebfp v\u1edbi m\u1ed9t ai \u0111\u00f3 ho\u1eb7c m\u1ed9t c\u00e1i g\u00ec \u0111\u00f3 nh\u01b0 th\u1ec3 b\u1ea1n \u0111ang \u1edf ngay b\u00ean c\u1ea1nh v\u1eady. WebRTC l\u1ea5p \u0111\u1ea7y kho\u1ea3ng tr\u1ed1ng t\u1edbi h\u1ea1n trong n\u1ec1n t\u1ea3ng web khi b\u1ea1n c\u00f3 th\u1ec3 giao ti\u1ebfp trong th\u1eddi gian th\u1ef1c ch\u1ec9 b\u1eb1ng vi\u1ec7c t\u1ea3i m\u1ed9t trang web,\u201d Justin [&hellip;]<\/p>\n","protected":false},"author":19,"featured_media":16020,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5404],"tags":[5629],"class_list":["post-7196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-webmasters","tag-webrtc"],"_links":{"self":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts\/7196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/comments?post=7196"}],"version-history":[{"count":0,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts\/7196\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media\/16020"}],"wp:attachment":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media?parent=7196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/categories?post=7196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/tags?post=7196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}