-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
62eab6d
commit cf47a6c
Showing
1,763 changed files
with
1,331,527 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<!doctype html> | ||
<html lang="en" dir="ltr" class="plugin-native plugin-id-default" data-has-hydrated="false"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<meta name="generator" content="Docusaurus v3.1.1"> | ||
<title data-rh="true">Page Not Found | THEOplayer Documentation</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="robots" content="noindex, nofollow"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://theoplayer.prudentgiraffe.com/documentation/pr-preview/pr-14/404.html/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | THEOplayer Documentation"><link data-rh="true" rel="icon" href="/documentation/pr-preview/pr-14/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://theoplayer.prudentgiraffe.com/documentation/pr-preview/pr-14/404.html/"><link data-rh="true" rel="alternate" href="https://theoplayer.prudentgiraffe.com/documentation/pr-preview/pr-14/404.html/" hreflang="en"><link data-rh="true" rel="alternate" href="https://theoplayer.prudentgiraffe.com/documentation/pr-preview/pr-14/404.html/" hreflang="x-default"><link rel="preconnect" href="https://fonts.googleapis.com"> | ||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | ||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Francois+One&family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap"> | ||
<script src="//js.hs-scripts.com/2163521.js" id="hs-script-loader" async defer="defer"></script><link rel="stylesheet" href="/documentation/pr-preview/pr-14/assets/css/styles.0b6333de.css"> | ||
<script src="/documentation/pr-preview/pr-14/assets/js/runtime~main.014b9b3b.js" defer="defer"></script> | ||
<script src="/documentation/pr-preview/pr-14/assets/js/main.2b660176.js" defer="defer"></script> | ||
</head> | ||
<body class="navigation-with-keyboard"> | ||
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(n,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</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><div class="announcementBar_mb4j" style="background-color:#9cb9c9;color:#344a5e" role="banner"><div class="content_knG7 announcementBarContent_xLdY">This is a preview of the documentation website from <a target="_blank" rel="noopener noreferrer" href="https://github.com/THEOplayer/documentation/pull/14">pull request #14</a>.</div></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="/documentation/pr-preview/pr-14/"><div class="navbar__logo"><img src="/documentation/pr-preview/pr-14/img/logo.svg" alt="THEO" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/documentation/pr-preview/pr-14/img/logo_dark.svg" alt="THEO" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Docs</b></a><a class="navbar__item navbar__link" href="/documentation/pr-preview/pr-14/theoplayer/">THEOplayer</a><a class="navbar__item navbar__link" href="/documentation/pr-preview/pr-14/open-video-ui/">Open Video UI</a><a href="https://developers.theo.live/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">THEOlive<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></div><div class="navbar__items navbar__items--right"><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 light mode)" aria-label="Switch between dark and light mode (currently light 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 class="navbarSearchContainer_Bca1"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/documentation/pr-preview/pr-14/theoplayer/">THEOplayer</a></li><li class="footer__item"><a class="footer__link-item" href="/documentation/pr-preview/pr-14/open-video-ui/">Open Video UI</a></li><li class="footer__item"><a href="https://developers.theo.live/" target="_blank" rel="noopener noreferrer" class="footer__link-item">THEOlive<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></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/THEOplayer" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<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></li><li class="footer__item"><a href="https://twitter.com/THEO_player" target="_blank" rel="noopener noreferrer" class="footer__link-item">X (Twitter)<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></li><li class="footer__item"><a href="https://www.linkedin.com/company/theoplayer/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<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></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 THEO Technologies</div></div></div></footer></div> | ||
</body> | ||
</html> |
Large diffs are not rendered by default.
Oops, something went wrong.
131 changes: 131 additions & 0 deletions
131
pr-preview/pr-14/assets/files/DefaultUI-4fada63331309863761f5801bd620ad5.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
package com.theoplayer.android.ui | ||
|
||
import androidx.compose.foundation.layout.Box | ||
import androidx.compose.foundation.layout.PaddingValues | ||
import androidx.compose.foundation.layout.Row | ||
import androidx.compose.foundation.layout.Spacer | ||
import androidx.compose.foundation.layout.padding | ||
import androidx.compose.foundation.layout.size | ||
import androidx.compose.material3.Text | ||
import androidx.compose.runtime.Composable | ||
import androidx.compose.runtime.LaunchedEffect | ||
import androidx.compose.ui.Alignment | ||
import androidx.compose.ui.Modifier | ||
import androidx.compose.ui.unit.dp | ||
import com.theoplayer.android.api.THEOplayerConfig | ||
import com.theoplayer.android.api.THEOplayerView | ||
import com.theoplayer.android.api.source.SourceDescription | ||
import com.theoplayer.android.ui.theme.THEOplayerTheme | ||
|
||
/** | ||
* A default THEOplayer UI component. | ||
* | ||
* This component provides a great player experience out-of-the-box, that works for all types | ||
* of streams. It provides all the common playback controls for playing, seeking, changing | ||
* languages and qualities. | ||
* | ||
* The colors and fonts can be changed by wrapping this inside a [THEOplayerTheme]. | ||
* For more extensive customizations, we recommend defining your own custom UI using | ||
* a [UIController]. | ||
* | ||
* @param modifier the [Modifier] to be applied to this UI | ||
* @param config the player configuration to be used when constructing the [THEOplayerView] | ||
* @param source the source description to load into the player | ||
* @param title the stream's title, shown at the top of the player | ||
* @see UIController | ||
*/ | ||
@Composable | ||
fun DefaultUI( | ||
modifier: Modifier = Modifier, | ||
config: THEOplayerConfig, | ||
source: SourceDescription? = null, | ||
title: String? = null | ||
) { | ||
val player = rememberPlayer(config) | ||
LaunchedEffect(player, source) { | ||
player.source = source | ||
} | ||
|
||
DefaultUI(modifier = modifier, player = player, title = title) | ||
} | ||
|
||
/** | ||
* A default THEOplayer UI component. | ||
* | ||
* This component provides a great player experience out-of-the-box, that works for all types | ||
* of streams. It provides all the common playback controls for playing, seeking, changing | ||
* languages and qualities. | ||
* | ||
* The colors and fonts can be changed by wrapping this inside a [THEOplayerTheme]. | ||
* For more extensive customizations, we recommend defining your own custom UI using | ||
* a [UIController]. | ||
* | ||
* @param modifier the [Modifier] to be applied to this UI | ||
* @param player the player. This should always be created using [rememberPlayer]. | ||
* @param title the stream's title, shown at the top of the player | ||
* @see UIController | ||
*/ | ||
@Composable | ||
fun DefaultUI( | ||
modifier: Modifier = Modifier, | ||
player: Player = rememberPlayer(), | ||
title: String? = null | ||
) { | ||
UIController( | ||
modifier = modifier, | ||
player = player, | ||
centerOverlay = { | ||
if (player.firstPlay) { | ||
LoadingSpinner() | ||
} | ||
}, | ||
topChrome = { | ||
if (player.firstPlay) { | ||
Row(verticalAlignment = Alignment.CenterVertically) { | ||
title?.let { | ||
Text( | ||
modifier = Modifier.padding(8.dp), | ||
text = it | ||
) | ||
} | ||
Spacer(modifier = Modifier.weight(1f)) | ||
LanguageMenuButton() | ||
ChromecastButton() | ||
} | ||
} | ||
}, | ||
centerChrome = { | ||
if (player.firstPlay) { | ||
SeekButton(seekOffset = -10, iconSize = 48.dp, contentPadding = PaddingValues(8.dp)) | ||
} | ||
PlayButton(iconModifier = Modifier.size(96.dp), contentPadding = PaddingValues(8.dp)) | ||
if (player.firstPlay) { | ||
SeekButton(seekOffset = 10, iconSize = 48.dp, contentPadding = PaddingValues(8.dp)) | ||
} | ||
}, | ||
bottomChrome = { | ||
if (player.firstPlay) { | ||
ChromecastDisplay(modifier = Modifier.padding(8.dp)) | ||
if (player.streamType != StreamType.Live) { | ||
SeekBar() | ||
} | ||
Row(verticalAlignment = Alignment.CenterVertically) { | ||
MuteButton() | ||
LiveButton() | ||
CurrentTimeDisplay(showDuration = true) | ||
Spacer(modifier = Modifier.weight(1f)) | ||
FullscreenButton() | ||
} | ||
} | ||
}, | ||
errorOverlay = { | ||
Box(contentAlignment = Alignment.Center) { | ||
ErrorDisplay() | ||
// Ensure the user can still exit fullscreen | ||
if (player.fullscreen) { | ||
FullscreenButton(modifier = Modifier.align(Alignment.BottomEnd)) | ||
} | ||
} | ||
} | ||
) | ||
} |
122 changes: 122 additions & 0 deletions
122
pr-preview/pr-14/assets/files/MainActivity-95c9c6a55219e3386947b8e291896a93.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
package com.theoplayer.android.ui.demo | ||
|
||
import android.os.Bundle | ||
import androidx.activity.ComponentActivity | ||
import androidx.activity.compose.setContent | ||
import androidx.compose.foundation.layout.fillMaxSize | ||
import androidx.compose.foundation.layout.padding | ||
import androidx.compose.material.icons.Icons | ||
import androidx.compose.material.icons.rounded.Brush | ||
import androidx.compose.material.icons.rounded.Refresh | ||
import androidx.compose.material3.* | ||
import androidx.compose.runtime.* | ||
import androidx.compose.runtime.saveable.rememberSaveable | ||
import androidx.compose.ui.Modifier | ||
import androidx.compose.ui.tooling.preview.Preview | ||
import com.theoplayer.android.api.THEOplayerConfig | ||
import com.theoplayer.android.api.source.SourceDescription | ||
import com.theoplayer.android.api.source.TypedSource | ||
import com.theoplayer.android.ui.DefaultUI | ||
import com.theoplayer.android.ui.demo.nitflex.NitflexUI | ||
import com.theoplayer.android.ui.demo.nitflex.theme.NitflexTheme | ||
import com.theoplayer.android.ui.rememberPlayer | ||
import com.theoplayer.android.ui.theme.THEOplayerTheme | ||
|
||
class MainActivity : ComponentActivity() { | ||
override fun onCreate(savedInstanceState: Bundle?) { | ||
super.onCreate(savedInstanceState) | ||
|
||
setContent { | ||
THEOplayerTheme(useDarkTheme = true) { | ||
MainContent() | ||
} | ||
} | ||
} | ||
} | ||
|
||
@OptIn(ExperimentalMaterial3Api::class) | ||
@Composable | ||
fun MainContent() { | ||
val source = SourceDescription.Builder( | ||
TypedSource.Builder("https://cdn.theoplayer.com/video/elephants-dream/playlist.m3u8") | ||
.build() | ||
).build() | ||
|
||
val player = rememberPlayer() | ||
LaunchedEffect(player, source) { | ||
player.source = source | ||
} | ||
|
||
var themeMenuOpen by remember { mutableStateOf(false) } | ||
var theme by rememberSaveable { mutableStateOf(PlayerTheme.Default) } | ||
|
||
Surface( | ||
modifier = Modifier.fillMaxSize(), | ||
color = MaterialTheme.colorScheme.background | ||
) { | ||
Scaffold(topBar = { | ||
TopAppBar( | ||
title = { | ||
Text(text = "Demo") | ||
}, | ||
actions = { | ||
IconButton(onClick = { | ||
player.source = source | ||
player.play() | ||
}) { | ||
Icon(Icons.Rounded.Refresh, contentDescription = "Reload") | ||
} | ||
IconButton(onClick = { themeMenuOpen = true }) { | ||
Icon(Icons.Rounded.Brush, contentDescription = "Theme") | ||
} | ||
DropdownMenu( | ||
expanded = themeMenuOpen, | ||
onDismissRequest = { themeMenuOpen = false }) { | ||
DropdownMenuItem( | ||
text = { Text(text = "Default theme") }, | ||
onClick = { theme = PlayerTheme.Default }) | ||
DropdownMenuItem( | ||
text = { Text(text = "Nitflex theme") }, | ||
onClick = { theme = PlayerTheme.Nitflex }) | ||
} | ||
} | ||
) | ||
}, content = { padding -> | ||
val playerModifier = Modifier | ||
.padding(padding) | ||
.fillMaxSize(1f) | ||
when (theme) { | ||
PlayerTheme.Default -> { | ||
DefaultUI( | ||
modifier = playerModifier, | ||
player = player, | ||
title = "Elephant's Dream" | ||
) | ||
} | ||
|
||
PlayerTheme.Nitflex -> { | ||
NitflexTheme(useDarkTheme = true) { | ||
NitflexUI( | ||
modifier = playerModifier, | ||
player = player, | ||
title = "Elephant's Dream" | ||
) | ||
} | ||
} | ||
} | ||
}) | ||
} | ||
} | ||
|
||
enum class PlayerTheme { | ||
Default, | ||
Nitflex | ||
} | ||
|
||
@Preview(showBackground = true) | ||
@Composable | ||
fun DefaultPreview() { | ||
MaterialTheme { | ||
DefaultUI(config = THEOplayerConfig.Builder().build()) | ||
} | ||
} |
Oops, something went wrong.