CINXE.COM

WebRTC API - Web API | MDN

<!doctype html><html lang="en-US" prefix="og: https://ogp.me/ns#"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><link rel="icon" href="https://developer.mozilla.org/favicon-48x48.bc390275e955dacb2e65.png"/><link rel="apple-touch-icon" href="https://developer.mozilla.org/apple-touch-icon.528534bba673c38049c2.png"/><meta name="theme-color" content="#ffffff"/><link rel="manifest" href="https://developer.mozilla.org/manifest.f42880861b394dd4dc9b.json"/><link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="MDN Web Docs"/><title>WebRTC API - Web API | MDN</title><link rel="alternate" title="WebRTC API" href="https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API" hrefLang="en"/><link rel="alternate" title="WebRTC API" href="https://developer.mozilla.org/de/docs/Web/API/WebRTC_API" hrefLang="de"/><link rel="alternate" title="API de WebRTC" href="https://developer.mozilla.org/es/docs/Web/API/WebRTC_API" hrefLang="es"/><link rel="alternate" title="L&#x27;API WebRTC" href="https://developer.mozilla.org/fr/docs/Web/API/WebRTC_API" hrefLang="fr"/><link rel="alternate" title="WebRTC API" href="https://developer.mozilla.org/ja/docs/Web/API/WebRTC_API" hrefLang="ja"/><link rel="alternate" title="WebRTC API" href="https://developer.mozilla.org/ko/docs/Web/API/WebRTC_API" hrefLang="ko"/><link rel="alternate" title="WebRTC API" href="https://developer.mozilla.org/pt-BR/docs/Web/API/WebRTC_API" hrefLang="pt"/><link rel="alternate" title="WebRTC API" href="https://developer.mozilla.org/ru/docs/Web/API/WebRTC_API" hrefLang="ru"/><link rel="alternate" title="WebRTC API" href="https://developer.mozilla.org/zh-CN/docs/Web/API/WebRTC_API" hrefLang="zh"/><link rel="preload" as="font" type="font/woff2" href="/static/media/Inter.var.c2fe3cb2b7c746f7966a.woff2" crossorigin=""/><link rel="alternate" type="application/rss+xml" title="MDN Blog RSS Feed" href="https://developer.mozilla.org/en-US/blog/rss.xml" hrefLang="en"/><meta name="description" content="WebRTC(Web 实时通信)是一种使 Web 应用程序和站点能够捕获和选择性地流式传输音频或视频媒体,以及在浏览器之间交换任意数据的而无需中间件的技术。WebRTC 的一系列标准使得在不需要用户安装插件或任何其他第三方软件的情况下,可以实现点对点数据共享和电话会议。"/><meta property="og:url" content="https://developer.mozilla.org/zh-CN/docs/Web/API/WebRTC_API"/><meta property="og:title" content="WebRTC API - Web API | MDN"/><meta property="og:type" content="website"/><meta property="og:locale" content="zh_CN"/><meta property="og:description" content="WebRTC(Web 实时通信)是一种使 Web 应用程序和站点能够捕获和选择性地流式传输音频或视频媒体,以及在浏览器之间交换任意数据的而无需中间件的技术。WebRTC 的一系列标准使得在不需要用户安装插件或任何其他第三方软件的情况下,可以实现点对点数据共享和电话会议。"/><meta property="og:image" content="https://developer.mozilla.org/mdn-social-share.d893525a4fb5fb1f67a2.png"/><meta property="og:image:type" content="image/png"/><meta property="og:image:height" content="1080"/><meta property="og:image:width" content="1920"/><meta property="og:image:alt" content="The MDN Web Docs logo, featuring a blue accent color, displayed on a solid black background."/><meta property="og:site_name" content="MDN Web Docs"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:creator" content="MozDevNet"/><link rel="canonical" href="https://developer.mozilla.org/zh-CN/docs/Web/API/WebRTC_API"/><style media="print">.article-actions-container,.document-toc-container,.language-menu,.main-menu-toggle,.on-github,.page-footer,.place,.sidebar,.top-banner,.top-navigation-main,ul.prev-next{display:none!important}.main-page-content,.main-page-content pre{padding:2px}.main-page-content pre{border-left-width:2px}</style><script src="/static/js/gtag.js" defer=""></script><script defer="" src="/static/js/main.1ac238e4.js"></script><link href="/static/css/main.4634a21c.css" rel="stylesheet"/></head><body><script>if(document.body.addEventListener("load",(t=>{t.target.classList.contains("interactive")&&t.target.setAttribute("data-readystate","complete")}),{capture:!0}),window&&document.documentElement){const t={light:"#ffffff",dark:"#1b1b1b"};try{const e=window.localStorage.getItem("theme");e&&(document.documentElement.className=e,document.documentElement.style.backgroundColor=t[e]);const o=window.localStorage.getItem("nop");o&&(document.documentElement.dataset.nop=o)}catch(t){console.warn("Unable to read theme from localStorage",t)}}</script><div id="root"><ul id="nav-access" class="a11y-nav"><li><a id="skip-main" href="#content">Skip to main content</a></li><li><a id="skip-search" href="#top-nav-search-input">Skip to search</a></li><li><a id="skip-select-language" href="#languages-switcher-button">Skip to select language</a></li></ul><div class="page-wrapper category-api document-page"><div class="top-banner loading"><section class="place top container"></section></div><div class="sticky-header-container"><header class="top-navigation "><div class="container "><div class="top-navigation-wrap"><a href="/zh-CN/" class="logo" aria-label="MDN homepage"><svg id="mdn-docs-logo" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 694.9 104.4" style="enable-background:new 0 0 694.9 104.4" xml:space="preserve" role="img"><title>MDN Web Docs</title><path d="M40.3 0 11.7 92.1H0L28.5 0h11.8zm10.4 0v92.1H40.3V0h10.4zM91 0 62.5 92.1H50.8L79.3 0H91zm10.4 0v92.1H91V0h10.4z" class="logo-m"></path><path d="M627.9 95.6h67v8.8h-67v-8.8z" class="logo-_"></path><path d="M367 42h-4l-10.7 30.8h-5.5l-10.8-26h-.4l-10.5 26h-5.2L308.7 42h-3.8v-5.6H323V42h-6.5l6.8 20.4h.4l10.3-26h4.7l11.2 26h.5l5.7-20.3h-6.2v-5.6H367V42zm34.9 20c-.4 3.2-2 5.9-4.7 8.2-2.8 2.3-6.5 3.4-11.3 3.4-5.4 0-9.7-1.6-13.1-4.7-3.3-3.2-5-7.7-5-13.7 0-5.7 1.6-10.3 4.7-14s7.4-5.5 12.9-5.5c5.1 0 9.1 1.6 11.9 4.7s4.3 6.9 4.3 11.3c0 1.5-.2 3-.5 4.7h-25.6c.3 7.7 4 11.6 10.9 11.6 2.9 0 5.1-.7 6.5-2 1.5-1.4 2.5-3 3-4.9l6 .9zM394 51.3c.2-2.4-.4-4.7-1.8-6.9s-3.8-3.3-7-3.3c-3.1 0-5.3 1-6.9 3-1.5 2-2.5 4.4-2.8 7.2H394zm51 2.4c0 5-1.3 9.5-4 13.7s-6.9 6.2-12.7 6.2c-6 0-10.3-2.2-12.7-6.7-.1.4-.2 1.4-.4 2.9s-.3 2.5-.4 2.9h-7.3c.3-1.7.6-3.5.8-5.3.3-1.8.4-3.7.4-5.5V22.3h-6v-5.6H416v27c1.1-2.2 2.7-4.1 4.7-5.7 2-1.6 4.8-2.4 8.4-2.4 4.6 0 8.4 1.6 11.4 4.7 3 3.2 4.5 7.6 4.5 13.4zm-7.7.6c0-4.2-1-7.4-3-9.5-2-2.2-4.4-3.3-7.4-3.3-3.4 0-6 1.2-8 3.7-1.9 2.4-2.9 5-3 7.7V57c0 3 1 5.6 3 7.7s4.5 3.1 7.6 3.1c3.6 0 6.3-1.3 8.1-3.9 1.8-2.7 2.7-5.9 2.7-9.6zm69.2 18.5h-13.2v-7.2c-1.2 2.2-2.8 4.1-4.9 5.6-2.1 1.6-4.8 2.4-8.3 2.4-4.8 0-8.7-1.6-11.6-4.9-2.9-3.2-4.3-7.7-4.3-13.3 0-5 1.3-9.6 4-13.7 2.6-4.1 6.9-6.2 12.8-6.2 5.7 0 9.8 2.2 12.3 6.5V22.3h-8.6v-5.6h15.8v50.6h6v5.5zM493.2 56v-4.4c-.1-3-1.2-5.5-3.2-7.3s-4.4-2.8-7.2-2.8c-3.6 0-6.3 1.3-8.2 3.9-1.9 2.6-2.8 5.8-2.8 9.6 0 4.1 1 7.3 3 9.5s4.5 3.3 7.4 3.3c3.2 0 5.8-1.3 7.8-3.8 2.1-2.6 3.1-5.3 3.2-8zm53.1-1.4c0 5.6-1.8 10.2-5.3 13.7s-8.2 5.3-13.9 5.3-10.1-1.7-13.4-5.1c-3.3-3.4-5-7.9-5-13.5 0-5.3 1.6-9.9 4.7-13.7 3.2-3.8 7.9-5.7 14.2-5.7s11 1.9 14.1 5.7c3 3.7 4.6 8.1 4.6 13.3zm-7.7-.2c0-4-1-7.2-3-9.5s-4.8-3.5-8.2-3.5c-3.6 0-6.4 1.2-8.3 3.7s-2.9 5.6-2.9 9.5c0 3.7.9 6.8 2.8 9.4 1.9 2.6 4.6 3.9 8.3 3.9 3.6 0 6.4-1.3 8.4-3.8 1.9-2.6 2.9-5.8 2.9-9.7zm45 5.8c-.4 3.2-1.9 6.3-4.4 9.1-2.5 2.9-6.4 4.3-11.8 4.3-5.2 0-9.4-1.6-12.6-4.8-3.2-3.2-4.8-7.7-4.8-13.7 0-5.5 1.6-10.1 4.7-13.9 3.2-3.8 7.6-5.7 13.2-5.7 2.3 0 4.6.3 6.7.8 2.2.5 4.2 1.5 6.2 2.9l1.5 9.5-5.9.7-1.3-6.1c-2.1-1.2-4.5-1.8-7.2-1.8-3.5 0-6.1 1.2-7.7 3.7-1.7 2.5-2.5 5.7-2.5 9.6 0 4.1.9 7.3 2.7 9.5 1.8 2.3 4.4 3.4 7.8 3.4 5.2 0 8.2-2.9 9.2-8.8l6.2 1.3zm34.7 1.9c0 3.6-1.5 6.5-4.6 8.5s-7 3-11.7 3c-5.7 0-10.6-1.2-14.6-3.6l1.2-8.8 5.7.6-.2 4.7c1.1.5 2.3.9 3.6 1.1s2.6.3 3.9.3c2.4 0 4.5-.4 6.5-1.3 1.9-.9 2.9-2.2 2.9-4.1 0-1.8-.8-3.1-2.3-3.8s-3.5-1.3-5.8-1.7-4.6-.9-6.9-1.4c-2.3-.6-4.2-1.6-5.7-2.9-1.6-1.4-2.3-3.5-2.3-6.3 0-4.1 1.5-6.9 4.6-8.5s6.4-2.4 9.9-2.4c2.6 0 5 .3 7.2.9 2.2.6 4.3 1.4 6.1 2.4l.8 8.8-5.8.7-.8-5.7c-2.3-1-4.7-1.6-7.2-1.6-2.1 0-3.7.4-5.1 1.1-1.3.8-2 2-2 3.8 0 1.7.8 2.9 2.3 3.6 1.5.7 3.4 1.2 5.7 1.6 2.2.4 4.5.8 6.7 1.4 2.2.6 4.1 1.6 5.7 3 1.4 1.6 2.2 3.7 2.2 6.6zM197.6 73.2h-17.1v-5.5h3.8V51.9c0-3.7-.7-6.3-2.1-7.9-1.4-1.6-3.3-2.3-5.7-2.3-3.2 0-5.6 1.1-7.2 3.4s-2.4 4.6-2.5 6.9v15.6h6v5.5h-17.1v-5.5h3.8V51.9c0-3.8-.7-6.4-2.1-7.9-1.4-1.5-3.3-2.3-5.6-2.3-3.2 0-5.5 1.1-7.2 3.3-1.6 2.2-2.4 4.5-2.5 6.9v15.8h6.9v5.5h-20.2v-5.5h6V42.4h-6.1v-5.6h13.4v6.4c1.2-2.1 2.7-3.8 4.7-5.2 2-1.3 4.4-2 7.3-2s5.3.7 7.5 2.1c2.2 1.4 3.7 3.5 4.5 6.4 1.1-2.5 2.7-4.5 4.9-6.1s4.8-2.4 7.9-2.4c3.5 0 6.5 1.1 8.9 3.3s3.7 5.6 3.7 10.2v18.2h6.1v5.5zm42.5 0h-13.2V66c-1.2 2.2-2.8 4.1-4.9 5.6-2.1 1.6-4.8 2.4-8.3 2.4-4.8 0-8.7-1.6-11.6-4.9-2.9-3.2-4.3-7.7-4.3-13.3 0-5 1.3-9.6 4-13.7 2.6-4.1 6.9-6.2 12.8-6.2s9.8 2.2 12.3 6.5V22.7h-8.6v-5.6h15.8v50.6h6v5.5zm-13.3-16.8V52c-.1-3-1.2-5.5-3.2-7.3s-4.4-2.8-7.2-2.8c-3.6 0-6.3 1.3-8.2 3.9-1.9 2.6-2.8 5.8-2.8 9.6 0 4.1 1 7.3 3 9.5s4.5 3.3 7.4 3.3c3.2 0 5.8-1.3 7.8-3.8 2.1-2.6 3.1-5.3 3.2-8zm61.5 16.8H269v-5.5h6V51.9c0-3.7-.7-6.3-2.2-7.9-1.4-1.6-3.4-2.3-5.7-2.3-3.1 0-5.6 1-7.4 3s-2.8 4.4-2.9 7v15.9h6v5.5h-19.3v-5.5h6V42.4h-6.2v-5.6h13.6V43c2.6-4.6 6.8-6.9 12.7-6.9 3.6 0 6.7 1.1 9.2 3.3s3.7 5.6 3.7 10.2v18.2h6v5.4h-.2z" class="logo-text"></path></svg></a><button title="Open main menu" type="button" class="button action has-icon main-menu-toggle" aria-haspopup="menu" aria-label="Open main menu" aria-expanded="false"><span class="button-wrap"><span class="icon icon-menu "></span><span class="visually-hidden">Open main menu</span></span></button></div><div class="top-navigation-main"><nav class="main-nav" aria-label="Main menu"><ul class="main-menu nojs"><li class="top-level-entry-container active"><button type="button" id="references-button" class="top-level-entry menu-toggle" aria-controls="references-menu" aria-expanded="false">References</button><a href="/zh-CN/docs/Web" class="top-level-entry">References</a><ul id="references-menu" class="submenu references hidden inline-submenu-lg" aria-labelledby="references-button"><li class="apis-link-container mobile-only "><a href="/zh-CN/docs/Web" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Overview / Web Technology</div><p class="submenu-item-description">Web technology reference for developers</p></div></a></li><li class="html-link-container "><a href="/zh-CN/docs/Web/HTML" class="submenu-item "><div class="submenu-icon html"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTML</div><p class="submenu-item-description">Structure of content on the web</p></div></a></li><li class="css-link-container "><a href="/zh-CN/docs/Web/CSS" class="submenu-item "><div class="submenu-icon css"></div><div class="submenu-content-container"><div class="submenu-item-heading">CSS</div><p class="submenu-item-description">Code used to describe document style</p></div></a></li><li class="javascript-link-container "><a href="/zh-CN/docs/Web/JavaScript" class="submenu-item "><div class="submenu-icon javascript"></div><div class="submenu-content-container"><div class="submenu-item-heading">JavaScript</div><p class="submenu-item-description">General-purpose scripting language</p></div></a></li><li class="http-link-container "><a href="/zh-CN/docs/Web/HTTP" class="submenu-item "><div class="submenu-icon http"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTTP</div><p class="submenu-item-description">Protocol for transmitting web resources</p></div></a></li><li class="apis-link-container "><a href="/zh-CN/docs/Web/API" class="submenu-item "><div class="submenu-icon apis"></div><div class="submenu-content-container"><div class="submenu-item-heading">Web APIs</div><p class="submenu-item-description">Interfaces for building web applications</p></div></a></li><li class="apis-link-container "><a href="/zh-CN/docs/Mozilla/Add-ons/WebExtensions" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Web Extensions</div><p class="submenu-item-description">Developing extensions for web browsers</p></div></a></li><li class=" "><a href="/zh-CN/docs/Web/Accessibility" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Accessibility</div><p class="submenu-item-description">Build web projects usable for all</p></div></a></li><li class="apis-link-container desktop-only "><a href="/zh-CN/docs/Web" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Web Technology</div><p class="submenu-item-description">Web technology reference for developers</p></div></a></li></ul></li><li class="top-level-entry-container "><button type="button" id="learn-button" class="top-level-entry menu-toggle" aria-controls="learn-menu" aria-expanded="false">Learn</button><a href="/zh-CN/docs/Learn_web_development" class="top-level-entry">Learn</a><ul id="learn-menu" class="submenu learn hidden inline-submenu-lg" aria-labelledby="learn-button"><li class="apis-link-container mobile-only "><a href="/zh-CN/docs/Learn_web_development" class="submenu-item "><div class="submenu-icon learn"></div><div class="submenu-content-container"><div class="submenu-item-heading">Overview / MDN Learning Area</div><p class="submenu-item-description">Learn web development</p></div></a></li><li class="apis-link-container desktop-only "><a href="/zh-CN/docs/Learn_web_development" class="submenu-item "><div class="submenu-icon learn"></div><div class="submenu-content-container"><div class="submenu-item-heading">MDN Learning Area</div><p class="submenu-item-description">Learn web development</p></div></a></li><li class="html-link-container "><a href="/zh-CN/docs/Learn_web_development/Core/Structuring_content" class="submenu-item "><div class="submenu-icon html"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTML</div><p class="submenu-item-description">Learn to structure web content with HTML</p></div></a></li><li class="css-link-container "><a href="/zh-CN/docs/Learn_web_development/Core/Styling_basics" class="submenu-item "><div class="submenu-icon css"></div><div class="submenu-content-container"><div class="submenu-item-heading">CSS</div><p class="submenu-item-description">Learn to style content using CSS</p></div></a></li><li class="javascript-link-container "><a href="/zh-CN/docs/Learn_web_development/Core/Scripting" class="submenu-item "><div class="submenu-icon javascript"></div><div class="submenu-content-container"><div class="submenu-item-heading">JavaScript</div><p class="submenu-item-description">Learn to run scripts in the browser</p></div></a></li><li class=" "><a href="/zh-CN/docs/Learn_web_development/Core/Accessibility" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Accessibility</div><p class="submenu-item-description">Learn to make the web accessible to all</p></div></a></li></ul></li><li class="top-level-entry-container "><button type="button" id="mdn-plus-button" class="top-level-entry menu-toggle" aria-controls="mdn-plus-menu" aria-expanded="false">Plus</button><a href="/zh-CN/plus" class="top-level-entry">Plus</a><ul id="mdn-plus-menu" class="submenu mdn-plus hidden inline-submenu-lg" aria-labelledby="mdn-plus-button"><li class=" "><a href="/zh-CN/plus" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Overview</div><p class="submenu-item-description">A customized MDN experience</p></div></a></li><li class=" "><a href="/zh-CN/plus/ai-help" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">AI Help</div><p class="submenu-item-description">Get real-time assistance and support</p></div></a></li><li class=" "><a href="/zh-CN/plus/updates" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Updates</div><p class="submenu-item-description">All browser compatibility updates at a glance</p></div></a></li><li class=" "><a href="/en-US/plus/docs/features/overview" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Documentation</div><p class="submenu-item-description">Learn how to use MDN Plus</p></div></a></li><li class=" "><a href="/en-US/plus/docs/faq" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">FAQ</div><p class="submenu-item-description">Frequently asked questions about MDN Plus</p></div></a></li></ul></li><li class="top-level-entry-container "><a class="top-level-entry menu-link" href="/en-US/curriculum/">Curriculum <sup class="new">New</sup></a></li><li class="top-level-entry-container "><a class="top-level-entry menu-link" href="/en-US/blog/">Blog</a></li><li class="top-level-entry-container "><button type="button" id="tools-button" class="top-level-entry menu-toggle" aria-controls="tools-menu" aria-expanded="false">Tools</button><ul id="tools-menu" class="submenu tools hidden inline-submenu-lg" aria-labelledby="tools-button"><li class=" "><a href="/zh-CN/play" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Playground</div><p class="submenu-item-description">Write, test and share your code</p></div></a></li><li class=" "><a href="/en-US/observatory" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTTP Observatory</div><p class="submenu-item-description">Scan a website for free</p></div></a></li><li class=" "><a href="/en-US/plus/ai-help" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">AI Help</div><p class="submenu-item-description">Get real-time assistance and support</p></div></a></li></ul></li></ul></nav><div class="header-search"><form action="/zh-CN/search" class="search-form search-widget" id="top-nav-search-form" role="search"><label id="top-nav-search-label" for="top-nav-search-input" class="visually-hidden">Search MDN</label><input aria-activedescendant="" aria-autocomplete="list" aria-controls="top-nav-search-menu" aria-expanded="false" aria-labelledby="top-nav-search-label" autoComplete="off" id="top-nav-search-input" role="combobox" type="search" class="search-input-field" name="q" placeholder="   " required="" value=""/><button type="button" class="button action has-icon clear-search-button"><span class="button-wrap"><span class="icon icon-cancel "></span><span class="visually-hidden">Clear search input</span></span></button><button type="submit" class="button action has-icon search-button"><span class="button-wrap"><span class="icon icon-search "></span><span class="visually-hidden">Search</span></span></button><div id="top-nav-search-menu" role="listbox" aria-labelledby="top-nav-search-label"></div></form></div><div class="theme-switcher-menu"><button type="button" class="button action has-icon theme-switcher-menu small" aria-haspopup="menu"><span class="button-wrap"><span class="icon icon-theme-os-default "></span>Theme</span></button></div><ul class="auth-container"><li><a href="/users/fxa/login/authenticate/?next=%2Fzh-CN%2Fdocs%2FWeb%2FAPI%2FWebRTC_API" class="login-link" rel="nofollow">Log in</a></li><li><a href="/users/fxa/login/authenticate/?next=%2Fzh-CN%2Fdocs%2FWeb%2FAPI%2FWebRTC_API" target="_self" rel="nofollow" class="button primary mdn-plus-subscribe-link"><span class="button-wrap">Sign up for free</span></a></li></ul></div></div></header><div class="article-actions-container"><div class="container"><button type="button" class="button action has-icon sidebar-button" aria-label="Expand sidebar" aria-expanded="false" aria-controls="sidebar-quicklinks"><span class="button-wrap"><span class="icon icon-sidebar "></span></span></button><nav class="breadcrumbs-container" aria-label="Breadcrumb"><ol typeof="BreadcrumbList" vocab="https://schema.org/" aria-label="breadcrumbs"><li property="itemListElement" typeof="ListItem"><a href="/zh-CN/docs/Web" class="breadcrumb" property="item" typeof="WebPage"><span property="name">面向开发者的 Web 技术</span></a><meta property="position" content="1"/></li><li property="itemListElement" typeof="ListItem"><a href="/zh-CN/docs/Web/API" class="breadcrumb" property="item" typeof="WebPage"><span property="name">Web API</span></a><meta property="position" content="2"/></li><li property="itemListElement" typeof="ListItem"><a href="/zh-CN/docs/Web/API/WebRTC_API" class="breadcrumb-current-page" property="item" typeof="WebPage"><span property="name">WebRTC API</span></a><meta property="position" content="3"/></li></ol></nav><div class="article-actions"><button type="button" class="button action has-icon article-actions-toggle" aria-label="Article actions"><span class="button-wrap"><span class="icon icon-ellipses "></span><span class="article-actions-dialog-heading">Article Actions</span></span></button><ul class="article-actions-entries"><li class="article-actions-entry"><div class="languages-switcher-menu open-on-focus-within"><button id="languages-switcher-button" type="button" class="button action small has-icon languages-switcher-menu" aria-haspopup="menu"><span class="button-wrap"><span class="icon icon-language "></span>中文 (简体)</span></button><div class="hidden"><ul class="submenu language-menu " aria-labelledby="language-menu-button"><li class=" "><form class="submenu-item locale-redirect-setting"><div class="group"><label class="switch"><input type="checkbox" name="locale-redirect"/><span class="slider"></span><span class="label">Remember language</span></label><a href="https://github.com/orgs/mdn/discussions/739" rel="external noopener noreferrer" target="_blank" title="Enable this setting to automatically switch to this language when it&#x27;s available. (Click to learn more.)"><span class="icon icon-question-mark "></span></a></div></form></li><li class=" "><a data-locale="en-US" href="/en-US/docs/Web/API/WebRTC_API" class="button submenu-item"><span>English (US)</span></a></li><li class=" "><a data-locale="de" href="/de/docs/Web/API/WebRTC_API" class="button submenu-item"><span>Deutsch</span><span title="Diese Übersetzung ist Teil eines Experiments."><span class="icon icon-experimental "></span></span></a></li><li class=" "><a data-locale="es" href="/es/docs/Web/API/WebRTC_API" class="button submenu-item"><span>Español</span></a></li><li class=" "><a data-locale="fr" href="/fr/docs/Web/API/WebRTC_API" class="button submenu-item"><span>Français</span></a></li><li class=" "><a data-locale="ja" href="/ja/docs/Web/API/WebRTC_API" class="button submenu-item"><span>日本語</span></a></li><li class=" "><a data-locale="ko" href="/ko/docs/Web/API/WebRTC_API" class="button submenu-item"><span>한국어</span></a></li><li class=" "><a data-locale="pt-BR" href="/pt-BR/docs/Web/API/WebRTC_API" class="button submenu-item"><span>Português (do Brasil)</span></a></li><li class=" "><a data-locale="ru" href="/ru/docs/Web/API/WebRTC_API" class="button submenu-item"><span>Русский</span></a></li></ul></div></div></li></ul></div></div></div></div><div class="container"><div class="notecard localized-content-note"><p><a href="/zh-CN/docs/MDN/Community/Contributing/Translated_content#活跃语言">此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。</a></p></div></div><div class="main-wrapper"><div class="sidebar-container"><aside id="sidebar-quicklinks" class="sidebar"><button type="button" class="button action backdrop" aria-label="Collapse sidebar"><span class="button-wrap"></span></button><nav aria-label="Related Topics" class="sidebar-inner"><header class="sidebar-actions"><section class="sidebar-filter-container"><div class="sidebar-filter "><label id="sidebar-filter-label" class="sidebar-filter-label" for="sidebar-filter-input"><span class="icon icon-filter"></span><span class="visually-hidden">Filter sidebar</span></label><input id="sidebar-filter-input" autoComplete="off" class="sidebar-filter-input-field false" type="text" placeholder="Filter" value=""/><button type="button" class="button action has-icon clear-sidebar-filter-button"><span class="button-wrap"><span class="icon icon-cancel "></span><span class="visually-hidden">Clear filter input</span></span></button></div></section></header><div class="sidebar-inner-nav"><div class="in-nav-toc"><div class="document-toc-container"><section class="document-toc"><header><h2 class="document-toc-heading">在本文中</h2></header><ul class="document-toc-list"><li class="document-toc-item "><a class="document-toc-link" href="#webrtc_概念和用法">WebRTC 概念和用法</a></li><li class="document-toc-item "><a class="document-toc-link" href="#webrtc_参考">WebRTC 参考</a></li><li class="document-toc-item "><a class="document-toc-link" href="#指南">指南</a></li><li class="document-toc-item "><a class="document-toc-link" href="#教程">教程</a></li><li class="document-toc-item "><a class="document-toc-link" href="#规范">规范</a></li><li class="document-toc-item "><a class="document-toc-link" href="#参见">参见</a></li></ul></section></div></div><div class="sidebar-body"><ol><li class="section"><em><a href="/zh-CN/docs/Web/API/WebRTC_API" aria-current="page">WebRTC API</a></em></li><li class="toggle"><details open=""><summary>指南</summary><ol><li><a href="/zh-CN/docs/Web/API/WebRTC_API/Protocols">WebRTC 协议介绍</a></li><li><a href="/en-US/docs/Web/API/WebRTC_API/Intro_to_RTP" class="only-in-en-us">Introduction to the Real-time Transport Protocol (RTP)</a></li><li><a href="/zh-CN/docs/Web/API/WebRTC_API/Connectivity">WebRTC connectivity</a></li><li><a href="/zh-CN/docs/Web/API/WebRTC_API/Perfect_negotiation">建立连接:WebRTC 完美协商模式</a></li><li><a href="/zh-CN/docs/Web/API/WebRTC_API/Session_lifetime">WebRTC 介绍</a></li><li><a href="/zh-CN/docs/Web/API/WebRTC_API/Signaling_and_video_calling">信令与视频通话</a></li><li><a href="/zh-CN/docs/Web/API/WebRTC_API/Using_data_channels">使用 WebRTC 数据通道</a></li><li><a href="/zh-CN/docs/Web/API/WebRTC_API/Using_DTMF">在 WebRTC 中使用 DTMF</a></li><li><a href="/zh-CN/docs/Web/API/WebRTC_API/Using_Encoded_Transforms">使用 WebRTC 编码转换</a></li><li><a href="/zh-CN/docs/Web/API/WebRTC_API/Simple_RTCDataChannel_sample">RTCDataChannel 简单示例</a></li><li><a href="/zh-CN/docs/Web/API/WebRTC_API/Build_a_phone_with_peerjs">使用 PeerJS 构建一部联网电话</a></li></ol></details></li><li class="toggle"><details open=""><summary>接口</summary><ol><li><a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a></li><li><a href="/zh-CN/docs/Web/API/RTCSessionDescription"><code>RTCSessionDescription</code></a></li><li><a href="/zh-CN/docs/Web/API/RTCIceCandidate"><code>RTCIceCandidate</code></a></li><li><a href="/zh-CN/docs/Web/API/RTCPeerConnectionIceEvent"><code>RTCPeerConnectionIceEvent</code></a></li><li><a href="/en-US/docs/Web/API/RTCPeerConnectionIceErrorEvent" class="only-in-en-us"><code>RTCPeerConnectionIceErrorEvent</code></a></li><li><a href="/en-US/docs/Web/API/RTCCertificate" class="only-in-en-us"><code>RTCCertificate</code></a></li><li><a href="/en-US/docs/Web/API/RTCRtpSender" class="only-in-en-us"><code>RTCRtpSender</code></a></li><li><a href="/en-US/docs/Web/API/RTCRtpReceiver" class="only-in-en-us"><code>RTCRtpReceiver</code></a></li><li><a href="/en-US/docs/Web/API/RTCRtpTransceiver" class="only-in-en-us"><code>RTCRtpTransceiver</code></a></li><li><a href="/en-US/docs/Web/API/RTCDtlsTransport" class="only-in-en-us"><code>RTCDtlsTransport</code></a></li><li><a href="/en-US/docs/Web/API/RTCIceTransport" class="only-in-en-us"><code>RTCIceTransport</code></a></li><li><a href="/en-US/docs/Web/API/RTCTrackEvent" class="only-in-en-us"><code>RTCTrackEvent</code></a></li><li><a href="/en-US/docs/Web/API/RTCSctpTransport" class="only-in-en-us"><code>RTCSctpTransport</code></a></li><li><a href="/zh-CN/docs/Web/API/RTCDataChannel"><code>RTCDataChannel</code></a></li><li><a href="/en-US/docs/Web/API/RTCDataChannelEvent" class="only-in-en-us"><code>RTCDataChannelEvent</code></a></li><li><a href="/en-US/docs/Web/API/RTCDTMFSender" class="only-in-en-us"><code>RTCDTMFSender</code></a></li><li><a href="/en-US/docs/Web/API/RTCDTMFToneChangeEvent" class="only-in-en-us"><code>RTCDTMFToneChangeEvent</code></a></li><li><a href="/zh-CN/docs/Web/API/RTCStatsReport"><code>RTCStatsReport</code></a></li><li><a href="/en-US/docs/Web/API/RTCErrorEvent" class="only-in-en-us"><code>RTCErrorEvent</code></a></li><li><a href="/en-US/docs/Web/API/RTCRtpScriptTransform" class="only-in-en-us"><code>RTCRtpScriptTransform</code></a></li><li><a href="/en-US/docs/Web/API/RTCRtpScriptTransformer" class="only-in-en-us"><code>RTCRtpScriptTransformer</code></a></li><li><a href="/en-US/docs/Web/API/RTCEncodedVideoFrame" class="only-in-en-us"><code>RTCEncodedVideoFrame</code></a></li><li><a href="/en-US/docs/Web/API/RTCEncodedAudioFrame" class="only-in-en-us"><code>RTCEncodedAudioFrame</code></a></li><li><a href="/en-US/docs/Web/API/RTCTransformEvent" class="only-in-en-us"><code>RTCTransformEvent</code></a></li><li><a href="/en-US/docs/Web/API/RTCIceParameters" class="only-in-en-us"><code>RTCIceParameters</code></a></li><li><a href="/en-US/docs/Web/API/RTCIceCandidatePair" class="only-in-en-us"><code>RTCIceCandidatePair</code></a></li><li><a href="/en-US/docs/Web/API/RTCIceCandidatePairStats" class="only-in-en-us"><code>RTCIceCandidatePairStats</code></a></li><li><a href="/en-US/docs/Web/API/RTCInboundRtpStreamStats" class="only-in-en-us"><code>RTCInboundRtpStreamStats</code></a></li><li><a href="/en-US/docs/Web/API/RTCIceCandidateStats" class="only-in-en-us"><code>RTCIceCandidateStats</code></a></li><li><a href="/en-US/docs/Web/API/RTCAudioSourceStats" class="only-in-en-us"><code>RTCAudioSourceStats</code></a></li><li><a href="/en-US/docs/Web/API/RTCVideoSourceStats" class="only-in-en-us"><code>RTCVideoSourceStats</code></a></li><li><a href="/en-US/docs/Web/API/RTCCodecStats" class="only-in-en-us"><code>RTCCodecStats</code></a></li><li><a href="/en-US/docs/Web/API/RTCDataChannelStats" class="only-in-en-us"><code>RTCDataChannelStats</code></a></li><li><a href="/en-US/docs/Web/API/RTCOutboundRtpStreamStats" class="only-in-en-us"><code>RTCOutboundRtpStreamStats</code></a></li><li><a href="/en-US/docs/Web/API/RTCPeerConnectionStats" class="only-in-en-us"><code>RTCPeerConnectionStats</code></a></li><li><a href="/en-US/docs/Web/API/RTCRemoteInboundRtpStreamStats" class="only-in-en-us"><code>RTCRemoteInboundRtpStreamStats</code></a></li><li><a href="/en-US/docs/Web/API/RTCRemoteOutboundRtpStreamStats" class="only-in-en-us"><code>RTCRemoteOutboundRtpStreamStats</code></a></li></ol></details></li><li class="toggle"><details open=""><summary>属性</summary><ol><li><a href="/zh-CN/docs/Web/API/Navigator/mediaDevices"><code>Navigator.mediaDevices</code></a></li><li><a href="/en-US/docs/Web/API/RTCRtpReceiver/transform" class="only-in-en-us"><code>RTCRtpReceiver.transform</code></a></li><li><a href="/en-US/docs/Web/API/RTCRtpSender/transform" class="only-in-en-us"><code>RTCRtpSender.transform</code></a></li></ol></details></li><li class="toggle"><details open=""><summary>方法</summary><ol><li><a href="/zh-CN/docs/Web/API/MediaDevices/getUserMedia"><code>MediaDevices.getUserMedia()</code></a></li></ol></details></li><li class="toggle"><details open=""><summary>事件</summary><ol><li><a href="/en-US/docs/Web/API/RTCDataChannel/bufferedamountlow_event" class="only-in-en-us"><code>RTCDataChannel: bufferedamountlow</code></a></li><li><a href="/en-US/docs/Web/API/RTCDataChannel/close_event" class="only-in-en-us"><code>RTCDataChannel: close</code></a></li><li><a href="/en-US/docs/Web/API/RTCDataChannel/closing_event" class="only-in-en-us"><code>RTCDataChannel: closing</code></a></li><li><a href="/en-US/docs/Web/API/RTCPeerConnection/connectionstatechange_event" class="only-in-en-us"><code>RTCPeerConnection: connectionstatechange</code></a></li><li><a href="/zh-CN/docs/Web/API/RTCPeerConnection/datachannel_event"><code>RTCPeerConnection: datachannel</code></a></li><li><a href="/en-US/docs/Web/API/RTCDataChannel/error_event" class="only-in-en-us"><code>RTCDataChannel: error</code></a></li><li><a class="page-not-created" data-href="/zh-CN/docs/Web/API/RTCIceTransport/error_event" title="此文档尚未被撰写,期待你的贡献!"><code>RTCIceTransport: error</code></a></li><li><a href="/en-US/docs/Web/API/RTCDtlsTransport/error_event" class="only-in-en-us"><code>RTCDtlsTransport: error</code></a></li><li><a class="page-not-created" data-href="/zh-CN/docs/Web/API/RTCSctpTransport/error_event" title="此文档尚未被撰写,期待你的贡献!"><code>RTCSctpTransport: error</code></a></li><li><a href="/en-US/docs/Web/API/RTCIceTransport/gatheringstatechange_event" class="only-in-en-us"><code>RTCIceTransport: gatheringstatechange</code></a></li><li><a href="/zh-CN/docs/Web/API/RTCPeerConnection/icecandidate_event"><code>RTCPeerConnection: icecandidate</code></a></li><li><a href="/en-US/docs/Web/API/RTCPeerConnection/icecandidateerror_event" class="only-in-en-us"><code>RTCPeerConnection: icecandidateerror</code></a></li><li><a href="/en-US/docs/Web/API/RTCPeerConnection/iceconnectionstatechange_event" class="only-in-en-us"><code>RTCPeerConnection: iceconnectionstatechange</code></a></li><li><a href="/en-US/docs/Web/API/RTCPeerConnection/icegatheringstatechange_event" class="only-in-en-us"><code>RTCPeerConnection: icegatheringstatechange</code></a></li><li><a href="/en-US/docs/Web/API/RTCDataChannel/message_event" class="only-in-en-us"><code>RTCDataChannel: message</code></a></li><li><a href="/en-US/docs/Web/API/RTCPeerConnection/negotiationneeded_event" class="only-in-en-us"><code>RTCPeerConnection: negotiationneeded</code></a></li><li><a href="/en-US/docs/Web/API/RTCDataChannel/open_event" class="only-in-en-us"><code>RTCDataChannel: open</code></a></li><li><a href="/en-US/docs/Web/API/RTCIceTransport/selectedcandidatepairchange_event" class="only-in-en-us"><code>RTCIceTransport: selectedcandidatepairchange</code></a></li><li><a href="/en-US/docs/Web/API/RTCPeerConnection/signalingstatechange_event" class="only-in-en-us"><code>RTCPeerConnection: signalingstatechange</code></a></li><li><a href="/en-US/docs/Web/API/RTCIceTransport/statechange_event" class="only-in-en-us"><code>RTCIceTransport: statechange</code></a></li><li><a class="page-not-created" data-href="/zh-CN/docs/Web/API/RTCDtlsTransport/statechange_event" title="此文档尚未被撰写,期待你的贡献!"><code>RTCDtlsTransport: statechange</code></a></li><li><a href="/zh-CN/docs/Web/API/RTCDTMFSender/tonechange_event"><code>RTCDTMFSender: tonechange</code></a></li><li><a href="/zh-CN/docs/Web/API/RTCPeerConnection/track_event"><code>RTCPeerConnection: track</code></a></li><li><a href="/en-US/docs/Web/API/DedicatedWorkerGlobalScope/rtctransform_event" class="only-in-en-us"><code>DedicatedWorkerGlobalScope: rtctransform</code></a></li></ol></details></li></ol></div></div><section class="place side"></section></nav></aside><div class="toc-container"><aside class="toc"><nav><div class="document-toc-container"><section class="document-toc"><header><h2 class="document-toc-heading">在本文中</h2></header><ul class="document-toc-list"><li class="document-toc-item "><a class="document-toc-link" href="#webrtc_概念和用法">WebRTC 概念和用法</a></li><li class="document-toc-item "><a class="document-toc-link" href="#webrtc_参考">WebRTC 参考</a></li><li class="document-toc-item "><a class="document-toc-link" href="#指南">指南</a></li><li class="document-toc-item "><a class="document-toc-link" href="#教程">教程</a></li><li class="document-toc-item "><a class="document-toc-link" href="#规范">规范</a></li><li class="document-toc-item "><a class="document-toc-link" href="#参见">参见</a></li></ul></section></div></nav></aside><section class="place side"></section></div></div><main id="content" class="main-content "><article class="main-page-content" lang="zh-CN"><header><h1>WebRTC API</h1></header><div class="section-content"><p><strong>WebRTC</strong>(Web 实时通信)是一种使 Web 应用程序和站点能够捕获和选择性地流式传输音频或视频媒体,以及在浏览器之间交换任意数据的而无需中间件的技术。WebRTC 的一系列标准使得在不需要用户安装插件或任何其他第三方软件的情况下,可以实现点对点数据共享和电话会议。</p> <p>WebRTC 由几个相互关联的 API 和协议组成,它们共同工作以实现这一目标。你在这里找到的文档将帮助你了解 WebRTC 的基础知识,以及如何设置和使用数据和媒体连接等更多内容。</p></div><section aria-labelledby="webrtc_概念和用法"><h2 id="webrtc_概念和用法"><a href="#webrtc_概念和用法">WebRTC 概念和用法</a></h2><div class="section-content"><p>WebRTC 有多种用途;与<a href="/zh-CN/docs/Web/API/Media_Capture_and_Streams_API">媒体捕捉与媒体流 API</a> 一起使用时,它们为 Web 提供了强大的多媒体功能,包括支持音频和视频会议、文件交换、屏幕共享、身份管理以及与传统电话系统的接口,包括发送 <a href="/zh-CN/docs/Glossary/DTMF">DTMF</a>(按键拨号)信号。两个对等方之间的连接可以在不需要任何特殊驱动程序或插件的情况下建立,并且通常可以在没有任何中间服务器的情况下建立连接。</p> <p>两个对等方之间的连接由 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a> 接口表示。一旦使用 <code>RTCPeerConnection</code> 建立并打开了连接,就可以向连接添加媒体流(<a href="/zh-CN/docs/Web/API/MediaStream"><code>MediaStream</code></a>)或数据通道(<a href="/zh-CN/docs/Web/API/RTCDataChannel"><code>RTCDataChannel</code></a>)。</p> <p>媒体流可以由任意数量的媒体信息轨道组成;轨道由基于 <a href="/zh-CN/docs/Web/API/MediaStreamTrack"><code>MediaStreamTrack</code></a> 接口的对象表示,可以包含多种类型的媒体数据,包括音频、视频和文本(例如字幕甚至章节名称)。大多数流至少包含一个音频轨道和可能也包含一个视频轨道,并且可以用于发送和接收实时媒体或存储的媒体信息(例如流媒体电影)。</p> <p>你还可以使用两个对等方之间的连接来交换任意二进制数据,使用 <a href="/zh-CN/docs/Web/API/RTCDataChannel"><code>RTCDataChannel</code></a> 接口。这可以用于反向信道信息、元数据交换、游戏状态数据包、文件传输,甚至作为数据传输的主要通道。</p></div></section><section aria-labelledby="互操作性"><h3 id="互操作性"><a href="#互操作性">互操作性</a></h3><div class="section-content"><p>WebRTC 在现代浏览器中通常得到很好的支持,但仍存在一些不兼容性。<a href="https://github.com/webrtcHacks/adapter" class="external" target="_blank">adapter.js</a> 库是一个可以使应用程序免受这些不兼容性的影响的垫片。</p></div></section><section aria-labelledby="webrtc_参考"><h2 id="webrtc_参考"><a href="#webrtc_参考">WebRTC 参考</a></h2><div class="section-content"><p>由于 WebRTC 提供了一系列共同工作以完成各种任务的接口,我们将参考资料按类别进行了划分。请参阅侧边栏中的按字母顺序排列的列表。</p></div></section><section aria-labelledby="连接设置和管理"><h3 id="连接设置和管理"><a href="#连接设置和管理">连接设置和管理</a></h3><div class="section-content"><p>这些接口、字典和类型用于设置、打开和管理 WebRTC 连接。包括表示对等媒体连接、数据通道和在交换每个对等方的能力信息以选择最佳配置的接口时使用的接口。</p> <h4 id="接口">接口</h4> <dl> <dt id="rtcpeerconnection"><a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a></dt> <dd> <p>表示本地计算机与远程对等方之间的 WebRTC 连接。它用于处理两个对等方之间的数据流式传输。</p> </dd> <dt id="rtcdatachannel"><a href="/zh-CN/docs/Web/API/RTCDataChannel"><code>RTCDataChannel</code></a></dt> <dd> <p>表示连接的两个对等方之间的双向数据通道。</p> </dd> <dt id="rtcdatachannelevent"><a href="/en-US/docs/Web/API/RTCDataChannelEvent" class="only-in-en-us"><code>RTCDataChannelEvent</code></a></dt> <dd> <p>表示在将 <a href="/zh-CN/docs/Web/API/RTCDataChannel"><code>RTCDataChannel</code></a> 附加到 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a> 时发生的事件。使用此接口发送的唯一事件是 <a href="/zh-CN/docs/Web/API/RTCPeerConnection/datachannel_event" title="datachannel"><code>datachannel</code></a>。</p> </dd> <dt id="rtcsessiondescription"><a href="/zh-CN/docs/Web/API/RTCSessionDescription"><code>RTCSessionDescription</code></a></dt> <dd> <p>表示会话的参数。每个 <code>RTCSessionDescription</code> 包括一个描述 <a href="/en-US/docs/Web/API/RTCSessionDescription/type" title="type" class="only-in-en-us"><code>type</code></a>,指示其描述的提议/应答协商过程的哪一部分,以及会话的 <a href="/zh-CN/docs/Glossary/SDP">SDP</a> 描述符。</p> </dd> <dt id="rtcstatsreport"><a href="/zh-CN/docs/Web/API/RTCStatsReport"><code>RTCStatsReport</code></a></dt> <dd> <p>提供有关连接或连接上的个别轨道的统计信息的详细信息;可以通过调用 <a href="/en-US/docs/Web/API/RTCPeerConnection/getStats" class="only-in-en-us"><code>RTCPeerConnection.getStats()</code></a> 来获取报告。</p> </dd> <dt id="rtcicecandidate"><a href="/zh-CN/docs/Web/API/RTCIceCandidate"><code>RTCIceCandidate</code></a></dt> <dd> <p>表示用于建立 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a> 的候选交互式连接建立(<a href="/zh-CN/docs/Glossary/ICE">ICE</a>)服务器。</p> </dd> <dt id="rtcicetransport"><a href="/en-US/docs/Web/API/RTCIceTransport" class="only-in-en-us"><code>RTCIceTransport</code></a></dt> <dd> <p>表示有关 <a href="/zh-CN/docs/Glossary/ICE">ICE</a> 传输的信息。</p> </dd> <dt id="rtcpeerconnectioniceevent"><a href="/zh-CN/docs/Web/API/RTCPeerConnectionIceEvent"><code>RTCPeerConnectionIceEvent</code></a></dt> <dd> <p>表示与目标 ICE 候选项相关的事件,通常是 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a>。此类型仅有一个事件:<a href="/zh-CN/docs/Web/API/RTCPeerConnection/icecandidate_event" title="icecandidate"><code>icecandidate</code></a>。</p> </dd> <dt id="rtcrtpsender"><a href="/en-US/docs/Web/API/RTCRtpSender" class="only-in-en-us"><code>RTCRtpSender</code></a></dt> <dd> <p>管理在 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a> 上的 <a href="/zh-CN/docs/Web/API/MediaStreamTrack"><code>MediaStreamTrack</code></a> 的数据编码和传输。</p> </dd> <dt id="rtcrtpreceiver"><a href="/en-US/docs/Web/API/RTCRtpReceiver" class="only-in-en-us"><code>RTCRtpReceiver</code></a></dt> <dd> <p>管理在 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a> 上的 <a href="/zh-CN/docs/Web/API/MediaStreamTrack"><code>MediaStreamTrack</code></a> 的数据接收和解码。</p> </dd> <dt id="rtctrackevent"><a href="/en-US/docs/Web/API/RTCTrackEvent" class="only-in-en-us"><code>RTCTrackEvent</code></a></dt> <dd> <p>用于表示 <a href="/zh-CN/docs/Web/API/RTCPeerConnection/track_event" title="track"><code>track</code></a> 事件的接口,该事件指示已将 <a href="/en-US/docs/Web/API/RTCRtpReceiver" class="only-in-en-us"><code>RTCRtpReceiver</code></a> 对象添加到 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a> 对象,表示已创建并添加了新的传入 <a href="/zh-CN/docs/Web/API/MediaStreamTrack"><code>MediaStreamTrack</code></a> 至 <code>RTCPeerConnection</code>。</p> </dd> <dt id="rtcsctptransport"><a href="/en-US/docs/Web/API/RTCSctpTransport" class="only-in-en-us"><code>RTCSctpTransport</code></a></dt> <dd> <p>提供描述流控制传输协议(<strong><a href="/zh-CN/docs/Glossary/SCTP">SCTP</a></strong>)传输的信息,并提供一种访问底层的用于所有 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a> 的数据通道发送和接收的 SCTP 包的数据报传输层安全(<strong><a href="/zh-CN/docs/Glossary/DTLS">DTLS</a></strong>)传输的方式。</p> </dd> </dl> <h4 id="事件">事件</h4> <dl> <dt id="bufferedamountlow"><a href="/en-US/docs/Web/API/RTCDataChannel/bufferedamountlow_event" title="bufferedamountlow" class="only-in-en-us"><code>bufferedamountlow</code></a></dt> <dd> <p>表示数据通道当前缓冲的数据量(由其 <a href="/en-US/docs/Web/API/RTCDataChannel/bufferedAmount" title="bufferedAmount" class="only-in-en-us"><code>bufferedAmount</code></a> 属性指示)已经减少到或低于通道的最小缓冲数据大小(由 <a href="/en-US/docs/Web/API/RTCDataChannel/bufferedAmountLowThreshold" title="bufferedAmountLowThreshold" class="only-in-en-us"><code>bufferedAmountLowThreshold</code></a> 指定)。</p> </dd> <dt id="close"><a href="/en-US/docs/Web/API/RTCDataChannel/close_event" title="close" class="only-in-en-us"><code>close</code></a></dt> <dd> <p>数据通道已完成关闭过程,现在处于 <code>closed</code> 状态。此时,其底层数据传输完全关闭。你可以通过观察 <code>closing</code> 事件来在关闭完成<em>之前</em>得到通知。</p> </dd> <dt id="closing"><a href="/en-US/docs/Web/API/RTCDataChannel/closing_event" title="closing" class="only-in-en-us"><code>closing</code></a></dt> <dd> <p><code>RTCDataChannel</code> 已转换为 <code>closing</code> 状态,表示它将很快关闭。你可以通过观察 <code>close</code> 事件来检测关闭过程的完成。</p> </dd> <dt id="connectionstatechange"><a href="/en-US/docs/Web/API/RTCPeerConnection/connectionstatechange_event" title="connectionstatechange" class="only-in-en-us"><code>connectionstatechange</code></a></dt> <dd> <p>连接状态(可以通过 <a href="/zh-CN/docs/Web/API/RTCPeerConnection/connectionState" title="connectionState"><code>connectionState</code></a> 访问)已更改。</p> </dd> <dt id="datachannel"><a href="/zh-CN/docs/Web/API/RTCPeerConnection/datachannel_event" title="datachannel"><code>datachannel</code></a></dt> <dd> <p>有一个新的 <a href="/zh-CN/docs/Web/API/RTCDataChannel"><code>RTCDataChannel</code></a> 在远程对等方打开新数据通道之后可用。此事件的类型是 <a href="/en-US/docs/Web/API/RTCDataChannelEvent" class="only-in-en-us"><code>RTCDataChannelEvent</code></a>。</p> </dd> <dt id="error"><a href="/en-US/docs/Web/API/RTCDataChannel/error_event" title="error" class="only-in-en-us"><code>error</code></a></dt> <dd> <p>表示数据通道上发生错误的 <a href="/en-US/docs/Web/API/RTCErrorEvent" class="only-in-en-us"><code>RTCErrorEvent</code></a>。</p> </dd> <dt id="error_2"><a href="/en-US/docs/Web/API/RTCDtlsTransport/error_event" title="error" class="only-in-en-us"><code>error</code></a></dt> <dd> <p>表示 <a href="/en-US/docs/Web/API/RTCDtlsTransport" class="only-in-en-us"><code>RTCDtlsTransport</code></a> 上发生错误的 <a href="/en-US/docs/Web/API/RTCErrorEvent" class="only-in-en-us"><code>RTCErrorEvent</code></a>。此错误将是 <code>dtls-failure</code> 或 <code>fingerprint-failure</code>。</p> </dd> <dt id="gatheringstatechange"><a href="/en-US/docs/Web/API/RTCIceTransport/gatheringstatechange_event" title="gatheringstatechange" class="only-in-en-us"><code>gatheringstatechange</code></a></dt> <dd> <p><a href="/en-US/docs/Web/API/RTCIceTransport" class="only-in-en-us"><code>RTCIceTransport</code></a> 的收集状态已更改。</p> </dd> <dt id="icecandidate"><a href="/zh-CN/docs/Web/API/RTCPeerConnection/icecandidate_event" title="icecandidate"><code>icecandidate</code></a></dt> <dd> <p>每当本地设备识别出一个新的 ICE 候选需要通过调用 <a href="/en-US/docs/Web/API/RTCPeerConnection/setLocalDescription" title="setLocalDescription()" class="only-in-en-us"><code>setLocalDescription()</code></a> 添加到本地对等方时,就会发送的 <a href="/zh-CN/docs/Web/API/RTCPeerConnectionIceEvent"><code>RTCPeerConnectionIceEvent</code></a>。</p> </dd> <dt id="icecandidateerror"><a href="/en-US/docs/Web/API/RTCPeerConnection/icecandidateerror_event" title="icecandidateerror" class="only-in-en-us"><code>icecandidateerror</code></a></dt> <dd> <p>表示在收集 ICE 候选时发生错误的 <a href="/en-US/docs/Web/API/RTCPeerConnectionIceErrorEvent" class="only-in-en-us"><code>RTCPeerConnectionIceErrorEvent</code></a>。</p> </dd> <dt id="iceconnectionstatechange"><a href="/en-US/docs/Web/API/RTCPeerConnection/iceconnectionstatechange_event" title="iceconnectionstatechange" class="only-in-en-us"><code>iceconnectionstatechange</code></a></dt> <dd> <p>在其 ICE 连接的状态(可通过 <a href="/zh-CN/docs/Web/API/RTCPeerConnection/iceConnectionState" title="iceconnectionstate"><code>iceconnectionstate</code></a> 属性访问)更改时,会发送给 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a>。</p> </dd> <dt id="icegatheringstatechange"><a href="/en-US/docs/Web/API/RTCPeerConnection/icegatheringstatechange_event" title="icegatheringstatechange" class="only-in-en-us"><code>icegatheringstatechange</code></a></dt> <dd> <p>在其 ICE 收集状态(可通过 <a href="/zh-CN/docs/Web/API/RTCPeerConnection/iceGatheringState" title="icegatheringstate"><code>icegatheringstate</code></a> 属性访问)更改时,会发送给 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a>。</p> </dd> <dt id="message"><a href="/en-US/docs/Web/API/RTCDataChannel/message_event" title="message" class="only-in-en-us"><code>message</code></a></dt> <dd> <p>在数据通道上收到消息。该事件的类型为 <a href="/zh-CN/docs/Web/API/MessageEvent"><code>MessageEvent</code></a>。</p> </dd> <dt id="negotiationneeded"><a href="/en-US/docs/Web/API/RTCPeerConnection/negotiationneeded_event" title="negotiationneeded" class="only-in-en-us"><code>negotiationneeded</code></a></dt> <dd> <p>通知 <code>RTCPeerConnection</code> 需要通过调用 <a href="/zh-CN/docs/Web/API/RTCPeerConnection/createOffer" title="createOffer()"><code>createOffer()</code></a>,然后是 <a href="/en-US/docs/Web/API/RTCPeerConnection/setLocalDescription" title="setLocalDescription()" class="only-in-en-us"><code>setLocalDescription()</code></a> 来执行会话协商。</p> </dd> <dt id="open"><a href="/en-US/docs/Web/API/RTCDataChannel/open_event" title="open" class="only-in-en-us"><code>open</code></a></dt> <dd> <p><code>RTCDataChannel</code> 的底层数据传输已成功打开或重新打开。</p> </dd> <dt id="selectedcandidatepairchange"><a href="/en-US/docs/Web/API/RTCIceTransport/selectedcandidatepairchange_event" title="selectedcandidatepairchange" class="only-in-en-us"><code>selectedcandidatepairchange</code></a></dt> <dd> <p><code>RTCIceTransport</code> 上的当前选择的 ICE 候选对已更改时触发的事件。</p> </dd> <dt id="track"><a href="/zh-CN/docs/Web/API/RTCPeerConnection/track_event" title="track"><code>track</code></a></dt> <dd> <p>当成功协商了媒体流的流式传输后,将向 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a> 添加新轨道时,会发送类型为 <a href="/en-US/docs/Web/API/RTCTrackEvent" class="only-in-en-us"><code>RTCTrackevent</code></a> 的 <code>track</code> 事件。</p> </dd> <dt id="signalingstatechange"><a href="/en-US/docs/Web/API/RTCPeerConnection/signalingstatechange_event" title="signalingstatechange" class="only-in-en-us"><code>signalingstatechange</code></a></dt> <dd> <p>在其 <a href="/en-US/docs/Web/API/RTCPeerConnection/signalingState" title="signalingstate" class="only-in-en-us"><code>signalingstate</code></a> 更改时,会发送到对等连接。这是由于调用 <a href="/en-US/docs/Web/API/RTCPeerConnection/setLocalDescription" title="setLocalDescription()" class="only-in-en-us"><code>setLocalDescription()</code></a> 或 <a href="/zh-CN/docs/Web/API/RTCPeerConnection/setRemoteDescription" title="setRemoteDescription()"><code>setRemoteDescription()</code></a> 引起的。</p> </dd> <dt id="statechange"><a title="此文档尚未被撰写,期待你的贡献!" class="page-not-created" data-href="/zh-CN/docs/Web/API/RTCDtlsTransport/statechange_event"><code>statechange</code></a></dt> <dd> <p><code>RTCDtlsTransport</code> 的状态已更改。</p> </dd> <dt id="statechange_2"><a href="/en-US/docs/Web/API/RTCIceTransport/statechange_event" title="statechange" class="only-in-en-us"><code>statechange</code></a></dt> <dd> <p><code>RTCIceTransport</code> 的状态已更改。</p> </dd> <dt id="statechange_3"><a href="/en-US/docs/Web/API/RTCSctpTransport/statechange_event" title="statechange" class="only-in-en-us"><code>statechange</code></a></dt> <dd> <p><code>RTCSctpTransport</code> 的状态已更改。</p> </dd> <dt id="rtctransform"><a href="/en-US/docs/Web/API/DedicatedWorkerGlobalScope/rtctransform_event" title="rtctransform" class="only-in-en-us"><code>rtctransform</code></a></dt> <dd> <p>编码的视频或音频帧已准备好在 worker 中使用转换流进行处理。</p> </dd> </dl> <h4 id="类型">类型</h4> <dl> <dt id="rtcsctptransport.state"><a href="/en-US/docs/Web/API/RTCSctpTransport/state" class="only-in-en-us"><code>RTCSctpTransport.state</code></a></dt> <dd> <p>指示 <a href="/en-US/docs/Web/API/RTCSctpTransport" class="only-in-en-us"><code>RTCSctpTransport</code></a> 实例的状态。</p> </dd> </dl></div></section><section aria-labelledby="身份和安全"><h3 id="身份和安全"><a href="#身份和安全">身份和安全</a></h3><div class="section-content"><p>这些 API 用于管理用户身份和安全性,以便为连接认证用户。</p> <dl> <dt id="rtcidentityprovider"><a class="page-not-created" data-href="/zh-CN/docs/Web/API/RTCIdentityProvider" title="此文档尚未被撰写,期待你的贡献!"><code>RTCIdentityProvider</code></a></dt> <dd> <p>使用户代理能够请求生成或验证身份断言。</p> </dd> <dt id="rtcidentityassertion"><a href="/en-US/docs/Web/API/RTCIdentityAssertion" class="only-in-en-us"><code>RTCIdentityAssertion</code></a></dt> <dd> <p>表示当前连接的远程对等方的身份。如果尚未设置和验证对等方,则此接口返回 <code>null</code>。一旦设置,便无法更改。</p> </dd> <dt id="rtcidentityproviderregistrar"><a class="page-not-created" data-href="/zh-CN/docs/Web/API/RTCIdentityProviderRegistrar" title="此文档尚未被撰写,期待你的贡献!"><code>RTCIdentityProviderRegistrar</code></a></dt> <dd> <p>注册身份提供商(IdP)。</p> </dd> <dt id="rtccertificate"><a href="/en-US/docs/Web/API/RTCCertificate" class="only-in-en-us"><code>RTCCertificate</code></a></dt> <dd> <p>表示 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a> 用于身份验证的证书。</p> </dd> </dl></div></section><section aria-labelledby="电话"><h3 id="电话"><a href="#电话">电话</a></h3><div class="section-content"><h4 id="接口_2">接口</h4> <dl> <dt id="rtcdtmfsender"><a href="/en-US/docs/Web/API/RTCDTMFSender" class="only-in-en-us"><code>RTCDTMFSender</code></a></dt> <dd> <p>管理 <a href="/zh-CN/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code></a> 的双音多频(DTMF)信号的编码和传输。</p> </dd> <dt id="rtcdtmftonechangeevent"><a href="/en-US/docs/Web/API/RTCDTMFToneChangeEvent" class="only-in-en-us"><code>RTCDTMFToneChangeEvent</code></a></dt> <dd> <p>由 <a href="/zh-CN/docs/Web/API/RTCDTMFSender/tonechange_event" title="tonechange"><code>tonechange</code></a> 事件使用,指示 DTMF 音调已开始或结束。此事件不冒泡(除非另有说明),也不可取消(除非另有说明)。</p> </dd> </dl> <h4 id="事件_2">事件</h4> <dl> <dt id="tonechange"><a href="/zh-CN/docs/Web/API/RTCDTMFSender/tonechange_event" title="tonechange"><code>tonechange</code></a></dt> <dd> <p>连接上已开始播放新的 DTMF 音调,或者 <code>RTCDTMFSender</code> 的 <a href="/en-US/docs/Web/API/RTCDTMFSender/toneBuffer" title="toneBuffer" class="only-in-en-us"><code>toneBuffer</code></a> 中的最后一个音调已发送,且缓冲区现在为空。事件的类型为 <a href="/en-US/docs/Web/API/RTCDTMFToneChangeEvent" class="only-in-en-us"><code>RTCDTMFToneChangeEvent</code></a>。</p> </dd> </dl></div></section><section aria-labelledby="编码转换"><h3 id="编码转换"><a href="#编码转换">编码转换</a></h3><div class="section-content"><p>这些接口和事件用于使用在 worker 中运行的转换流处理传入和传出的编码视频和音频帧。</p> <h4 id="接口_3">接口</h4> <dl> <dt id="rtcrtpscripttransform"><a href="/en-US/docs/Web/API/RTCRtpScriptTransform" class="only-in-en-us"><code>RTCRtpScriptTransform</code></a></dt> <dd> <p>用于将 worker 中运行的转换流插入 RTC 流水线的接口。</p> </dd> <dt id="rtcrtpscripttransformer"><a href="/en-US/docs/Web/API/RTCRtpScriptTransformer" class="only-in-en-us"><code>RTCRtpScriptTransformer</code></a></dt> <dd> <p><code>RTCRtpScriptTransform</code> 的 worker 对应项,传递来自主线程的选项,以及可用于通过 <a href="/zh-CN/docs/Web/API/TransformStream"><code>TransformStream</code></a> 传递编码帧的可读流和可写流。</p> </dd> <dt id="rtcencodedvideoframe"><a href="/en-US/docs/Web/API/RTCEncodedVideoFrame" class="only-in-en-us"><code>RTCEncodedVideoFrame</code></a></dt> <dd> <p>表示要在 RTC 流水线中进行转换的编码视频帧。</p> </dd> <dt id="rtcencodedaudioframe"><a href="/en-US/docs/Web/API/RTCEncodedAudioFrame" class="only-in-en-us"><code>RTCEncodedAudioFrame</code></a></dt> <dd> <p>表示要在 RTC 流水线中进行转换的编码音频帧。</p> </dd> </dl> <h4 id="属性">属性</h4> <dl> <dt id="rtcrtpreceiver.transform"><a href="/en-US/docs/Web/API/RTCRtpReceiver/transform" class="only-in-en-us"><code>RTCRtpReceiver.transform</code></a></dt> <dd> <p>用于将转换流插入接收器流水线以处理传入的编码视频和音频帧的属性。</p> </dd> <dt id="rtcrtpsender.transform"><a href="/en-US/docs/Web/API/RTCRtpSender/transform" class="only-in-en-us"><code>RTCRtpSender.transform</code></a></dt> <dd> <p>用于将转换流插入发送器流水线以处理传出的编码视频和音频帧的属性。</p> </dd> </dl> <h4 id="事件_3">事件</h4> <dl> <dt id="rtctransform_2"><a href="/en-US/docs/Web/API/DedicatedWorkerGlobalScope/rtctransform_event" title="rtctransform" class="only-in-en-us"><code>rtctransform</code></a></dt> <dd> <p>RTC 转换已准备好在 worker 中运行,或者已准备处理编码视频或音频帧时触发的事件。</p> </dd> </dl></div></section><section aria-labelledby="指南"><h2 id="指南"><a href="#指南">指南</a></h2><div class="section-content"><dl> <dt id="webrtc_协议简介"><a href="/zh-CN/docs/Web/API/WebRTC_API/Protocols">WebRTC 协议简介</a></dt> <dd> <p>本文介绍了构建 WebRTC API 的底层协议。</p> </dd> <dt id="webrtc_连接"><a href="/zh-CN/docs/Web/API/WebRTC_API/Connectivity">WebRTC 连接</a></dt> <dd> <p>介绍了 WebRTC 连接的工作原理以及如何将各种协议和接口结合起来以构建功能强大的通信应用程序的指南。</p> </dd> <dt id="webrtc_会话的生命周期"><a href="/zh-CN/docs/Web/API/WebRTC_API/Session_lifetime">WebRTC 会话的生命周期</a></dt> <dd> <p>WebRTC 允许你在浏览器应用程序中构建任意数据、音频或视频(或其中的任意组合)的点对点通信。在本文中,我们将从建立连接一直到关闭连接(不再需要时)的整个 WebRTC 会话生命周期进行探讨。</p> </dd> <dt id="建立连接:完美协商模式"><a href="/zh-CN/docs/Web/API/WebRTC_API/Perfect_negotiation">建立连接:完美协商模式</a></dt> <dd> <p><strong>完美协商</strong>是一种建议你的信令流程遵循的设计模式,它在协商过程中提供了透明性,同时允许双方都是提供方或应答方,而无需进行大量的编码来区分两者。</p> </dd> <dt id="信令和双向视频通话"><a href="/zh-CN/docs/Web/API/WebRTC_API/Signaling_and_video_calling">信令和双向视频通话</a></dt> <dd> <p>它将一个之前的示例创建的、基于 WebSocket 的聊天系统转换为教程和示例,并添加了参与者之间进行视频通话的支持。聊天服务器的 WebSocket 连接用于 WebRTC 信令。</p> </dd> <dt id="webrtc_使用的编解码器"><a href="/en-US/docs/Web/Media/Guides/Formats/WebRTC_codecs" class="only-in-en-us">WebRTC 使用的编解码器</a></dt> <dd> <p>介绍了 WebRTC 需要浏览器支持的编解码器以及各种流行浏览器支持的可选编解码器。本文还包括了一个帮助你选择最适合你需求的编解码器的指南。</p> </dd> <dt id="使用_webrtc_数据通道"><a href="/zh-CN/docs/Web/API/WebRTC_API/Using_data_channels">使用 WebRTC 数据通道</a></dt> <dd> <p>本指南介绍了如何使用对等连接和相关的 <a href="/zh-CN/docs/Web/API/RTCDataChannel"><code>RTCDataChannel</code></a> 在两个对等方之间交换任意数据。</p> </dd> <dt id="在_webrtc_中使用_dtmf"><a href="/zh-CN/docs/Web/API/WebRTC_API/Using_DTMF">在 WebRTC 中使用 DTMF</a></dt> <dd> <p>WebRTC 与连接到老式电话系统的网关进行交互的支持,包括使用 <a href="/en-US/docs/Web/API/RTCDTMFSender" class="only-in-en-us"><code>RTCDTMFSender</code></a> 接口发送 DTMF 音调。本指南展示了如何做到这一点。</p> </dd> <dt id="使用_webrtc_编码转换"><a href="/zh-CN/docs/Web/API/WebRTC_API/Using_Encoded_Transforms">使用 WebRTC 编码转换</a></dt> <dd> <p>本指南展示了一个 Web 应用程序如何使用在 worker 中运行的 <a href="/zh-CN/docs/Web/API/TransformStream"><code>TransformStream</code></a> 来修改传入和传出的 WebRTC 编码视频和音频帧。</p> </dd> </dl></div></section><section aria-labelledby="教程"><h2 id="教程"><a href="#教程">教程</a></h2><div class="section-content"><dl> <dt id="使用_webrtc_adapter.js_改善兼容性"><a href="#互操作性">使用 WebRTC adapter.js 改善兼容性</a></dt> <dd> <p>WebRTC 组织<a href="https://github.com/webrtc/adapter/" class="external" target="_blank">在 GitHub 上提供了 WebRTC 适配器</a>来解决不同浏览器的 WebRTC 实现的兼容性问题。适配器是一个 JavaScript 垫片,使你的代码只需按照规范编写,便可以在所有支持 WebRTC 的浏览器中“正常工作”。</p> </dd> <dt id="rtcdatachannel_简单示例"><a href="/zh-CN/docs/Web/API/WebRTC_API/Simple_RTCDataChannel_sample">RTCDataChannel 简单示例</a></dt> <dd> <p><a href="/zh-CN/docs/Web/API/RTCDataChannel"><code>RTCDataChannel</code></a> 接口是一个允许你在两个对等方之间打开一个通道(通过该通道你可以发送和接收任意数据)的特性。API 故意设计成与 <a href="/zh-CN/docs/Web/API/WebSockets_API">WebSocket API</a> 类似,以便可以使用相同的编程模型。</p> </dd> <dt id="使用_peer.js_构建联网电话"><a href="/zh-CN/docs/Web/API/WebRTC_API/Build_a_phone_with_peerjs">使用 Peer.js 构建联网电话</a></dt> <dd> <p>本教程将逐步指导你如何使用 Peer.js 构建电话。</p> </dd> </dl></div></section><h2 id="规范"><a href="#规范">规范</a></h2><table class="standard-table"><thead><tr><th scope="col">Specification</th></tr></thead><tbody><tr><td><a href="https://w3c.github.io/webrtc-pc/">WebRTC: Real-Time Communication in Browsers<!-- --> <br/></a></td></tr><tr><td><a href="https://w3c.github.io/mediacapture-main/">Media Capture and Streams<!-- --> <br/></a></td></tr><tr><td><a href="https://w3c.github.io/mediacapture-fromelement/">Media Capture from DOM Elements<!-- --> <br/></a></td></tr></tbody></table><section aria-labelledby="webrtc_相关协议"><h3 id="webrtc_相关协议"><a href="#webrtc_相关协议">WebRTC 相关协议</a></h3><div class="section-content"><ul> <li><a href="https://datatracker.ietf.org/doc/rfc8833/" class="external" target="_blank">Web 实时通信的应用层协议协商</a></li> <li><a href="https://datatracker.ietf.org/doc/rfc7874/" class="external" target="_blank">WebRTC 音频编解码器和处理要求</a></li> <li><a href="https://datatracker.ietf.org/doc/rfc8831/" class="external" target="_blank">RTCWeb 数据通道</a></li> <li><a href="https://datatracker.ietf.org/doc/rfc8832/" class="external" target="_blank">RTCWeb 数据通道协议</a></li> <li><a href="https://datatracker.ietf.org/doc/rfc8834/" class="external" target="_blank">Web 实时通信(WebRTC):媒体传输和 RTP 的使用</a></li> <li><a href="https://datatracker.ietf.org/doc/rfc8827/" class="external" target="_blank">WebRTC 安全架构</a></li> <li><a href="https://datatracker.ietf.org/doc/rfc8835/" class="external" target="_blank">RTCWEB 的传输</a></li> </ul></div></section><section aria-labelledby="相关支持协议"><h3 id="相关支持协议"><a href="#相关支持协议">相关支持协议</a></h3><div class="section-content"><ul> <li><a href="https://datatracker.ietf.org/doc/html/rfc5245" class="external" target="_blank">交互式连接建立(ICE):用于网络地址转换器(NAT)穿越的协议</a></li> <li><a href="https://datatracker.ietf.org/doc/html/rfc5389" class="external" target="_blank">NAT 会话穿越应用程序(STUN)</a></li> <li><a href="https://datatracker.ietf.org/doc/html/rfc7064" class="external" target="_blank">NAT 会话穿越应用程序(STUN)的 URI 方案协议</a></li> <li><a href="https://datatracker.ietf.org/doc/html/rfc7065" class="external" target="_blank">绕过 NAT 的中继穿越(TURN)的统一资源标识符</a></li> <li><a href="https://datatracker.ietf.org/doc/html/rfc3264" class="external" target="_blank">具有会话描述协议(SDP)的提供/应答模型</a></li> <li><a href="https://datatracker.ietf.org/doc/rfc7635/" class="external" target="_blank">NAT 会话穿越应用程序(STUN)的第三方认证扩展</a></li> </ul></div></section><section aria-labelledby="参见"><h2 id="参见"><a href="#参见">参见</a></h2><div class="section-content"><ul> <li><a href="/zh-CN/docs/Web/API/MediaDevices"><code>MediaDevices</code></a></li> <li><a href="/zh-CN/docs/Web/API/MediaStreamEvent"><code>MediaStreamEvent</code></a></li> <li><a href="/zh-CN/docs/Web/API/MediaStreamTrack"><code>MediaStreamTrack</code></a></li> <li><a href="/zh-CN/docs/Web/API/MessageEvent"><code>MessageEvent</code></a></li> <li><a href="/zh-CN/docs/Web/API/MediaStream"><code>MediaStream</code></a></li> <li><a href="/zh-CN/docs/Web/API/Media_Capture_and_Streams_API">媒体捕捉与媒体流 API</a></li> <li><a href="https://hacks.mozilla.org/2015/06/firefox-multistream-and-renegotiation-for-jitsi-videobridge/" class="external" target="_blank">Firefox 多流和 Jitsi Videobridge 的重新协商</a></li> <li><a href="https://hacks.mozilla.org/2015/04/peering-through-the-webrtc-fog-with-socketpeer/" class="external" target="_blank">使用 SocketPeer 拨开 WebRTC 迷雾</a></li> <li><a href="https://hacks.mozilla.org/2014/04/inside-the-party-bus-building-a-web-app-with-multiple-live-video-streams-interactive-graphics/" class="external" target="_blank">Party Bus 内部:构建具有多个实时视频流和交互式图形的 Web 应用</a></li> <li><a href="/zh-CN/docs/Web/Media">Web 媒体技术</a></li> </ul></div></section></article><aside class="article-footer"><div class="article-footer-inner"><div class="svg-container"><svg xmlns="http://www.w3.org/2000/svg" width="162" height="162" viewBox="0 0 162 162" fill="none" role="none"><mask id="b" fill="#fff"><path d="M97.203 47.04c8.113-7.886 18.004-13.871 28.906-17.492a78 78 0 0 1 33.969-3.39c11.443 1.39 22.401 5.295 32.024 11.411s17.656 14.28 23.476 23.86c5.819 9.579 9.269 20.318 10.083 31.385a69.85 69.85 0 0 1-5.387 32.44c-4.358 10.272-11.115 19.443-19.747 26.801-8.632 7.359-18.908 12.709-30.034 15.637l-6.17-21.698c7.666-2.017 14.746-5.703 20.694-10.773 5.948-5.071 10.603-11.389 13.606-18.467a48.14 48.14 0 0 0 3.712-22.352c-.561-7.625-2.938-15.025-6.948-21.625s-9.544-12.226-16.175-16.44-14.181-6.904-22.065-7.863a53.75 53.75 0 0 0-23.405 2.336c-7.513 2.495-14.327 6.62-19.918 12.053z"></path></mask><path stroke="url(#a)" stroke-dasharray="6, 6" stroke-width="2" d="M97.203 47.04c8.113-7.886 18.004-13.871 28.906-17.492a78 78 0 0 1 33.969-3.39c11.443 1.39 22.401 5.295 32.024 11.411s17.656 14.28 23.476 23.86c5.819 9.579 9.269 20.318 10.083 31.385a69.85 69.85 0 0 1-5.387 32.44c-4.358 10.272-11.115 19.443-19.747 26.801-8.632 7.359-18.908 12.709-30.034 15.637l-6.17-21.698c7.666-2.017 14.746-5.703 20.694-10.773 5.948-5.071 10.603-11.389 13.606-18.467a48.14 48.14 0 0 0 3.712-22.352c-.561-7.625-2.938-15.025-6.948-21.625s-9.544-12.226-16.175-16.44-14.181-6.904-22.065-7.863a53.75 53.75 0 0 0-23.405 2.336c-7.513 2.495-14.327 6.62-19.918 12.053z" mask="url(#b)" style="stroke:url(#a)" transform="translate(-63.992 -25.587)"></path><ellipse cx="8.066" cy="111.597" fill="var(--background-tertiary)" rx="53.677" ry="53.699" transform="matrix(.71707 -.697 .7243 .6895 0 0)"></ellipse><g clip-path="url(#c)" transform="translate(-63.992 -25.587)"><path fill="#9abff5" d="m144.256 137.379 32.906 12.434a4.41 4.41 0 0 1 2.559 5.667l-9.326 24.679a4.41 4.41 0 0 1-5.667 2.559l-8.226-3.108-2.332 6.17c-.466 1.233-.375 1.883-1.609 1.417l-2.253-.527c-.411-.155-.95-.594-1.206-1.161l-4.734-10.484-12.545-4.741a4.41 4.41 0 0 1-2.559-5.667l9.325-24.679a4.41 4.41 0 0 1 5.667-2.559m9.961 29.617 8.227 3.108 3.264-8.638-.498-6.768-4.113-1.555.548 7.258-4.319-1.632zm-12.339-4.663 8.226 3.108 3.264-8.637-.498-6.769-4.113-1.554.548 7.257-4.319-1.632z"></path></g><g clip-path="url(#d)" transform="translate(-63.992 -25.587)"><path fill="#81b0f3" d="M135.35 60.136 86.67 41.654c-3.346-1.27-7.124.428-8.394 3.775L64.414 81.938c-1.27 3.347.428 7.125 3.774 8.395l12.17 4.62-3.465 9.128c-.693 1.826-1.432 2.457.394 3.15l3.014 1.625c.609.231 1.637.274 2.477-.104l15.53-6.983 18.56 7.047c3.346 1.27 7.124-.428 8.395-3.775l13.862-36.51c1.27-3.346-.428-7.124-3.775-8.395M95.261 83.207l-12.17-4.62 4.852-12.779 7.19-7.017 6.085 2.31-7.725 7.51 6.389 2.426zm18.255 6.93-12.17-4.62 4.852-12.778 7.189-7.017 6.085 2.31-7.725 7.51 6.39 2.426z"></path></g><defs><clipPath id="c"><path fill="#fff" d="m198.638 146.586-65.056-24.583-24.583 65.057 65.056 24.582z"></path></clipPath><clipPath id="d"><path fill="#fff" d="m66.438 14.055 96.242 36.54-36.54 96.243-96.243-36.54z"></path></clipPath><linearGradient id="a" x1="97.203" x2="199.995" y1="47.04" y2="152.793" gradientUnits="userSpaceOnUse"><stop stop-color="#086DFC"></stop><stop offset="0.246" stop-color="#2C81FA"></stop><stop offset="0.516" stop-color="#5497F8"></stop><stop offset="0.821" stop-color="#80B0F6"></stop><stop offset="1" stop-color="#9ABFF5"></stop></linearGradient></defs></svg></div><h2>Help improve MDN</h2><fieldset class="feedback"><label>Was this page helpful to you?</label><div class="button-container"><button type="button" class="button primary has-icon yes"><span class="button-wrap"><span class="icon icon-thumbs-up "></span>Yes</span></button><button type="button" class="button primary has-icon no"><span class="button-wrap"><span class="icon icon-thumbs-down "></span>No</span></button></div></fieldset><a class="contribute" href="https://github.com/mdn/translated-content/blob/main/CONTRIBUTING.md" title="This will take you to our contribution guidelines on GitHub." target="_blank" rel="noopener noreferrer">Learn how to contribute</a>.<p class="last-modified-date">This page was last modified on<!-- --> <time dateTime="2025-02-07T15:57:13.000Z">2025年2月7日</time> by<!-- --> <a href="/zh-CN/docs/Web/API/WebRTC_API/contributors.txt" rel="nofollow">MDN contributors</a>.</p><div id="on-github" class="on-github"><a href="https://github.com/mdn/translated-content/blob/main/files/zh-cn/web/api/webrtc_api/index.md?plain=1" title="Folder: zh-cn/web/api/webrtc_api (Opens in a new tab)" target="_blank" rel="noopener noreferrer">View this page on GitHub</a> <!-- -->•<!-- --> <a href="https://github.com/mdn/translated-content/issues/new?template=page-report-zh-cn.yml&amp;mdn-url=https%3A%2F%2Fdeveloper.mozilla.org%2Fzh-CN%2Fdocs%2FWeb%2FAPI%2FWebRTC_API&amp;metadata=%3C%21--+Do+not+make+changes+below+this+line+--%3E%0A%3Cdetails%3E%0A%3Csummary%3EPage+report+details%3C%2Fsummary%3E%0A%0A*+Folder%3A+%60zh-cn%2Fweb%2Fapi%2Fwebrtc_api%60%0A*+MDN+URL%3A+https%3A%2F%2Fdeveloper.mozilla.org%2Fzh-CN%2Fdocs%2FWeb%2FAPI%2FWebRTC_API%0A*+GitHub+URL%3A+https%3A%2F%2Fgithub.com%2Fmdn%2Ftranslated-content%2Fblob%2Fmain%2Ffiles%2Fzh-cn%2Fweb%2Fapi%2Fwebrtc_api%2Findex.md%0A*+Last+commit%3A+https%3A%2F%2Fgithub.com%2Fmdn%2Ftranslated-content%2Fcommit%2Fe0e89002ec7b7f7ea559eb2a03e2058e3a5f0352%0A*+Document+last+modified%3A+2025-02-07T15%3A57%3A13.000Z%0A%0A%3C%2Fdetails%3E" title="This will take you to GitHub to file a new issue." target="_blank" rel="noopener noreferrer">Report a problem with this content</a></div></div></aside></main></div></div><footer id="nav-footer" class="page-footer"><div class="page-footer-grid"><div class="page-footer-logo-col"><a href="/" class="mdn-footer-logo" aria-label="MDN homepage"><svg width="48" height="17" viewBox="0 0 48 17" fill="none" xmlns="http://www.w3.org/2000/svg"><title id="mdn-footer-logo-svg">MDN logo</title><path d="M20.04 16.512H15.504V10.416C15.504 9.488 15.344 8.824 15.024 8.424C14.72 8.024 14.264 7.824 13.656 7.824C12.92 7.824 12.384 8.064 12.048 8.544C11.728 9.024 11.568 9.64 11.568 10.392V14.184H13.008V16.512H8.472V10.416C8.472 9.488 8.312 8.824 7.992 8.424C7.688 8.024 7.232 7.824 6.624 7.824C5.872 7.824 5.336 8.064 5.016 8.544C4.696 9.024 4.536 9.64 4.536 10.392V14.184H6.6V16.512H0V14.184H1.44V8.04H0.024V5.688H4.536V7.32C5.224 6.088 6.32 5.472 7.824 5.472C8.608 5.472 9.328 5.664 9.984 6.048C10.64 6.432 11.096 7.016 11.352 7.8C11.992 6.248 13.168 5.472 14.88 5.472C15.856 5.472 16.72 5.776 17.472 6.384C18.224 6.992 18.6 7.936 18.6 9.216V14.184H20.04V16.512Z" fill="currentColor"></path><path d="M33.6714 16.512H29.1354V14.496C28.8314 15.12 28.3834 15.656 27.7914 16.104C27.1994 16.536 26.4154 16.752 25.4394 16.752C24.0154 16.752 22.8954 16.264 22.0794 15.288C21.2634 14.312 20.8554 12.984 20.8554 11.304C20.8554 9.688 21.2554 8.312 22.0554 7.176C22.8554 6.04 24.0634 5.472 25.6794 5.472C26.5594 5.472 27.2794 5.648 27.8394 6C28.3994 6.352 28.8314 6.8 29.1354 7.344V2.352H26.9754V0H32.2314V14.184H33.6714V16.512ZM29.1354 11.04V10.776C29.1354 9.88 28.8954 9.184 28.4154 8.688C27.9514 8.176 27.3674 7.92 26.6634 7.92C25.9754 7.92 25.3674 8.176 24.8394 8.688C24.3274 9.2 24.0714 10.008 24.0714 11.112C24.0714 12.152 24.3114 12.944 24.7914 13.488C25.2714 14.032 25.8394 14.304 26.4954 14.304C27.3114 14.304 27.9514 13.96 28.4154 13.272C28.8954 12.584 29.1354 11.84 29.1354 11.04Z" fill="currentColor"></path><path d="M47.9589 16.512H41.9829V14.184H43.4229V10.416C43.4229 9.488 43.2629 8.824 42.9429 8.424C42.6389 8.024 42.1829 7.824 41.5749 7.824C40.8389 7.824 40.2709 8.056 39.8709 8.52C39.4709 8.968 39.2629 9.56 39.2469 10.296V14.184H40.6869V16.512H34.7109V14.184H36.1509V8.04H34.5909V5.688H39.2469V7.344C39.9669 6.096 41.1269 5.472 42.7269 5.472C43.7509 5.472 44.6389 5.776 45.3909 6.384C46.1429 6.992 46.5189 7.936 46.5189 9.216V14.184H47.9589V16.512Z" fill="currentColor"></path></svg></a><p>Your blueprint for a better internet.</p><ul class="social-icons"><li><a href="https://mastodon.social/@mdn" target="_blank" rel="me noopener noreferrer"><span class="icon icon-mastodon"></span><span class="visually-hidden">MDN on Mastodon</span></a></li><li><a href="https://twitter.com/mozdevnet" target="_blank" rel="noopener noreferrer"><span class="icon icon-twitter-x"></span><span class="visually-hidden">MDN on X (formerly Twitter)</span></a></li><li><a href="https://github.com/mdn/" target="_blank" rel="noopener noreferrer"><span class="icon icon-github-mark-small"></span><span class="visually-hidden">MDN on GitHub</span></a></li><li><a href="/en-US/blog/rss.xml" target="_blank"><span class="icon icon-feed"></span><span class="visually-hidden">MDN Blog RSS Feed</span></a></li></ul></div><div class="page-footer-nav-col-1"><h2 class="footer-nav-heading">MDN</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a href="/en-US/about">About</a></li><li class="footer-nav-item"><a href="/en-US/blog/">Blog</a></li><li class="footer-nav-item"><a href="https://www.mozilla.org/en-US/careers/listings/?team=ProdOps" target="_blank" rel="noopener noreferrer">Careers</a></li><li class="footer-nav-item"><a href="/en-US/advertising">Advertise with us</a></li></ul></div><div class="page-footer-nav-col-2"><h2 class="footer-nav-heading">Support</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a class="footer-nav-link" href="https://support.mozilla.org/products/mdn-plus">Product help</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/zh-CN/docs/MDN/Community/Issues">Report an issue</a></li></ul></div><div class="page-footer-nav-col-3"><h2 class="footer-nav-heading">Our communities</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a class="footer-nav-link" href="/en-US/community">MDN Community</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="https://discourse.mozilla.org/c/mdn/236" target="_blank" rel="noopener noreferrer">MDN Forum</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/discord" target="_blank" rel="noopener noreferrer">MDN Chat</a></li></ul></div><div class="page-footer-nav-col-4"><h2 class="footer-nav-heading">Developers</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a class="footer-nav-link" href="/zh-CN/docs/Web">Web Technologies</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/zh-CN/docs/Learn">Learn Web Development</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/zh-CN/plus">MDN Plus</a></li><li class="footer-nav-item"><a href="https://hacks.mozilla.org/" target="_blank" rel="noopener noreferrer">Hacks Blog</a></li></ul></div><div class="page-footer-moz"><a href="https://www.mozilla.org/" class="footer-moz-logo-link" target="_blank" rel="noopener noreferrer"><svg xmlns="http://www.w3.org/2000/svg" width="137" height="32" fill="none" viewBox="0 0 267.431 62.607"><path fill="currentColor" d="m13.913 23.056 5.33 25.356h2.195l5.33-25.356h14.267v38.976h-7.578V29.694h-2.194l-7.264 32.337h-7.343L9.418 29.694H7.223v32.337H-.354V23.056Zm47.137 9.123c9.12 0 14.423 5.385 14.423 15.214s-5.33 15.214-14.423 15.214c-9.12 0-14.423-5.385-14.423-15.214 0-9.855 5.304-15.214 14.423-15.214m0 24.363c4.285 0 6.428-2.196 6.428-7.032v-4.287c0-4.836-2.143-7.032-6.428-7.032s-6.428 2.196-6.428 7.032v4.287c0 4.836 2.143 7.032 6.428 7.032m18.473-.157 15.47-18.01h-15.26v-5.647h24.352v5.646L88.616 56.385h15.704v5.646H79.523Zm29.318-23.657h11.183V62.03h-7.578V38.375h-3.632v-5.646zm3.605-9.672h7.578v5.646h-7.578zm13.17 0h11.21v38.976h-7.578v-33.33h-3.632zm16.801 0H153.6v38.976h-7.577v-33.33h-3.632v-5.646zm29.03 9.123c4.442 0 7.394 2.143 8.231 5.881h2.194v-5.332h9.276v5.646h-3.632v18.011h3.632v5.646h-4.442c-3.135 0-4.834-1.699-4.834-4.836V56.7h-2.194c-.81 3.738-3.789 5.881-8.23 5.881-6.978 0-11.916-5.829-11.916-15.214 0-9.384 4.938-15.187 11.915-15.187m2.3 24.363c4.284 0 6.192-2.196 6.192-7.032v-4.287c0-4.836-1.908-7.032-6.193-7.032-4.18 0-6.193 2.196-6.193 7.032v4.287c0 4.836 2.012 7.032 6.193 7.032m48.34 5.489h-7.577V0h7.577zm6.585-29.643h32.165v-2.196l-21.295-7.634v-6.143l21.295-7.633V6.588h-25.345V0h32.165v12.522l-17.35 5.881V20.6l17.35 5.882v12.521h-38.985zm0-25.801h6.794v6.796h-6.794z"></path></svg></a><ul class="footer-moz-list"><li class="footer-moz-item"><a href="https://www.mozilla.org/privacy/websites/" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Website Privacy Notice</a></li><li class="footer-moz-item"><a href="https://www.mozilla.org/privacy/websites/#cookies" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Cookies</a></li><li class="footer-moz-item"><a href="https://www.mozilla.org/about/legal/terms/mozilla" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Legal</a></li><li class="footer-moz-item"><a href="https://www.mozilla.org/about/governance/policies/participation/" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Community Participation Guidelines</a></li></ul></div><div class="page-footer-legal"><p id="license" class="page-footer-legal-text">Visit<!-- --> <a href="https://www.mozilla.org" target="_blank" rel="noopener noreferrer">Mozilla Corporation’s</a> <!-- -->not-for-profit parent, the<!-- --> <a target="_blank" rel="noopener noreferrer" href="https://foundation.mozilla.org/">Mozilla Foundation</a>.<br/>Portions of this content are ©1998–<!-- -->2025<!-- --> by individual mozilla.org contributors. Content available under<!-- --> <a href="/zh-CN/docs/MDN/Writing_guidelines/Attrib_copyright_license">a Creative Commons license</a>.</p></div></div></footer></div><script type="application/json" id="hydration">{"url":"/zh-CN/docs/Web/API/WebRTC_API","doc":{"body":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<p><strong>WebRTC</strong>(Web 实时通信)是一种使 Web 应用程序和站点能够捕获和选择性地流式传输音频或视频媒体,以及在浏览器之间交换任意数据的而无需中间件的技术。WebRTC 的一系列标准使得在不需要用户安装插件或任何其他第三方软件的情况下,可以实现点对点数据共享和电话会议。</p>\n<p>WebRTC 由几个相互关联的 API 和协议组成,它们共同工作以实现这一目标。你在这里找到的文档将帮助你了解 WebRTC 的基础知识,以及如何设置和使用数据和媒体连接等更多内容。</p>"}},{"type":"prose","value":{"id":"webrtc_概念和用法","title":"WebRTC 概念和用法","isH3":false,"content":"<p>WebRTC 有多种用途;与<a href=\"/zh-CN/docs/Web/API/Media_Capture_and_Streams_API\">媒体捕捉与媒体流 API</a> 一起使用时,它们为 Web 提供了强大的多媒体功能,包括支持音频和视频会议、文件交换、屏幕共享、身份管理以及与传统电话系统的接口,包括发送 <a href=\"/zh-CN/docs/Glossary/DTMF\">DTMF</a>(按键拨号)信号。两个对等方之间的连接可以在不需要任何特殊驱动程序或插件的情况下建立,并且通常可以在没有任何中间服务器的情况下建立连接。</p>\n<p>两个对等方之间的连接由 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a> 接口表示。一旦使用 <code>RTCPeerConnection</code> 建立并打开了连接,就可以向连接添加媒体流(<a href=\"/zh-CN/docs/Web/API/MediaStream\"><code>MediaStream</code></a>)或数据通道(<a href=\"/zh-CN/docs/Web/API/RTCDataChannel\"><code>RTCDataChannel</code></a>)。</p>\n<p>媒体流可以由任意数量的媒体信息轨道组成;轨道由基于 <a href=\"/zh-CN/docs/Web/API/MediaStreamTrack\"><code>MediaStreamTrack</code></a> 接口的对象表示,可以包含多种类型的媒体数据,包括音频、视频和文本(例如字幕甚至章节名称)。大多数流至少包含一个音频轨道和可能也包含一个视频轨道,并且可以用于发送和接收实时媒体或存储的媒体信息(例如流媒体电影)。</p>\n<p>你还可以使用两个对等方之间的连接来交换任意二进制数据,使用 <a href=\"/zh-CN/docs/Web/API/RTCDataChannel\"><code>RTCDataChannel</code></a> 接口。这可以用于反向信道信息、元数据交换、游戏状态数据包、文件传输,甚至作为数据传输的主要通道。</p>"}},{"type":"prose","value":{"id":"互操作性","title":"互操作性","isH3":true,"content":"<p>WebRTC 在现代浏览器中通常得到很好的支持,但仍存在一些不兼容性。<a href=\"https://github.com/webrtcHacks/adapter\" class=\"external\" target=\"_blank\">adapter.js</a> 库是一个可以使应用程序免受这些不兼容性的影响的垫片。</p>"}},{"type":"prose","value":{"id":"webrtc_参考","title":"WebRTC 参考","isH3":false,"content":"<p>由于 WebRTC 提供了一系列共同工作以完成各种任务的接口,我们将参考资料按类别进行了划分。请参阅侧边栏中的按字母顺序排列的列表。</p>"}},{"type":"prose","value":{"id":"连接设置和管理","title":"连接设置和管理","isH3":true,"content":"<p>这些接口、字典和类型用于设置、打开和管理 WebRTC 连接。包括表示对等媒体连接、数据通道和在交换每个对等方的能力信息以选择最佳配置的接口时使用的接口。</p>\n<h4 id=\"接口\">接口</h4>\n<dl>\n<dt id=\"rtcpeerconnection\"><a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a></dt>\n<dd>\n<p>表示本地计算机与远程对等方之间的 WebRTC 连接。它用于处理两个对等方之间的数据流式传输。</p>\n</dd>\n<dt id=\"rtcdatachannel\"><a href=\"/zh-CN/docs/Web/API/RTCDataChannel\"><code>RTCDataChannel</code></a></dt>\n<dd>\n<p>表示连接的两个对等方之间的双向数据通道。</p>\n</dd>\n<dt id=\"rtcdatachannelevent\"><a href=\"/en-US/docs/Web/API/RTCDataChannelEvent\" class=\"only-in-en-us\"><code>RTCDataChannelEvent</code></a></dt>\n<dd>\n<p>表示在将 <a href=\"/zh-CN/docs/Web/API/RTCDataChannel\"><code>RTCDataChannel</code></a> 附加到 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a> 时发生的事件。使用此接口发送的唯一事件是 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/datachannel_event\" title=\"datachannel\"><code>datachannel</code></a>。</p>\n</dd>\n<dt id=\"rtcsessiondescription\"><a href=\"/zh-CN/docs/Web/API/RTCSessionDescription\"><code>RTCSessionDescription</code></a></dt>\n<dd>\n<p>表示会话的参数。每个 <code>RTCSessionDescription</code> 包括一个描述 <a href=\"/en-US/docs/Web/API/RTCSessionDescription/type\" title=\"type\" class=\"only-in-en-us\"><code>type</code></a>,指示其描述的提议/应答协商过程的哪一部分,以及会话的 <a href=\"/zh-CN/docs/Glossary/SDP\">SDP</a> 描述符。</p>\n</dd>\n<dt id=\"rtcstatsreport\"><a href=\"/zh-CN/docs/Web/API/RTCStatsReport\"><code>RTCStatsReport</code></a></dt>\n<dd>\n<p>提供有关连接或连接上的个别轨道的统计信息的详细信息;可以通过调用 <a href=\"/en-US/docs/Web/API/RTCPeerConnection/getStats\" class=\"only-in-en-us\"><code>RTCPeerConnection.getStats()</code></a> 来获取报告。</p>\n</dd>\n<dt id=\"rtcicecandidate\"><a href=\"/zh-CN/docs/Web/API/RTCIceCandidate\"><code>RTCIceCandidate</code></a></dt>\n<dd>\n<p>表示用于建立 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a> 的候选交互式连接建立(<a href=\"/zh-CN/docs/Glossary/ICE\">ICE</a>)服务器。</p>\n</dd>\n<dt id=\"rtcicetransport\"><a href=\"/en-US/docs/Web/API/RTCIceTransport\" class=\"only-in-en-us\"><code>RTCIceTransport</code></a></dt>\n<dd>\n<p>表示有关 <a href=\"/zh-CN/docs/Glossary/ICE\">ICE</a> 传输的信息。</p>\n</dd>\n<dt id=\"rtcpeerconnectioniceevent\"><a href=\"/zh-CN/docs/Web/API/RTCPeerConnectionIceEvent\"><code>RTCPeerConnectionIceEvent</code></a></dt>\n<dd>\n<p>表示与目标 ICE 候选项相关的事件,通常是 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a>。此类型仅有一个事件:<a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/icecandidate_event\" title=\"icecandidate\"><code>icecandidate</code></a>。</p>\n</dd>\n<dt id=\"rtcrtpsender\"><a href=\"/en-US/docs/Web/API/RTCRtpSender\" class=\"only-in-en-us\"><code>RTCRtpSender</code></a></dt>\n<dd>\n<p>管理在 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a> 上的 <a href=\"/zh-CN/docs/Web/API/MediaStreamTrack\"><code>MediaStreamTrack</code></a> 的数据编码和传输。</p>\n</dd>\n<dt id=\"rtcrtpreceiver\"><a href=\"/en-US/docs/Web/API/RTCRtpReceiver\" class=\"only-in-en-us\"><code>RTCRtpReceiver</code></a></dt>\n<dd>\n<p>管理在 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a> 上的 <a href=\"/zh-CN/docs/Web/API/MediaStreamTrack\"><code>MediaStreamTrack</code></a> 的数据接收和解码。</p>\n</dd>\n<dt id=\"rtctrackevent\"><a href=\"/en-US/docs/Web/API/RTCTrackEvent\" class=\"only-in-en-us\"><code>RTCTrackEvent</code></a></dt>\n<dd>\n<p>用于表示 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/track_event\" title=\"track\"><code>track</code></a> 事件的接口,该事件指示已将 <a href=\"/en-US/docs/Web/API/RTCRtpReceiver\" class=\"only-in-en-us\"><code>RTCRtpReceiver</code></a> 对象添加到 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a> 对象,表示已创建并添加了新的传入 <a href=\"/zh-CN/docs/Web/API/MediaStreamTrack\"><code>MediaStreamTrack</code></a> 至 <code>RTCPeerConnection</code>。</p>\n</dd>\n<dt id=\"rtcsctptransport\"><a href=\"/en-US/docs/Web/API/RTCSctpTransport\" class=\"only-in-en-us\"><code>RTCSctpTransport</code></a></dt>\n<dd>\n<p>提供描述流控制传输协议(<strong><a href=\"/zh-CN/docs/Glossary/SCTP\">SCTP</a></strong>)传输的信息,并提供一种访问底层的用于所有 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a> 的数据通道发送和接收的 SCTP 包的数据报传输层安全(<strong><a href=\"/zh-CN/docs/Glossary/DTLS\">DTLS</a></strong>)传输的方式。</p>\n</dd>\n</dl>\n<h4 id=\"事件\">事件</h4>\n<dl>\n<dt id=\"bufferedamountlow\"><a href=\"/en-US/docs/Web/API/RTCDataChannel/bufferedamountlow_event\" title=\"bufferedamountlow\" class=\"only-in-en-us\"><code>bufferedamountlow</code></a></dt>\n<dd>\n<p>表示数据通道当前缓冲的数据量(由其 <a href=\"/en-US/docs/Web/API/RTCDataChannel/bufferedAmount\" title=\"bufferedAmount\" class=\"only-in-en-us\"><code>bufferedAmount</code></a> 属性指示)已经减少到或低于通道的最小缓冲数据大小(由 <a href=\"/en-US/docs/Web/API/RTCDataChannel/bufferedAmountLowThreshold\" title=\"bufferedAmountLowThreshold\" class=\"only-in-en-us\"><code>bufferedAmountLowThreshold</code></a> 指定)。</p>\n</dd>\n<dt id=\"close\"><a href=\"/en-US/docs/Web/API/RTCDataChannel/close_event\" title=\"close\" class=\"only-in-en-us\"><code>close</code></a></dt>\n<dd>\n<p>数据通道已完成关闭过程,现在处于 <code>closed</code> 状态。此时,其底层数据传输完全关闭。你可以通过观察 <code>closing</code> 事件来在关闭完成<em>之前</em>得到通知。</p>\n</dd>\n<dt id=\"closing\"><a href=\"/en-US/docs/Web/API/RTCDataChannel/closing_event\" title=\"closing\" class=\"only-in-en-us\"><code>closing</code></a></dt>\n<dd>\n<p><code>RTCDataChannel</code> 已转换为 <code>closing</code> 状态,表示它将很快关闭。你可以通过观察 <code>close</code> 事件来检测关闭过程的完成。</p>\n</dd>\n<dt id=\"connectionstatechange\"><a href=\"/en-US/docs/Web/API/RTCPeerConnection/connectionstatechange_event\" title=\"connectionstatechange\" class=\"only-in-en-us\"><code>connectionstatechange</code></a></dt>\n<dd>\n<p>连接状态(可以通过 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/connectionState\" title=\"connectionState\"><code>connectionState</code></a> 访问)已更改。</p>\n</dd>\n<dt id=\"datachannel\"><a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/datachannel_event\" title=\"datachannel\"><code>datachannel</code></a></dt>\n<dd>\n<p>有一个新的 <a href=\"/zh-CN/docs/Web/API/RTCDataChannel\"><code>RTCDataChannel</code></a> 在远程对等方打开新数据通道之后可用。此事件的类型是 <a href=\"/en-US/docs/Web/API/RTCDataChannelEvent\" class=\"only-in-en-us\"><code>RTCDataChannelEvent</code></a>。</p>\n</dd>\n<dt id=\"error\"><a href=\"/en-US/docs/Web/API/RTCDataChannel/error_event\" title=\"error\" class=\"only-in-en-us\"><code>error</code></a></dt>\n<dd>\n<p>表示数据通道上发生错误的 <a href=\"/en-US/docs/Web/API/RTCErrorEvent\" class=\"only-in-en-us\"><code>RTCErrorEvent</code></a>。</p>\n</dd>\n<dt id=\"error_2\"><a href=\"/en-US/docs/Web/API/RTCDtlsTransport/error_event\" title=\"error\" class=\"only-in-en-us\"><code>error</code></a></dt>\n<dd>\n<p>表示 <a href=\"/en-US/docs/Web/API/RTCDtlsTransport\" class=\"only-in-en-us\"><code>RTCDtlsTransport</code></a> 上发生错误的 <a href=\"/en-US/docs/Web/API/RTCErrorEvent\" class=\"only-in-en-us\"><code>RTCErrorEvent</code></a>。此错误将是 <code>dtls-failure</code> 或 <code>fingerprint-failure</code>。</p>\n</dd>\n<dt id=\"gatheringstatechange\"><a href=\"/en-US/docs/Web/API/RTCIceTransport/gatheringstatechange_event\" title=\"gatheringstatechange\" class=\"only-in-en-us\"><code>gatheringstatechange</code></a></dt>\n<dd>\n<p><a href=\"/en-US/docs/Web/API/RTCIceTransport\" class=\"only-in-en-us\"><code>RTCIceTransport</code></a> 的收集状态已更改。</p>\n</dd>\n<dt id=\"icecandidate\"><a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/icecandidate_event\" title=\"icecandidate\"><code>icecandidate</code></a></dt>\n<dd>\n<p>每当本地设备识别出一个新的 ICE 候选需要通过调用 <a href=\"/en-US/docs/Web/API/RTCPeerConnection/setLocalDescription\" title=\"setLocalDescription()\" class=\"only-in-en-us\"><code>setLocalDescription()</code></a> 添加到本地对等方时,就会发送的 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnectionIceEvent\"><code>RTCPeerConnectionIceEvent</code></a>。</p>\n</dd>\n<dt id=\"icecandidateerror\"><a href=\"/en-US/docs/Web/API/RTCPeerConnection/icecandidateerror_event\" title=\"icecandidateerror\" class=\"only-in-en-us\"><code>icecandidateerror</code></a></dt>\n<dd>\n<p>表示在收集 ICE 候选时发生错误的 <a href=\"/en-US/docs/Web/API/RTCPeerConnectionIceErrorEvent\" class=\"only-in-en-us\"><code>RTCPeerConnectionIceErrorEvent</code></a>。</p>\n</dd>\n<dt id=\"iceconnectionstatechange\"><a href=\"/en-US/docs/Web/API/RTCPeerConnection/iceconnectionstatechange_event\" title=\"iceconnectionstatechange\" class=\"only-in-en-us\"><code>iceconnectionstatechange</code></a></dt>\n<dd>\n<p>在其 ICE 连接的状态(可通过 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/iceConnectionState\" title=\"iceconnectionstate\"><code>iceconnectionstate</code></a> 属性访问)更改时,会发送给 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a>。</p>\n</dd>\n<dt id=\"icegatheringstatechange\"><a href=\"/en-US/docs/Web/API/RTCPeerConnection/icegatheringstatechange_event\" title=\"icegatheringstatechange\" class=\"only-in-en-us\"><code>icegatheringstatechange</code></a></dt>\n<dd>\n<p>在其 ICE 收集状态(可通过 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/iceGatheringState\" title=\"icegatheringstate\"><code>icegatheringstate</code></a> 属性访问)更改时,会发送给 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a>。</p>\n</dd>\n<dt id=\"message\"><a href=\"/en-US/docs/Web/API/RTCDataChannel/message_event\" title=\"message\" class=\"only-in-en-us\"><code>message</code></a></dt>\n<dd>\n<p>在数据通道上收到消息。该事件的类型为 <a href=\"/zh-CN/docs/Web/API/MessageEvent\"><code>MessageEvent</code></a>。</p>\n</dd>\n<dt id=\"negotiationneeded\"><a href=\"/en-US/docs/Web/API/RTCPeerConnection/negotiationneeded_event\" title=\"negotiationneeded\" class=\"only-in-en-us\"><code>negotiationneeded</code></a></dt>\n<dd>\n<p>通知 <code>RTCPeerConnection</code> 需要通过调用 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/createOffer\" title=\"createOffer()\"><code>createOffer()</code></a>,然后是 <a href=\"/en-US/docs/Web/API/RTCPeerConnection/setLocalDescription\" title=\"setLocalDescription()\" class=\"only-in-en-us\"><code>setLocalDescription()</code></a> 来执行会话协商。</p>\n</dd>\n<dt id=\"open\"><a href=\"/en-US/docs/Web/API/RTCDataChannel/open_event\" title=\"open\" class=\"only-in-en-us\"><code>open</code></a></dt>\n<dd>\n<p><code>RTCDataChannel</code> 的底层数据传输已成功打开或重新打开。</p>\n</dd>\n<dt id=\"selectedcandidatepairchange\"><a href=\"/en-US/docs/Web/API/RTCIceTransport/selectedcandidatepairchange_event\" title=\"selectedcandidatepairchange\" class=\"only-in-en-us\"><code>selectedcandidatepairchange</code></a></dt>\n<dd>\n<p><code>RTCIceTransport</code> 上的当前选择的 ICE 候选对已更改时触发的事件。</p>\n</dd>\n<dt id=\"track\"><a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/track_event\" title=\"track\"><code>track</code></a></dt>\n<dd>\n<p>当成功协商了媒体流的流式传输后,将向 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a> 添加新轨道时,会发送类型为 <a href=\"/en-US/docs/Web/API/RTCTrackEvent\" class=\"only-in-en-us\"><code>RTCTrackevent</code></a> 的 <code>track</code> 事件。</p>\n</dd>\n<dt id=\"signalingstatechange\"><a href=\"/en-US/docs/Web/API/RTCPeerConnection/signalingstatechange_event\" title=\"signalingstatechange\" class=\"only-in-en-us\"><code>signalingstatechange</code></a></dt>\n<dd>\n<p>在其 <a href=\"/en-US/docs/Web/API/RTCPeerConnection/signalingState\" title=\"signalingstate\" class=\"only-in-en-us\"><code>signalingstate</code></a> 更改时,会发送到对等连接。这是由于调用 <a href=\"/en-US/docs/Web/API/RTCPeerConnection/setLocalDescription\" title=\"setLocalDescription()\" class=\"only-in-en-us\"><code>setLocalDescription()</code></a> 或 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/setRemoteDescription\" title=\"setRemoteDescription()\"><code>setRemoteDescription()</code></a> 引起的。</p>\n</dd>\n<dt id=\"statechange\"><a title=\"此文档尚未被撰写,期待你的贡献!\" class=\"page-not-created\" data-href=\"/zh-CN/docs/Web/API/RTCDtlsTransport/statechange_event\"><code>statechange</code></a></dt>\n<dd>\n<p><code>RTCDtlsTransport</code> 的状态已更改。</p>\n</dd>\n<dt id=\"statechange_2\"><a href=\"/en-US/docs/Web/API/RTCIceTransport/statechange_event\" title=\"statechange\" class=\"only-in-en-us\"><code>statechange</code></a></dt>\n<dd>\n<p><code>RTCIceTransport</code> 的状态已更改。</p>\n</dd>\n<dt id=\"statechange_3\"><a href=\"/en-US/docs/Web/API/RTCSctpTransport/statechange_event\" title=\"statechange\" class=\"only-in-en-us\"><code>statechange</code></a></dt>\n<dd>\n<p><code>RTCSctpTransport</code> 的状态已更改。</p>\n</dd>\n<dt id=\"rtctransform\"><a href=\"/en-US/docs/Web/API/DedicatedWorkerGlobalScope/rtctransform_event\" title=\"rtctransform\" class=\"only-in-en-us\"><code>rtctransform</code></a></dt>\n<dd>\n<p>编码的视频或音频帧已准备好在 worker 中使用转换流进行处理。</p>\n</dd>\n</dl>\n<h4 id=\"类型\">类型</h4>\n<dl>\n<dt id=\"rtcsctptransport.state\"><a href=\"/en-US/docs/Web/API/RTCSctpTransport/state\" class=\"only-in-en-us\"><code>RTCSctpTransport.state</code></a></dt>\n<dd>\n<p>指示 <a href=\"/en-US/docs/Web/API/RTCSctpTransport\" class=\"only-in-en-us\"><code>RTCSctpTransport</code></a> 实例的状态。</p>\n</dd>\n</dl>"}},{"type":"prose","value":{"id":"身份和安全","title":"身份和安全","isH3":true,"content":"<p>这些 API 用于管理用户身份和安全性,以便为连接认证用户。</p>\n<dl>\n<dt id=\"rtcidentityprovider\"><a class=\"page-not-created\" data-href=\"/zh-CN/docs/Web/API/RTCIdentityProvider\" title=\"此文档尚未被撰写,期待你的贡献!\"><code>RTCIdentityProvider</code></a></dt>\n<dd>\n<p>使用户代理能够请求生成或验证身份断言。</p>\n</dd>\n<dt id=\"rtcidentityassertion\"><a href=\"/en-US/docs/Web/API/RTCIdentityAssertion\" class=\"only-in-en-us\"><code>RTCIdentityAssertion</code></a></dt>\n<dd>\n<p>表示当前连接的远程对等方的身份。如果尚未设置和验证对等方,则此接口返回 <code>null</code>。一旦设置,便无法更改。</p>\n</dd>\n<dt id=\"rtcidentityproviderregistrar\"><a class=\"page-not-created\" data-href=\"/zh-CN/docs/Web/API/RTCIdentityProviderRegistrar\" title=\"此文档尚未被撰写,期待你的贡献!\"><code>RTCIdentityProviderRegistrar</code></a></dt>\n<dd>\n<p>注册身份提供商(IdP)。</p>\n</dd>\n<dt id=\"rtccertificate\"><a href=\"/en-US/docs/Web/API/RTCCertificate\" class=\"only-in-en-us\"><code>RTCCertificate</code></a></dt>\n<dd>\n<p>表示 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a> 用于身份验证的证书。</p>\n</dd>\n</dl>"}},{"type":"prose","value":{"id":"电话","title":"电话","isH3":true,"content":"<h4 id=\"接口_2\">接口</h4>\n<dl>\n<dt id=\"rtcdtmfsender\"><a href=\"/en-US/docs/Web/API/RTCDTMFSender\" class=\"only-in-en-us\"><code>RTCDTMFSender</code></a></dt>\n<dd>\n<p>管理 <a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a> 的双音多频(DTMF)信号的编码和传输。</p>\n</dd>\n<dt id=\"rtcdtmftonechangeevent\"><a href=\"/en-US/docs/Web/API/RTCDTMFToneChangeEvent\" class=\"only-in-en-us\"><code>RTCDTMFToneChangeEvent</code></a></dt>\n<dd>\n<p>由 <a href=\"/zh-CN/docs/Web/API/RTCDTMFSender/tonechange_event\" title=\"tonechange\"><code>tonechange</code></a> 事件使用,指示 DTMF 音调已开始或结束。此事件不冒泡(除非另有说明),也不可取消(除非另有说明)。</p>\n</dd>\n</dl>\n<h4 id=\"事件_2\">事件</h4>\n<dl>\n<dt id=\"tonechange\"><a href=\"/zh-CN/docs/Web/API/RTCDTMFSender/tonechange_event\" title=\"tonechange\"><code>tonechange</code></a></dt>\n<dd>\n<p>连接上已开始播放新的 DTMF 音调,或者 <code>RTCDTMFSender</code> 的 <a href=\"/en-US/docs/Web/API/RTCDTMFSender/toneBuffer\" title=\"toneBuffer\" class=\"only-in-en-us\"><code>toneBuffer</code></a> 中的最后一个音调已发送,且缓冲区现在为空。事件的类型为 <a href=\"/en-US/docs/Web/API/RTCDTMFToneChangeEvent\" class=\"only-in-en-us\"><code>RTCDTMFToneChangeEvent</code></a>。</p>\n</dd>\n</dl>"}},{"type":"prose","value":{"id":"编码转换","title":"编码转换","isH3":true,"content":"<p>这些接口和事件用于使用在 worker 中运行的转换流处理传入和传出的编码视频和音频帧。</p>\n<h4 id=\"接口_3\">接口</h4>\n<dl>\n<dt id=\"rtcrtpscripttransform\"><a href=\"/en-US/docs/Web/API/RTCRtpScriptTransform\" class=\"only-in-en-us\"><code>RTCRtpScriptTransform</code></a></dt>\n<dd>\n<p>用于将 worker 中运行的转换流插入 RTC 流水线的接口。</p>\n</dd>\n<dt id=\"rtcrtpscripttransformer\"><a href=\"/en-US/docs/Web/API/RTCRtpScriptTransformer\" class=\"only-in-en-us\"><code>RTCRtpScriptTransformer</code></a></dt>\n<dd>\n<p><code>RTCRtpScriptTransform</code> 的 worker 对应项,传递来自主线程的选项,以及可用于通过 <a href=\"/zh-CN/docs/Web/API/TransformStream\"><code>TransformStream</code></a> 传递编码帧的可读流和可写流。</p>\n</dd>\n<dt id=\"rtcencodedvideoframe\"><a href=\"/en-US/docs/Web/API/RTCEncodedVideoFrame\" class=\"only-in-en-us\"><code>RTCEncodedVideoFrame</code></a></dt>\n<dd>\n<p>表示要在 RTC 流水线中进行转换的编码视频帧。</p>\n</dd>\n<dt id=\"rtcencodedaudioframe\"><a href=\"/en-US/docs/Web/API/RTCEncodedAudioFrame\" class=\"only-in-en-us\"><code>RTCEncodedAudioFrame</code></a></dt>\n<dd>\n<p>表示要在 RTC 流水线中进行转换的编码音频帧。</p>\n</dd>\n</dl>\n<h4 id=\"属性\">属性</h4>\n<dl>\n<dt id=\"rtcrtpreceiver.transform\"><a href=\"/en-US/docs/Web/API/RTCRtpReceiver/transform\" class=\"only-in-en-us\"><code>RTCRtpReceiver.transform</code></a></dt>\n<dd>\n<p>用于将转换流插入接收器流水线以处理传入的编码视频和音频帧的属性。</p>\n</dd>\n<dt id=\"rtcrtpsender.transform\"><a href=\"/en-US/docs/Web/API/RTCRtpSender/transform\" class=\"only-in-en-us\"><code>RTCRtpSender.transform</code></a></dt>\n<dd>\n<p>用于将转换流插入发送器流水线以处理传出的编码视频和音频帧的属性。</p>\n</dd>\n</dl>\n<h4 id=\"事件_3\">事件</h4>\n<dl>\n<dt id=\"rtctransform_2\"><a href=\"/en-US/docs/Web/API/DedicatedWorkerGlobalScope/rtctransform_event\" title=\"rtctransform\" class=\"only-in-en-us\"><code>rtctransform</code></a></dt>\n<dd>\n<p>RTC 转换已准备好在 worker 中运行,或者已准备处理编码视频或音频帧时触发的事件。</p>\n</dd>\n</dl>"}},{"type":"prose","value":{"id":"指南","title":"指南","isH3":false,"content":"<dl>\n<dt id=\"webrtc_协议简介\"><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Protocols\">WebRTC 协议简介</a></dt>\n<dd>\n<p>本文介绍了构建 WebRTC API 的底层协议。</p>\n</dd>\n<dt id=\"webrtc_连接\"><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Connectivity\">WebRTC 连接</a></dt>\n<dd>\n<p>介绍了 WebRTC 连接的工作原理以及如何将各种协议和接口结合起来以构建功能强大的通信应用程序的指南。</p>\n</dd>\n<dt id=\"webrtc_会话的生命周期\"><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Session_lifetime\">WebRTC 会话的生命周期</a></dt>\n<dd>\n<p>WebRTC 允许你在浏览器应用程序中构建任意数据、音频或视频(或其中的任意组合)的点对点通信。在本文中,我们将从建立连接一直到关闭连接(不再需要时)的整个 WebRTC 会话生命周期进行探讨。</p>\n</dd>\n<dt id=\"建立连接:完美协商模式\"><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Perfect_negotiation\">建立连接:完美协商模式</a></dt>\n<dd>\n<p><strong>完美协商</strong>是一种建议你的信令流程遵循的设计模式,它在协商过程中提供了透明性,同时允许双方都是提供方或应答方,而无需进行大量的编码来区分两者。</p>\n</dd>\n<dt id=\"信令和双向视频通话\"><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Signaling_and_video_calling\">信令和双向视频通话</a></dt>\n<dd>\n<p>它将一个之前的示例创建的、基于 WebSocket 的聊天系统转换为教程和示例,并添加了参与者之间进行视频通话的支持。聊天服务器的 WebSocket 连接用于 WebRTC 信令。</p>\n</dd>\n<dt id=\"webrtc_使用的编解码器\"><a href=\"/en-US/docs/Web/Media/Guides/Formats/WebRTC_codecs\" class=\"only-in-en-us\">WebRTC 使用的编解码器</a></dt>\n<dd>\n<p>介绍了 WebRTC 需要浏览器支持的编解码器以及各种流行浏览器支持的可选编解码器。本文还包括了一个帮助你选择最适合你需求的编解码器的指南。</p>\n</dd>\n<dt id=\"使用_webrtc_数据通道\"><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Using_data_channels\">使用 WebRTC 数据通道</a></dt>\n<dd>\n<p>本指南介绍了如何使用对等连接和相关的 <a href=\"/zh-CN/docs/Web/API/RTCDataChannel\"><code>RTCDataChannel</code></a> 在两个对等方之间交换任意数据。</p>\n</dd>\n<dt id=\"在_webrtc_中使用_dtmf\"><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Using_DTMF\">在 WebRTC 中使用 DTMF</a></dt>\n<dd>\n<p>WebRTC 与连接到老式电话系统的网关进行交互的支持,包括使用 <a href=\"/en-US/docs/Web/API/RTCDTMFSender\" class=\"only-in-en-us\"><code>RTCDTMFSender</code></a> 接口发送 DTMF 音调。本指南展示了如何做到这一点。</p>\n</dd>\n<dt id=\"使用_webrtc_编码转换\"><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Using_Encoded_Transforms\">使用 WebRTC 编码转换</a></dt>\n<dd>\n<p>本指南展示了一个 Web 应用程序如何使用在 worker 中运行的 <a href=\"/zh-CN/docs/Web/API/TransformStream\"><code>TransformStream</code></a> 来修改传入和传出的 WebRTC 编码视频和音频帧。</p>\n</dd>\n</dl>"}},{"type":"prose","value":{"id":"教程","title":"教程","isH3":false,"content":"<dl>\n<dt id=\"使用_webrtc_adapter.js_改善兼容性\"><a href=\"#互操作性\">使用 WebRTC adapter.js 改善兼容性</a></dt>\n<dd>\n<p>WebRTC 组织<a href=\"https://github.com/webrtc/adapter/\" class=\"external\" target=\"_blank\">在 GitHub 上提供了 WebRTC 适配器</a>来解决不同浏览器的 WebRTC 实现的兼容性问题。适配器是一个 JavaScript 垫片,使你的代码只需按照规范编写,便可以在所有支持 WebRTC 的浏览器中“正常工作”。</p>\n</dd>\n<dt id=\"rtcdatachannel_简单示例\"><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Simple_RTCDataChannel_sample\">RTCDataChannel 简单示例</a></dt>\n<dd>\n<p><a href=\"/zh-CN/docs/Web/API/RTCDataChannel\"><code>RTCDataChannel</code></a> 接口是一个允许你在两个对等方之间打开一个通道(通过该通道你可以发送和接收任意数据)的特性。API 故意设计成与 <a href=\"/zh-CN/docs/Web/API/WebSockets_API\">WebSocket API</a> 类似,以便可以使用相同的编程模型。</p>\n</dd>\n<dt id=\"使用_peer.js_构建联网电话\"><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Build_a_phone_with_peerjs\">使用 Peer.js 构建联网电话</a></dt>\n<dd>\n<p>本教程将逐步指导你如何使用 Peer.js 构建电话。</p>\n</dd>\n</dl>"}},{"type":"specifications","value":{"id":"规范","title":"规范","isH3":false,"specifications":[{"bcdSpecificationURL":"https://w3c.github.io/webrtc-pc/","title":"WebRTC: Real-Time Communication in Browsers"},{"bcdSpecificationURL":"https://w3c.github.io/mediacapture-main/","title":"Media Capture and Streams"},{"bcdSpecificationURL":"https://w3c.github.io/mediacapture-fromelement/","title":"Media Capture from DOM Elements"}],"query":"undefined"}},{"type":"prose","value":{"id":"webrtc_相关协议","title":"WebRTC 相关协议","isH3":true,"content":"<ul>\n<li><a href=\"https://datatracker.ietf.org/doc/rfc8833/\" class=\"external\" target=\"_blank\">Web 实时通信的应用层协议协商</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/rfc7874/\" class=\"external\" target=\"_blank\">WebRTC 音频编解码器和处理要求</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/rfc8831/\" class=\"external\" target=\"_blank\">RTCWeb 数据通道</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/rfc8832/\" class=\"external\" target=\"_blank\">RTCWeb 数据通道协议</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/rfc8834/\" class=\"external\" target=\"_blank\">Web 实时通信(WebRTC):媒体传输和 RTP 的使用</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/rfc8827/\" class=\"external\" target=\"_blank\">WebRTC 安全架构</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/rfc8835/\" class=\"external\" target=\"_blank\">RTCWEB 的传输</a></li>\n</ul>"}},{"type":"prose","value":{"id":"相关支持协议","title":"相关支持协议","isH3":true,"content":"<ul>\n<li><a href=\"https://datatracker.ietf.org/doc/html/rfc5245\" class=\"external\" target=\"_blank\">交互式连接建立(ICE):用于网络地址转换器(NAT)穿越的协议</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/html/rfc5389\" class=\"external\" target=\"_blank\">NAT 会话穿越应用程序(STUN)</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/html/rfc7064\" class=\"external\" target=\"_blank\">NAT 会话穿越应用程序(STUN)的 URI 方案协议</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/html/rfc7065\" class=\"external\" target=\"_blank\">绕过 NAT 的中继穿越(TURN)的统一资源标识符</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/html/rfc3264\" class=\"external\" target=\"_blank\">具有会话描述协议(SDP)的提供/应答模型</a></li>\n<li><a href=\"https://datatracker.ietf.org/doc/rfc7635/\" class=\"external\" target=\"_blank\">NAT 会话穿越应用程序(STUN)的第三方认证扩展</a></li>\n</ul>"}},{"type":"prose","value":{"id":"参见","title":"参见","isH3":false,"content":"<ul>\n<li><a href=\"/zh-CN/docs/Web/API/MediaDevices\"><code>MediaDevices</code></a></li>\n<li><a href=\"/zh-CN/docs/Web/API/MediaStreamEvent\"><code>MediaStreamEvent</code></a></li>\n<li><a href=\"/zh-CN/docs/Web/API/MediaStreamTrack\"><code>MediaStreamTrack</code></a></li>\n<li><a href=\"/zh-CN/docs/Web/API/MessageEvent\"><code>MessageEvent</code></a></li>\n<li><a href=\"/zh-CN/docs/Web/API/MediaStream\"><code>MediaStream</code></a></li>\n<li><a href=\"/zh-CN/docs/Web/API/Media_Capture_and_Streams_API\">媒体捕捉与媒体流 API</a></li>\n<li><a href=\"https://hacks.mozilla.org/2015/06/firefox-multistream-and-renegotiation-for-jitsi-videobridge/\" class=\"external\" target=\"_blank\">Firefox 多流和 Jitsi Videobridge 的重新协商</a></li>\n<li><a href=\"https://hacks.mozilla.org/2015/04/peering-through-the-webrtc-fog-with-socketpeer/\" class=\"external\" target=\"_blank\">使用 SocketPeer 拨开 WebRTC 迷雾</a></li>\n<li><a href=\"https://hacks.mozilla.org/2014/04/inside-the-party-bus-building-a-web-app-with-multiple-live-video-streams-interactive-graphics/\" class=\"external\" target=\"_blank\">Party Bus 内部:构建具有多个实时视频流和交互式图形的 Web 应用</a></li>\n<li><a href=\"/zh-CN/docs/Web/Media\">Web 媒体技术</a></li>\n</ul>"}}],"isActive":true,"isMarkdown":true,"isTranslated":true,"locale":"zh-CN","mdn_url":"/zh-CN/docs/Web/API/WebRTC_API","modified":"2025-02-07T15:57:13.000Z","native":"中文 (简体)","noIndexing":false,"other_translations":[{"locale":"en-US","title":"WebRTC API","native":"English (US)"},{"locale":"de","title":"WebRTC API","native":"Deutsch"},{"locale":"es","title":"API de WebRTC","native":"Español"},{"locale":"fr","title":"L'API WebRTC","native":"Français"},{"locale":"ja","title":"WebRTC API","native":"日本語"},{"locale":"ko","title":"WebRTC API","native":"한국어"},{"locale":"pt-BR","title":"WebRTC API","native":"Português (do Brasil)"},{"locale":"ru","title":"WebRTC API","native":"Русский"}],"pageTitle":"WebRTC API - Web API | MDN","parents":[{"uri":"/zh-CN/docs/Web","title":"面向开发者的 Web 技术"},{"uri":"/zh-CN/docs/Web/API","title":"Web API"},{"uri":"/zh-CN/docs/Web/API/WebRTC_API","title":"WebRTC API"}],"popularity":null,"short_title":"WebRTC API","sidebarHTML":"<ol><li class=\"section\"><em><a href=\"/zh-CN/docs/Web/API/WebRTC_API\" aria-current=\"page\">WebRTC API</a></em></li><li class=\"toggle\"><details open=\"\"><summary>指南</summary><ol><li><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Protocols\">WebRTC 协议介绍</a></li><li><a href=\"/en-US/docs/Web/API/WebRTC_API/Intro_to_RTP\" class=\"only-in-en-us\">Introduction to the Real-time Transport Protocol (RTP)</a></li><li><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Connectivity\">WebRTC connectivity</a></li><li><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Perfect_negotiation\">建立连接:WebRTC 完美协商模式</a></li><li><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Session_lifetime\">WebRTC 介绍</a></li><li><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Signaling_and_video_calling\">信令与视频通话</a></li><li><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Using_data_channels\">使用 WebRTC 数据通道</a></li><li><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Using_DTMF\">在 WebRTC 中使用 DTMF</a></li><li><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Using_Encoded_Transforms\">使用 WebRTC 编码转换</a></li><li><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Simple_RTCDataChannel_sample\">RTCDataChannel 简单示例</a></li><li><a href=\"/zh-CN/docs/Web/API/WebRTC_API/Build_a_phone_with_peerjs\">使用 PeerJS 构建一部联网电话</a></li></ol></details></li><li class=\"toggle\"><details open=\"\"><summary>接口</summary><ol><li><a href=\"/zh-CN/docs/Web/API/RTCPeerConnection\"><code>RTCPeerConnection</code></a></li><li><a href=\"/zh-CN/docs/Web/API/RTCSessionDescription\"><code>RTCSessionDescription</code></a></li><li><a href=\"/zh-CN/docs/Web/API/RTCIceCandidate\"><code>RTCIceCandidate</code></a></li><li><a href=\"/zh-CN/docs/Web/API/RTCPeerConnectionIceEvent\"><code>RTCPeerConnectionIceEvent</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCPeerConnectionIceErrorEvent\" class=\"only-in-en-us\"><code>RTCPeerConnectionIceErrorEvent</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCCertificate\" class=\"only-in-en-us\"><code>RTCCertificate</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCRtpSender\" class=\"only-in-en-us\"><code>RTCRtpSender</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCRtpReceiver\" class=\"only-in-en-us\"><code>RTCRtpReceiver</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCRtpTransceiver\" class=\"only-in-en-us\"><code>RTCRtpTransceiver</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDtlsTransport\" class=\"only-in-en-us\"><code>RTCDtlsTransport</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCIceTransport\" class=\"only-in-en-us\"><code>RTCIceTransport</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCTrackEvent\" class=\"only-in-en-us\"><code>RTCTrackEvent</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCSctpTransport\" class=\"only-in-en-us\"><code>RTCSctpTransport</code></a></li><li><a href=\"/zh-CN/docs/Web/API/RTCDataChannel\"><code>RTCDataChannel</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDataChannelEvent\" class=\"only-in-en-us\"><code>RTCDataChannelEvent</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDTMFSender\" class=\"only-in-en-us\"><code>RTCDTMFSender</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDTMFToneChangeEvent\" class=\"only-in-en-us\"><code>RTCDTMFToneChangeEvent</code></a></li><li><a href=\"/zh-CN/docs/Web/API/RTCStatsReport\"><code>RTCStatsReport</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCErrorEvent\" class=\"only-in-en-us\"><code>RTCErrorEvent</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCRtpScriptTransform\" class=\"only-in-en-us\"><code>RTCRtpScriptTransform</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCRtpScriptTransformer\" class=\"only-in-en-us\"><code>RTCRtpScriptTransformer</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCEncodedVideoFrame\" class=\"only-in-en-us\"><code>RTCEncodedVideoFrame</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCEncodedAudioFrame\" class=\"only-in-en-us\"><code>RTCEncodedAudioFrame</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCTransformEvent\" class=\"only-in-en-us\"><code>RTCTransformEvent</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCIceParameters\" class=\"only-in-en-us\"><code>RTCIceParameters</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCIceCandidatePair\" class=\"only-in-en-us\"><code>RTCIceCandidatePair</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCIceCandidatePairStats\" class=\"only-in-en-us\"><code>RTCIceCandidatePairStats</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCInboundRtpStreamStats\" class=\"only-in-en-us\"><code>RTCInboundRtpStreamStats</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCIceCandidateStats\" class=\"only-in-en-us\"><code>RTCIceCandidateStats</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCAudioSourceStats\" class=\"only-in-en-us\"><code>RTCAudioSourceStats</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCVideoSourceStats\" class=\"only-in-en-us\"><code>RTCVideoSourceStats</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCCodecStats\" class=\"only-in-en-us\"><code>RTCCodecStats</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDataChannelStats\" class=\"only-in-en-us\"><code>RTCDataChannelStats</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCOutboundRtpStreamStats\" class=\"only-in-en-us\"><code>RTCOutboundRtpStreamStats</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCPeerConnectionStats\" class=\"only-in-en-us\"><code>RTCPeerConnectionStats</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCRemoteInboundRtpStreamStats\" class=\"only-in-en-us\"><code>RTCRemoteInboundRtpStreamStats</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCRemoteOutboundRtpStreamStats\" class=\"only-in-en-us\"><code>RTCRemoteOutboundRtpStreamStats</code></a></li></ol></details></li><li class=\"toggle\"><details open=\"\"><summary>属性</summary><ol><li><a href=\"/zh-CN/docs/Web/API/Navigator/mediaDevices\"><code>Navigator.mediaDevices</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCRtpReceiver/transform\" class=\"only-in-en-us\"><code>RTCRtpReceiver.transform</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCRtpSender/transform\" class=\"only-in-en-us\"><code>RTCRtpSender.transform</code></a></li></ol></details></li><li class=\"toggle\"><details open=\"\"><summary>方法</summary><ol><li><a href=\"/zh-CN/docs/Web/API/MediaDevices/getUserMedia\"><code>MediaDevices.getUserMedia()</code></a></li></ol></details></li><li class=\"toggle\"><details open=\"\"><summary>事件</summary><ol><li><a href=\"/en-US/docs/Web/API/RTCDataChannel/bufferedamountlow_event\" class=\"only-in-en-us\"><code>RTCDataChannel: bufferedamountlow</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDataChannel/close_event\" class=\"only-in-en-us\"><code>RTCDataChannel: close</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDataChannel/closing_event\" class=\"only-in-en-us\"><code>RTCDataChannel: closing</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCPeerConnection/connectionstatechange_event\" class=\"only-in-en-us\"><code>RTCPeerConnection: connectionstatechange</code></a></li><li><a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/datachannel_event\"><code>RTCPeerConnection: datachannel</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDataChannel/error_event\" class=\"only-in-en-us\"><code>RTCDataChannel: error</code></a></li><li><a class=\"page-not-created\" data-href=\"/zh-CN/docs/Web/API/RTCIceTransport/error_event\" title=\"此文档尚未被撰写,期待你的贡献!\"><code>RTCIceTransport: error</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDtlsTransport/error_event\" class=\"only-in-en-us\"><code>RTCDtlsTransport: error</code></a></li><li><a class=\"page-not-created\" data-href=\"/zh-CN/docs/Web/API/RTCSctpTransport/error_event\" title=\"此文档尚未被撰写,期待你的贡献!\"><code>RTCSctpTransport: error</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCIceTransport/gatheringstatechange_event\" class=\"only-in-en-us\"><code>RTCIceTransport: gatheringstatechange</code></a></li><li><a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/icecandidate_event\"><code>RTCPeerConnection: icecandidate</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCPeerConnection/icecandidateerror_event\" class=\"only-in-en-us\"><code>RTCPeerConnection: icecandidateerror</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCPeerConnection/iceconnectionstatechange_event\" class=\"only-in-en-us\"><code>RTCPeerConnection: iceconnectionstatechange</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCPeerConnection/icegatheringstatechange_event\" class=\"only-in-en-us\"><code>RTCPeerConnection: icegatheringstatechange</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDataChannel/message_event\" class=\"only-in-en-us\"><code>RTCDataChannel: message</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCPeerConnection/negotiationneeded_event\" class=\"only-in-en-us\"><code>RTCPeerConnection: negotiationneeded</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCDataChannel/open_event\" class=\"only-in-en-us\"><code>RTCDataChannel: open</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCIceTransport/selectedcandidatepairchange_event\" class=\"only-in-en-us\"><code>RTCIceTransport: selectedcandidatepairchange</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCPeerConnection/signalingstatechange_event\" class=\"only-in-en-us\"><code>RTCPeerConnection: signalingstatechange</code></a></li><li><a href=\"/en-US/docs/Web/API/RTCIceTransport/statechange_event\" class=\"only-in-en-us\"><code>RTCIceTransport: statechange</code></a></li><li><a class=\"page-not-created\" data-href=\"/zh-CN/docs/Web/API/RTCDtlsTransport/statechange_event\" title=\"此文档尚未被撰写,期待你的贡献!\"><code>RTCDtlsTransport: statechange</code></a></li><li><a href=\"/zh-CN/docs/Web/API/RTCDTMFSender/tonechange_event\"><code>RTCDTMFSender: tonechange</code></a></li><li><a href=\"/zh-CN/docs/Web/API/RTCPeerConnection/track_event\"><code>RTCPeerConnection: track</code></a></li><li><a href=\"/en-US/docs/Web/API/DedicatedWorkerGlobalScope/rtctransform_event\" class=\"only-in-en-us\"><code>DedicatedWorkerGlobalScope: rtctransform</code></a></li></ol></details></li></ol>","source":{"folder":"zh-cn/web/api/webrtc_api","github_url":"https://github.com/mdn/translated-content/blob/main/files/zh-cn/web/api/webrtc_api/index.md","last_commit_url":"https://github.com/mdn/translated-content/commit/e0e89002ec7b7f7ea559eb2a03e2058e3a5f0352","filename":"index.md"},"summary":"WebRTC(Web 实时通信)是一种使 Web 应用程序和站点能够捕获和选择性地流式传输音频或视频媒体,以及在浏览器之间交换任意数据的而无需中间件的技术。WebRTC 的一系列标准使得在不需要用户安装插件或任何其他第三方软件的情况下,可以实现点对点数据共享和电话会议。","title":"WebRTC API","toc":[{"text":"WebRTC 概念和用法","id":"webrtc_概念和用法"},{"text":"WebRTC 参考","id":"webrtc_参考"},{"text":"指南","id":"指南"},{"text":"教程","id":"教程"},{"text":"规范","id":"规范"},{"text":"参见","id":"参见"}],"pageType":"web-api-overview"}}</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10