-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathandroid.html
More file actions
130 lines (127 loc) · 86 KB
/
android.html
File metadata and controls
130 lines (127 loc) · 86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-android docs-doc-id-usage" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v2.4.3">
<title data-rh="true">Usage | SwarmCloud Docs</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://www.swarmcloud.net/home/logo/logo.webp"><meta data-rh="true" name="twitter:image" content="https://www.swarmcloud.net/home/logo/logo.webp"><meta data-rh="true" property="og:url" content="https://www.swarmcloud.net/home/android"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="keywords" content="swarmcloud, cdnbye, peer5, streamroot, p2p, webrtc, hls, m3u8, mp4, dplayer, videojs, clappr, web p2p, android p2p, ios p2p, vod, live, video"><meta data-rh="true" name="cryptomus" content="4385600b"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-android-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-android-current"><meta data-rh="true" property="og:title" content="Usage | SwarmCloud Docs"><meta data-rh="true" name="description" content="Environment Configuration"><meta data-rh="true" property="og:description" content="Environment Configuration"><link data-rh="true" rel="icon" href="/home/favicon.ico"><link data-rh="true" rel="canonical" href="https://www.swarmcloud.net/home/android"><link data-rh="true" rel="alternate" href="https://www.swarmcloud.net/home/android" hreflang="en"><link data-rh="true" rel="alternate" href="https://www.swarmcloud.net/home/android" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://XECAYCM7G7-dsn.algolia.net" crossorigin="anonymous"><link rel="preconnect" href="https://www.google-analytics.com">
<link rel="preconnect" href="https://www.googletagmanager.com">
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-10834653519"></script>
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","AW-10834653519",{})</script>
<link rel="search" type="application/opensearchdescription+xml" title="SwarmCloud Docs" href="/home/opensearch.xml"><link rel="stylesheet" href="/home/assets/css/styles.9b5c9c1f.css">
<link rel="preload" href="/home/assets/js/runtime~main.053b99cf.js" as="script">
<link rel="preload" href="/home/assets/js/main.f99e750f.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"dark")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/home/"><div class="navbar__logo"><img src="/home/img/logo.webp" alt="SwarmCloud Docs" class="themedImage_ToTc themedImage--light_HNdA" height="32px" width="32px"><img src="/home/img/logo.webp" alt="SwarmCloud Docs" class="themedImage_ToTc themedImage--dark_i4oU" height="32px" width="32px"></div></a><a class="navbar__item navbar__link guides-top-header" href="/home/guides/getting-started">Guides</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link dyte-dropdown">SDKs</a><ul class="dropdown__menu"><li class="dyte-dropdown"><script>function showMenu(o){document.body.classList.remove("web","mobile","desktop","plugin"),document.body.classList.add(o)}window.showMenu=showMenu</script>
<div class="sdks-dropdown flex max-w-lg flex-col rounded-2xl lg:min-w-[768px]">
<div class="flex flex-col bg-secondary-800 p-4 lg:min-h-[300px] lg:flex-row">
<div class="flex flex-1 flex-col gap-8 rounded-xl bg-secondary-1000 p-6">
<a data-dropdown-sdks-menu="web" onfocus='document.body.setAttribute("data-sdk-menu","web")' onmouseover='document.body.setAttribute("data-sdk-menu","web")' class="flex cursor-pointer items-start justify-start gap-2 border-none bg-transparent text-black dark:text-white">
<div class="flex-shrink-0">
<img src="/home/static/landing-page/sdk-icons/resources/web.svg" class="h-6 w-6">
</div>
<div class="flex flex-col items-start justify-start gap-1">
<div class="text-base font-semibold">Web</div>
<p class="mb-0 text-left text-sm text-text-400">
SDK for Web Browser and Electron
</p>
</div>
</a>
<a data-dropdown-sdks-menu="mobile" onfocus='document.body.setAttribute("data-sdk-menu","mobile")' onmouseover='document.body.setAttribute("data-sdk-menu","mobile")' class="flex cursor-pointer items-start justify-start gap-2 border-none bg-transparent text-black dark:text-white">
<div class="flex-shrink-0">
<img src="/home/static/landing-page/sdk-icons/resources/mobile.svg" class="h-6 w-6">
</div>
<div class="flex flex-col items-start justify-start gap-1">
<div class="text-base font-semibold">Mobile</div>
<p class="mb-0 text-left text-sm text-text-400">
SDK for Mobile and TV platform
</p>
</div>
</a>
</div>
<div class="flex-1 pl-6">
<div class="flex flex-col gap-2" data-dropdown-sdks="web">
<div class="flex flex-1 flex-col">
<ul class="sdk-ul">
<li>
<a href="/home/web-hls" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/js.png">
Hls.js Built-in Players
</a>
<a href="/home/vhs" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/js.png">
Video.js(vhs)
</a>
<a href="/home/shaka" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/js.png">
Shaka-Player
</a>
<a href="/home/media" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/js.png">
MP4/MP3
</a>
<a href="/home/dashjs" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/js.png">
Dash.js
</a>
<a href="/home/rx-player" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/js.png">
RxPlayer
</a>
<a href="/home/bitmovin" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/js.png">
Bitmovin-Player
</a>
<a href="/home/theoplayer" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/js.png">
THEOplayer
</a>
<!-- <a href="/home/download" class="sdk-link">-->
<!-- <img src="/home/static/landing-page/sdk-icons/js.png" />-->
<!-- File Downloader-->
<!-- </a>-->
</li>
</ul>
</div>
</div>
<div class="flex flex-col gap-2" data-dropdown-sdks="mobile">
<div class="flex w-full gap-2">
<div class="flex-1">
<ul class="list-none pl-0">
<li>
<a href="/home/android" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/kotlin.png">
Android
</a>
</li>
<li>
<a href="/home/flutter" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/flutter.png">
Flutter
</a>
</li>
<li>
<a href="/home/rn" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/react.png">
React Native
</a>
</li>
<li>
<a href="/home/ios" class="sdk-link">
<img src="/home/static/landing-page/sdk-icons/swift.png">
iOS/tvOS/macOS
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</li></ul></div><a class="navbar__item navbar__link" href="/home/faq">FAQ</a><a class="navbar__item navbar__link" href="/home/pricing">Pricing</a></div><div class="navbar__items navbar__items--right"><div class="searchBox_ZlJk"><div class="relative flex items-center gap-2"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Command+K)"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div><div class="navbar__item dev-portal-signup dev-portal-link cursor"><span onclick='window.open(`https://meshify-cloud.github.io/redirect/#/signup?source=${new URLSearchParams(window.location.search).get("utm_source")||location.host}`,"_blank")'>Sign Up</span></div><a href="https://demo.swarmcloud.net/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Demo<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><a href="https://github.com/swarm-cloud" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository"></a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" class="iconLanguage_nlXk"><path fill="currentColor" d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"></path></svg>English</a><ul class="dropdown__menu"><li><a href="/home/android" target="_self" rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang="en">English</a></li><li><a href="https://www.cdnbye.com" target="_blank" rel="noopener noreferrer" class="dropdown__link">中文<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently dark mode)" aria-label="Switch between dark and light mode (currently dark mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_mhZE"><div class="sidebar-menu multiSectionContainer_bYm7"><div class="section_olD1 sectionActive_D9yk" tabindex="0"><div class="label_WInT">Mobile SDK</div><div><div class="row_KvCx"><button type="button" role="combobox" aria-controls="" aria-expanded="false" aria-autocomplete="none" aria-label="Select Section" class="sections-menu-trigger"><span style="pointer-events:none"></span><span aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="sections-menu-scrollButton"><polyline points="6 9 12 15 18 9"></polyline></svg></span></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div></div></div><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/home/android/introduction">Introduction</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" href="/home/android">Usage</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/home/android/API">API & Config</a></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_kv0_"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/home/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Usage</span><meta itemprop="position" content="1"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Usage</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="environment-configuration">Environment Configuration<a href="#environment-configuration" class="hash-link" aria-label="Direct link to Environment Configuration" title="Direct link to Environment Configuration"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="developing-environment">Developing Environment<a href="#developing-environment" class="hash-link" aria-label="Direct link to Developing Environment" title="Direct link to Developing Environment"></a></h3><ul><li>Android Studio, <a href="http://developer.android.com/intl/zh-cn/sdk/index.html" target="_blank" rel="noopener noreferrer">download</a></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="turn-on-java-8-support">Turn on Java 8 support<a href="#turn-on-java-8-support" class="hash-link" aria-label="Direct link to Turn on Java 8 support" title="Direct link to Turn on Java 8 support"></a></h3><p>If not enabled already, you also need to turn on Java 8 support in application's build.gradle, by adding the following to the android section:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">android {</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> compileOptions {</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> sourceCompatibility JavaVersion.VERSION_1_8</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> targetCompatibility JavaVersion.VERSION_1_8</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> }</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="add-uses-permission">Add Uses Permission<a href="#add-uses-permission" class="hash-link" aria-label="Direct link to Add Uses Permission" title="Direct link to Add Uses Permission"></a></h3><p>Add relevant uses permissions in <strong><em>app/src/main/AndroidManifest.xml</em></strong>:</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token tag punctuation" style="color:rgb(212, 212, 212)"><</span><span class="token tag" style="color:rgb(78, 201, 176)">uses-permission</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name namespace" style="color:rgb(156, 220, 254)">android:</span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">android.permission.INTERNET</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/></span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)"><</span><span class="token tag" style="color:rgb(78, 201, 176)">uses-permission</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name namespace" style="color:rgb(156, 220, 254)">android:</span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">android.permission.ACCESS_NETWORK_STATE</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/></span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)"><</span><span class="token tag" style="color:rgb(78, 201, 176)">uses-permission</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name namespace" style="color:rgb(156, 220, 254)">android:</span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">android.permission.READ_EXTERNAL_STORAGE</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/></span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)"><</span><span class="token tag" style="color:rgb(78, 201, 176)">uses-permission</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name namespace" style="color:rgb(156, 220, 254)">android:</span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">android.permission.WRITE_EXTERNAL_STORAGE</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/></span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)"><</span><span class="token tag" style="color:rgb(78, 201, 176)">uses-permission</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name namespace" style="color:rgb(156, 220, 254)">android:</span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">android.permission.ACCESS_WIFI_STATE</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="allow-localhost-connections">Allow Localhost Connections<a href="#allow-localhost-connections" class="hash-link" aria-label="Direct link to Allow Localhost Connections" title="Direct link to Allow Localhost Connections"></a></h3><p>Update the AndroidManifest.xml file:</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token tag punctuation" style="color:rgb(212, 212, 212)"><</span><span class="token tag" style="color:rgb(78, 201, 176)">application</span><span class="token tag" style="color:rgb(78, 201, 176)"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">...</span><span class="token tag" style="color:rgb(78, 201, 176)"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name namespace" style="color:rgb(156, 220, 254)">android:</span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">networkSecurityConfig</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">@xml/network_security_config</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">...</span><span class="token tag" style="color:rgb(78, 201, 176)"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then create or update the res/xml/network_security_config.xml file to allow localhost connections:</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token prolog" style="color:rgb(0, 0, 128)"><?xml version="1.0" encoding="utf-8"?></span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)"><</span><span class="token tag" style="color:rgb(78, 201, 176)">network-security-config</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)"><</span><span class="token tag" style="color:rgb(78, 201, 176)">domain-config</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">cleartextTrafficPermitted</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">true</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)"><</span><span class="token tag" style="color:rgb(78, 201, 176)">domain</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">includeSubdomains</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">true</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">></span><span class="token plain">127.0.0.1</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)"></</span><span class="token tag" style="color:rgb(78, 201, 176)">domain</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)"></</span><span class="token tag" style="color:rgb(78, 201, 176)">domain-config</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)"></</span><span class="token tag" style="color:rgb(78, 201, 176)">network-security-config</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="enable-largeheap">Enable LargeHeap<a href="#enable-largeheap" class="hash-link" aria-label="Direct link to Enable LargeHeap" title="Direct link to Enable LargeHeap"></a></h3><p>P2P related application can be memory intensive, setting the optional android:largeHeap="true" flag in the AndroidManifest.xml file is recommended to ensure that your application has enough heap memory allocated.</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token tag punctuation" style="color:rgb(212, 212, 212)"><</span><span class="token tag" style="color:rgb(78, 201, 176)">application</span><span class="token tag" style="color:rgb(78, 201, 176)"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">...</span><span class="token tag" style="color:rgb(78, 201, 176)"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name namespace" style="color:rgb(156, 220, 254)">android:</span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">largeHeap</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">true</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">...</span><span class="token tag" style="color:rgb(78, 201, 176)"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proguard-configuration">Proguard Configuration<a href="#proguard-configuration" class="hash-link" aria-label="Direct link to Proguard Configuration" title="Direct link to Proguard Configuration"></a></h3><p>Please add the following code in proguard-rules.pro:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">-dontwarn com.p2pengine.**</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">-keep class com.p2pengine.**{*;}</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">-keep interface com.p2pengine.**{*;}</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">-keep class com.cdnbye.libdc.**{*;}</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">-keep interface com.cdnbye.libdc.**{*;}</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">-keep class com.snapchat.djinni.**{*;}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="import-sdk">Import SDK<a href="#import-sdk" class="hash-link" aria-label="Direct link to Import SDK" title="Direct link to Import SDK"></a></h2><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">By Mavel</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">By Local File</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><p>To integrate the SDK, first set up the SwarmCloud Maven repository in the project's build.gradle file:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">allprojects {</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> repositories {</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> // ... other repositories</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> maven {</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> url 'https://maven.swarmcloud.net/repository/maven-releases/'</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> }</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> }</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then add the following sentence inside the dependencies section of the module's build.gradle file:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">dependencies {</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> implementation("com.squareup.okhttp3:okhttp:3.12.13") // Or any okhttp newer version</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> implementation("com.orhanobut:logger:2.2.0")</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> implementation("com.google.code.gson:gson:2.9.0")</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> implementation("com.swarmcloud:datachannel_native:latest.release")</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> implementation("com.swarmcloud:p2p_engine:latest.release")</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p>Download the latest version SDK <a href="https://github.com/cdnbye/android-p2p-engine/releases" target="_blank" rel="noopener noreferrer">swarmcloud.jar and datachannel.aar</a>, then copy it to <strong><em>app/libs</em></strong> .</p><p>Besides add new dependencies in module's build.gradle file as shown below:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">dependencies {</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'])</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> implementation("com.squareup.okhttp3:okhttp:3.12.13") // Or any okhttp newer version</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> implementation("com.orhanobut:logger:2.2.0")</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> implementation("com.google.code.gson:gson:2.9.0")</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>Simulator may not work as expected, please test on real device.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="quick-start">Quick Start<a href="#quick-start" class="hash-link" aria-label="Direct link to Quick Start" title="Direct link to Quick Start"></a></h2><p>We recommend calling P2pEngine.initEngine in the instance of the Application class right after the application is created.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="import-p2pengine">Import P2pEngine<a href="#import-p2pengine" class="hash-link" aria-label="Direct link to Import P2pEngine" title="Direct link to Import P2pEngine"></a></h3><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">kotlin</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">java</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> com</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">p2pengine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">sdk</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">P2pEngine</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token import namespace">com</span><span class="token import namespace punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token import namespace">p2pengine</span><span class="token import namespace punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token import namespace">sdk</span><span class="token import namespace punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token import class-name" style="color:rgb(78, 201, 176)">P2pEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="initialize-p2pengine">Initialize P2pEngine<a href="#initialize-p2pengine" class="hash-link" aria-label="Direct link to Initialize P2pEngine" title="Direct link to Initialize P2pEngine"></a></h3><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">kotlin</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">java</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">class</span><span class="token plain"> MyApplication </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">Application</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">override</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">fun</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">onCreate</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">super</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">onCreate</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">val</span><span class="token plain"> config </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> P2pConfig</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">Builder</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">trackerZone</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">TrackerZone</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Europe</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Set HongKong or USA if you changed zone</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">build</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> P2pEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">init</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">this</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> YOUR_TOKEN</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> config</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">MyApplication</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">extends</span><span class="token plain"> </span><span class="token class-name namespace" style="color:rgb(78, 201, 176)">android</span><span class="token class-name namespace punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token class-name namespace" style="color:rgb(78, 201, 176)">app</span><span class="token class-name namespace punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token class-name" style="color:rgb(78, 201, 176)">Application</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">protected</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">void</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">onCreate</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">super</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">onCreate</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">P2pConfig</span><span class="token plain"> config </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">P2pConfig</span><span class="token class-name punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token class-name" style="color:rgb(78, 201, 176)">Builder</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">trackerZone</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token class-name" style="color:rgb(78, 201, 176)">TrackerZone</span><span class="token class-name punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token class-name" style="color:rgb(78, 201, 176)">Europe</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Set HongKong or USA if you changed zone</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">insertTimeOffsetTag</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">0.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">build</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">P2pEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">init</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">this</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(100, 102, 149)">YOUR_TOKEN</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> config</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><p>Where YOUR_TOKEN is your Customer ID. Please replace it by your own token obtained from console, click <a href="/home/guides/getting-started#for-mobile-app-integration">here</a> for more information.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="playback-address">Playback Address<a href="#playback-address" class="hash-link" aria-label="Direct link to Playback Address" title="Direct link to Playback Address"></a></h3><p>When initializing a media player (or any other video player) instance, before passing it a URL, pass that URL through P2P Engine.</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">kotlin</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">java</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> void </span><span class="token function" style="color:rgb(220, 220, 170)">onPlay</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">val</span><span class="token plain"> parsedUrl </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> P2pEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">instance</span><span class="token operator" style="color:rgb(212, 212, 212)">!!</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">parseStreamUrl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">YOUR_STREAM</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> mediaPlayer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">play</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">parsedUrl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">void</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">onPlay</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">String</span><span class="token plain"> parsedUrl </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">P2pEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">getInstance</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">parseStreamUrl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token constant" style="color:rgb(100, 102, 149)">YOUR_STREAM</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> mediaPlayer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">play</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">parsedUrl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="setup-player-interactor-for-exoplayer">Setup Player Interactor For Exoplayer<a href="#setup-player-interactor-for-exoplayer" class="hash-link" aria-label="Direct link to Setup Player Interactor For Exoplayer" title="Direct link to Setup Player Interactor For Exoplayer"></a></h3><p>If your are using Exoplayer, it's recommended to setup PlayerInteractor for live streaming.</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">kotlin</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">java</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">P2pEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">instance</span><span class="token operator" style="color:rgb(212, 212, 212)">?</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setPlayerInteractor</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">object</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">PlayerInteractor</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">override</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">fun</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">onBufferedDuration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> Long </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Exoplayer in milliseconds</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">player </span><span class="token operator" style="color:rgb(212, 212, 212)">!=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> player</span><span class="token operator" style="color:rgb(212, 212, 212)">!!</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">bufferedPosition </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain"> player</span><span class="token operator" style="color:rgb(212, 212, 212)">!!</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">currentPosition</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token class-name" style="color:rgb(78, 201, 176)">P2pEngine</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">getInstance</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setPlayerInteractor</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">PlayerInteractor</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">long</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">onBufferedDuration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Exoplayer in milliseconds</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">play </span><span class="token operator" style="color:rgb(212, 212, 212)">!=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> player</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">getBufferedPosition</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain"> player</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">getCurrentPosition</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="demo">Demo<a href="#demo" class="hash-link" aria-label="Direct link to Demo" title="Direct link to Demo"></a></h4><p>A completed example can be found <a href="https://github.com/cdnbye/android-p2p-engine" target="_blank" rel="noopener noreferrer">here</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="troubleshooting-steps-when-p2p-doesnt-work">Troubleshooting Steps when P2P doesn't work<a href="#troubleshooting-steps-when-p2p-doesnt-work" class="hash-link" aria-label="Direct link to Troubleshooting Steps when P2P doesn't work" title="Direct link to Troubleshooting Steps when P2P doesn't work"></a></h4><p>Click <a href="/home/guides/troubleshooting#troubleshooting-steps-of-mobile-sdk">here</a></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/home/android/introduction"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Introduction</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/home/android/API"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">API & Config</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#environment-configuration" class="table-of-contents__link toc-highlight">Environment Configuration</a><ul><li><a href="#developing-environment" class="table-of-contents__link toc-highlight">Developing Environment</a></li><li><a href="#turn-on-java-8-support" class="table-of-contents__link toc-highlight">Turn on Java 8 support</a></li><li><a href="#add-uses-permission" class="table-of-contents__link toc-highlight">Add Uses Permission</a></li><li><a href="#allow-localhost-connections" class="table-of-contents__link toc-highlight">Allow Localhost Connections</a></li><li><a href="#enable-largeheap" class="table-of-contents__link toc-highlight">Enable LargeHeap</a></li><li><a href="#proguard-configuration" class="table-of-contents__link toc-highlight">Proguard Configuration</a></li></ul></li><li><a href="#import-sdk" class="table-of-contents__link toc-highlight">Import SDK</a></li><li><a href="#quick-start" class="table-of-contents__link toc-highlight">Quick Start</a><ul><li><a href="#import-p2pengine" class="table-of-contents__link toc-highlight">Import P2pEngine</a></li><li><a href="#initialize-p2pengine" class="table-of-contents__link toc-highlight">Initialize P2pEngine</a></li><li><a href="#playback-address" class="table-of-contents__link toc-highlight">Playback Address</a></li><li><a href="#setup-player-interactor-for-exoplayer" class="table-of-contents__link toc-highlight">Setup Player Interactor For Exoplayer</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="bg-[#F4F7FF] dark:bg-[#191919]"><div class="mx-auto flex w-full max-w-[1080px] flex-col px-6 py-12"><div class="mb-12 flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between"></div><div class="flex flex-col gap-6 lg:flex-row lg:items-center lg:justify-between lg:gap-0"><div class="flex flex-wrap gap-2 text-sm text-gray-500"><a class="text-inherit hover:text-black hover:underline dark:hover:text-[#2160fd] dark:text-[#999]" href="/home/guides/contract">Terms of Service</a><a class="text-inherit hover:text-black hover:underline dark:hover:text-[#2160fd] dark:text-[#999]" href="/home/guides/privacy">Privacy Policy</a><span class="text-inherit dark:text-[#999]">© <!-- -->2026<!-- --> SwarmCloud Inc.</span></div><div class="flex items-center gap-4"></div></div></div></footer></div>
<script src="/home/assets/js/runtime~main.053b99cf.js"></script>
<script src="/home/assets/js/main.f99e750f.js"></script>
</body>
</html>