Bunny Stream is designed for developers and content creators to easily upload, process, and display videos within any application or website. Once your videos have been processed, you can embed them by using our lightweight embed player, enabling seamless playback across all devices and browsers.
Once a video has finished processing, you can embed it on any page using the Bunny Stream player. This page covers the iframe URL pattern, sizing, and player parameters.
Place an <iframe> element on your webpage using the following URL pattern. Replace {video_library_id} and {video_id} with your video library and video IDs:
You can generate embed code on the video’s details page in the dashboard. This code is a starting example: adapt its dimensions and styling to your video and your site’s layout.
The Stream player is responsive and automatically fills the width and height of its iframe. You can style the iframe like any other HTML element to match your video and the requirements of your site.
Change aspect-ratio to match your video, such as 16 / 9 for landscape or 1 / 1 for square video. Constrain the container width to suit your layout.aspect-ratio is supported by all current browsers. If you need to support older browsers, size a wrapper with padding instead and stretch the iframe inside it:
Settings outside the embed code can stop the player from loading. Check them when an embed shows a 403 error.Allowed and blocked domains. The library security settings can restrict playback to specific domains. The player identifies the embedding site from the Referer header of the iframe request, and matches its hostname against the lists. See Security options for how entries are matched.Referrer policy. Browsers send the page origin to a cross-origin iframe by default, which is all the domain check needs. If your site sets a stricter policy, such as Referrer-Policy: no-referrer or same-origin, the iframe request arrives without a referrer and is treated as direct access. It is then blocked when Block Direct URL File Access is enabled. Override the policy on the iframe itself:
This sends only the origin, never the full page URL.Content Security Policy. If your site sends a Content-Security-Policy header, allow the player origin in frame-src, for example frame-src https://player.mediadelivery.net.Token authentication. If the library has embed view token authentication enabled, the iframe URL must carry a valid token and expires pair. See Embedded view token authentication.
By default, many of the player’s controls and behaviors, such as captions, autoplay, and preload, can be configured on a global scale within the Player tab of your Bunny Stream library settings. Adjusting these default configurations ensures that any video embedded from that library inherits the same baseline behavior, providing a consistent user experience across all embedded instances.However, you can also fine-tune or override these defaults on a per-embed basis by adding query parameters directly to the embed or direct play URL. This flexibility allows you to tailor the playback experience for specific pages or use-cases without affecting the global settings of your library.
Boolean parameters accept true, false, 1 or 0. Where the default is a library setting, the parameter overrides that setting for the individual embed.
Parameter
Values
Description
Default Value
autoplay
true, false
Starts playback automatically. Browsers block unmuted autoplay unless the viewer has interacted with the page, so combine it with muted=true for reliable results.
true
muted
true, false
Starts the player muted. Takes precedence over a remembered mute preference.
false
loop
true, false
Replays the video automatically after it ends.
false
preload
true, false
Starts downloading the video before playback is requested so it starts faster.
true
t
30s, 1h20m45s, hh:mm:ss, numeric
Sets the start time. Accepts hours/minutes/seconds notation, hh:mm:ss, or a plain number of seconds.
0
captions
caption language code, for example en or en-auto
Turns on the captions track with this language code when playback starts, overriding the viewer’s remembered captions preference. Auto-generated (transcribed) captions use the language code with an -auto suffix, for example en-auto.
remembered preference, else off
lang
UI language code, for example de
Sets the language of the player interface.
library setting, else en
playsinline
true, false
Plays the video inline on iPhone. When false, iOS opens its native fullscreen player on play.
true
disableIosPlayer
true, false
Forces inline playback on iPhone even when playsinline=false, so the native iOS player is never used.
false
chromecast
true, false
Shows or hides the Chromecast button.
library player controls setting
disableAirPlay
true, false
Hides the AirPlay button when set to true. AirPlay is only offered when it is enabled in the library player controls.
false
showSpeed
true, false
Shows the playback speed control. Not available for live streams.
true
showHeatmap
true, false
Shows an engagement heatmap on the progress bar. Not shown together with compactControls.
library setting
compactControls
true, false
Enables the compact control bar, leaving more space for the video on desktop and mobile.
library setting
rememberPosition
true, false
Stores the last playback position in the viewer’s browser and resumes from it on the next visit. When false, the video always starts from the beginning.
library setting
rememberSettings
true, false
Stores viewer preferences (captions, volume, mute, speed, time display and playback position) in the browser. When false, nothing is saved or restored, including the position.
true
levelCap
true, false
Caps the selected video quality at the player’s rendered size so a small player does not download high resolutions.
false
nativeHls
off, auto, safari
Lets Safari play the HLS stream natively instead of through the player’s HLS engine, which enables the audio track menu in iOS native fullscreen. auto applies on iPhone and iOS WebViews only. safari applies to every Safari, at the cost of quality selection and levelCap. Ignored for DRM videos.
The page wraps the same embed player in a full-window layout and carries Open Graph metadata, so the link unfurls with the video title and thumbnail when shared on social platforms and in chat apps. It accepts the same query parameters as the embed URL:
If you prefer to use your own player or a fully custom video integration, you can directly access the raw video files from Bunny Stream’s infrastructure. Please refer to our Video Storage Structure documentation for details on how to retrieve and utilize video files directly.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"bunny.net Documentation","colors":{"primary":"#EF6126","light":"#EF6126","dark":"#EF6126"},"logo":{"light":"https://mintcdn.com/bunnynet-cb9733c2/54-4KCQKoNVNuoyW/logo/bunny-logo-dark.svg?fit=max\u0026auto=format\u0026n=54-4KCQKoNVNuoyW\u0026q=85\u0026s=62c091ea1aaea93d0a981902b7783e37","dark":"https://mintcdn.com/bunnynet-cb9733c2/54-4KCQKoNVNuoyW/logo/bunny-logo-light.svg?fit=max\u0026auto=format\u0026n=54-4KCQKoNVNuoyW\u0026q=85\u0026s=3610e32d68a9fa458b0116ac58ca812a"},"favicon":"https://mintcdn.com/bunnynet-cb9733c2/1bTPx1eyQm8EK8W3/favicon.png?fit=max\u0026auto=format\u0026n=1bTPx1eyQm8EK8W3\u0026q=85\u0026s=85267b63e804fac7a4dd94599bb8c6e8","navbar":{"links":[{"href":"https://bunny.net/docs/api-reference","label":"API Reference"},{"href":"https://github.com/BunnyWay","label":"GitHub"}],"primary":{"type":"button","label":"Get Started","href":"https://dash.bunny.net/auth/register"}},"footer":{"socials":{"discord":"https://discord.gg/bunnynet","github":"https://github.com/BunnyWay","x":"https://x.com/BunnyCDN","bluesky":"https://bsky.app/profile/bunny.net","linkedin":"https://www.linkedin.com/company/bunnynet","facebook":"https://www.facebook.com/bunnycdn"}},"icons":{"library":"lucide"},"contextual":{"options":["copy","claude","chatgpt","cursor","view","vscode"],"display":"header"},"interaction":{"drilldown":false},"metadata":{"timestamp":true},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"bunnynet-cb9733c2","hasAudioNarration":false,"actualSubdomain":"bunnynet-cb9733c2","customDomains":["bunny.net"],"gitSource":{"type":"github","owner":"bunnyway","repo":"documentation","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae49f2d21d44d6b52dcfe35","collectionId":"5e262b87-ade9-45d8-9b63-06888c8d59a3","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae49f2d21d44d6b52dcfe35"},"feedback":{"thumbs":true,"contextualFeedback":{"allowEmail":true},"agentFeedback":true,"edits":true,"issues":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae534f2b9a26f131eb41834","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"Documentation","count":752},{"language":"default","tag":"API Reference","count":318},{"language":"default","tag":"Core Platform API","count":109},{"language":"default","tag":"CDN","count":82},{"language":"default","tag":"Shield API","count":66},{"language":"default","tag":"Stream","count":66},{"language":"default","tag":"Magic Containers API","count":56},{"language":"default","tag":"Storage","count":54},{"language":"default","tag":"Guides","count":54},{"language":"default","tag":"Reference","count":52}],"searchSettings":{"isFiltersEnabled":true}},"assistantConfig":{"enableStarterQuestions":false,"deflection":{"enabled":true,"type":"link","email":"support@bunny.net","url":"https://bunny.net/contact","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".dark img[src*=\"/logo/frameworks/angular.svg\"],.dark img[src*=\"/logo/frameworks/eleventy.svg\"],.dark img[src*=\"/logo/frameworks/express.svg\"],.dark img[src*=\"/logo/frameworks/mariadb.svg\"],.dark img[src*=\"/logo/frameworks/nextjs.svg\"],.dark img[src*=\"/logo/frameworks/sphinx.svg\"]{filter:invert(1)}html:not(.dark) img[src*=\"/logo/frameworks/zola.svg\"]{filter:invert(1)}"}],"page":{"pagePath":"stream/embedding","slug":"/stream/embedding","pageMetadata":{"title":"Embedding videos","description":"Bunny Stream is designed for developers and content creators to easily upload, process, and display videos within any application or website. Once your videos have been processed, you can embed them by using our lightweight embed player, enabling seamless playback across all devices and browsers.","href":"/stream/embedding"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Bunny Stream is designed for developers and content creators to easily upload, process, and display videos within any application or website. Once your videos have been processed, you can embed them by using our lightweight embed player, enabling seamless playback across all devices and browsers.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,OptimizedImage,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Once a video has finished processing, you can embed it on any page using the Bunny Stream player. This page covers the iframe URL pattern, sizing, and player parameters.`}),`\n`,_jsx(Heading,{level:`2`,id:`how-to-embed-a-video`,children:`How to embed a video`}),`\n`,_jsxs(_components.p,{children:[`Place an `,_jsx(_components.code,{children:`\u003ciframe>`}),` element on your webpage using the following URL pattern. Replace `,_jsx(_components.code,{children:`{video_library_id}`}),` and `,_jsx(_components.code,{children:`{video_id}`}),` with your video library and video IDs:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://player.mediadelivery.net/embed/{video_library_id}/{video_id}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`You can generate embed code on the video’s details page in the dashboard. This code is a starting example: adapt its dimensions and styling to your video and your site’s layout.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`iframe`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` src`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://player.mediadelivery.net/embed/{video_library_id}/{video_id}\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` title`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Video player\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` loading`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"lazy\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` style`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; border: 0;\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` allow`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"autoplay; encrypted-media; picture-in-picture; fullscreen\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` allowfullscreen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`iframe`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`sizing-and-aspect-ratio`,children:`Sizing and aspect ratio`}),`\n`,_jsx(_components.p,{children:`The Stream player is responsive and automatically fills the width and height of its iframe. You can style the iframe like any other HTML element to match your video and the requirements of your site.`}),`\n`,_jsx(Heading,{level:`3`,id:`portrait-video`,children:`Portrait video`}),`\n`,_jsx(_components.p,{children:`Portrait (9:16) video needs no special player configuration. Set the iframe’s aspect ratio to match the video and the player fills it:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`iframe`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` src`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://player.mediadelivery.net/embed/{video_library_id}/{video_id}\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` title`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Video player\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` loading`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"lazy\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` style`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"display: block; width: 100%; height: auto; aspect-ratio: 9 / 16; border: 0;\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` allow`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"autoplay; encrypted-media; picture-in-picture; fullscreen\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` allowfullscreen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`iframe`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Change `,_jsx(_components.code,{children:`aspect-ratio`}),` to match your video, such as `,_jsx(_components.code,{children:`16 / 9`}),` for landscape or `,_jsx(_components.code,{children:`1 / 1`}),` for square video. Constrain the container width to suit your layout.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`aspect-ratio`}),` is supported by all current browsers. If you need to support older browsers, size a wrapper with padding instead and stretch the iframe inside it:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` style`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"position: relative; padding-top: 56.25%;\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`iframe`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` src`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://player.mediadelivery.net/embed/{video_library_id}/{video_id}\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` title`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Video player\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` loading`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"lazy\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` style`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0;\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` allow`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"autoplay; encrypted-media; picture-in-picture; fullscreen\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` allowfullscreen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`iframe`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`div`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The padding percentage is height divided by width: `,_jsx(_components.code,{children:`56.25%`}),` for 16:9, `,_jsx(_components.code,{children:`177.78%`}),` for 9:16.`]}),`\n`,_jsx(Heading,{level:`2`,id:`embedding-restrictions`,children:`Embedding restrictions`}),`\n`,_jsx(_components.p,{children:`Settings outside the embed code can stop the player from loading. Check them when an embed shows a 403 error.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Allowed and blocked domains.`}),` The library security settings can restrict playback to specific domains. The player identifies the embedding site from the `,_jsx(_components.code,{children:`Referer`}),` header of the iframe request, and matches its hostname against the lists. See `,_jsx(_components.a,{href:`/stream/security-options#domains`,children:`Security options`}),` for how entries are matched.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Referrer policy.`}),` Browsers send the page origin to a cross-origin iframe by default, which is all the domain check needs. If your site sets a stricter policy, such as `,_jsx(_components.code,{children:`Referrer-Policy: no-referrer`}),` or `,_jsx(_components.code,{children:`same-origin`}),`, the iframe request arrives without a referrer and is treated as direct access. It is then blocked when `,_jsx(_components.strong,{children:`Block Direct URL File Access`}),` is enabled. Override the policy on the iframe itself:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`iframe`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` referrerpolicy`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"strict-origin-when-cross-origin\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` ...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`This sends only the origin, never the full page URL.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Content Security Policy.`}),` If your site sends a `,_jsx(_components.code,{children:`Content-Security-Policy`}),` header, allow the player origin in `,_jsx(_components.code,{children:`frame-src`}),`, for example `,_jsx(_components.code,{children:`frame-src https://player.mediadelivery.net`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Token authentication.`}),` If the library has embed view token authentication enabled, the iframe URL must carry a valid `,_jsx(_components.code,{children:`token`}),` and `,_jsx(_components.code,{children:`expires`}),` pair. See `,_jsx(_components.a,{href:`/stream/token-authentication`,children:`Embedded view token authentication`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`parameters`,children:`Parameters`}),`\n`,_jsx(_components.p,{children:`By default, many of the player’s controls and behaviors, such as captions, autoplay, and preload, can be configured on a global scale within the Player tab of your Bunny Stream library settings. Adjusting these default configurations ensures that any video embedded from that library inherits the same baseline behavior, providing a consistent user experience across all embedded instances.`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/bunnynet-cb9733c2/kcU5tb-Sz5318NF5/images/docs/d267314b297a80462b1668920e710619e6a80d7c2e1e9ad1b9491b4ccbdcda84-image.png?fit=max\u0026auto=format\u0026n=kcU5tb-Sz5318NF5\u0026q=85\u0026s=72427329311484712e62794cc8387a3b`,alt:``,\"data-og-width\":`1432`,width:`1432`,\"data-og-height\":`886`,height:`886`,\"data-path\":`images/docs/d267314b297a80462b1668920e710619e6a80d7c2e1e9ad1b9491b4ccbdcda84-image.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/bunnynet-cb9733c2/kcU5tb-Sz5318NF5/images/docs/d267314b297a80462b1668920e710619e6a80d7c2e1e9ad1b9491b4ccbdcda84-image.png?w=280\u0026fit=max\u0026auto=format\u0026n=kcU5tb-Sz5318NF5\u0026q=85\u0026s=eacfd6303ec9d16dfcd879e8d0b7f9b1 280w, https://mintcdn.com/bunnynet-cb9733c2/kcU5tb-Sz5318NF5/images/docs/d267314b297a80462b1668920e710619e6a80d7c2e1e9ad1b9491b4ccbdcda84-image.png?w=560\u0026fit=max\u0026auto=format\u0026n=kcU5tb-Sz5318NF5\u0026q=85\u0026s=fc02c37c7359b3b7c4a0057ded499232 560w, https://mintcdn.com/bunnynet-cb9733c2/kcU5tb-Sz5318NF5/images/docs/d267314b297a80462b1668920e710619e6a80d7c2e1e9ad1b9491b4ccbdcda84-image.png?w=840\u0026fit=max\u0026auto=format\u0026n=kcU5tb-Sz5318NF5\u0026q=85\u0026s=7c7e5554ee98677f5975dd335fff5f80 840w, https://mintcdn.com/bunnynet-cb9733c2/kcU5tb-Sz5318NF5/images/docs/d267314b297a80462b1668920e710619e6a80d7c2e1e9ad1b9491b4ccbdcda84-image.png?w=1100\u0026fit=max\u0026auto=format\u0026n=kcU5tb-Sz5318NF5\u0026q=85\u0026s=adc3ee2edb801d927eb216e88002cc61 1100w, https://mintcdn.com/bunnynet-cb9733c2/kcU5tb-Sz5318NF5/images/docs/d267314b297a80462b1668920e710619e6a80d7c2e1e9ad1b9491b4ccbdcda84-image.png?w=1650\u0026fit=max\u0026auto=format\u0026n=kcU5tb-Sz5318NF5\u0026q=85\u0026s=0d2fc3de50c60122f3f7878f80351d91 1650w, https://mintcdn.com/bunnynet-cb9733c2/kcU5tb-Sz5318NF5/images/docs/d267314b297a80462b1668920e710619e6a80d7c2e1e9ad1b9491b4ccbdcda84-image.png?w=2500\u0026fit=max\u0026auto=format\u0026n=kcU5tb-Sz5318NF5\u0026q=85\u0026s=206a58bf434c24cff21d3464128c12aa 2500w`}),`\n`,_jsx(_components.p,{children:`However, you can also fine-tune or override these defaults on a per-embed basis by adding query parameters directly to the embed or direct play URL. This flexibility allows you to tailor the playback experience for specific pages or use-cases without affecting the global settings of your library.`}),`\n`,_jsx(Heading,{level:`2`,id:`supported-parameters`,children:`Supported Parameters`}),`\n`,_jsxs(_components.p,{children:[`Boolean parameters accept `,_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`}),`, `,_jsx(_components.code,{children:`1`}),` or `,_jsx(_components.code,{children:`0`}),`. Where the default is a library setting, the parameter overrides that setting for the individual embed.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.strong,{children:`Parameter`})}),_jsx(_components.th,{children:_jsx(_components.strong,{children:`Values`})}),_jsx(_components.th,{children:_jsx(_components.strong,{children:`Description`})}),_jsx(_components.th,{children:_jsx(_components.strong,{children:`Default Value`})})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`autoplay`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsxs(_components.td,{children:[`Starts playback automatically. Browsers block unmuted autoplay unless the viewer has interacted with the page, so combine it with `,_jsx(_components.code,{children:`muted=true`}),` for reliable results.`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`true`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`muted`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsx(_components.td,{children:`Starts the player muted. Takes precedence over a remembered mute preference.`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`false`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`loop`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsx(_components.td,{children:`Replays the video automatically after it ends.`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`false`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`preload`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsx(_components.td,{children:`Starts downloading the video before playback is requested so it starts faster.`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`true`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`t`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`30s`}),`, `,_jsx(_components.code,{children:`1h20m45s`}),`, `,_jsx(_components.code,{children:`hh:mm:ss`}),`, `,_jsx(_components.code,{children:`numeric`})]}),_jsxs(_components.td,{children:[`Sets the start time. Accepts hours/minutes/seconds notation, `,_jsx(_components.code,{children:`hh:mm:ss`}),`, or a plain number of seconds.`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`0`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`captions`})})}),_jsxs(_components.td,{children:[`caption language code, for example `,_jsx(_components.code,{children:`en`}),` or `,_jsx(_components.code,{children:`en-auto`})]}),_jsxs(_components.td,{children:[`Turns on the captions track with this language code when playback starts, overriding the viewer’s remembered captions preference. Auto-generated (transcribed) captions use the language code with an `,_jsx(_components.code,{children:`-auto`}),` suffix, for example `,_jsx(_components.code,{children:`en-auto`}),`.`]}),_jsx(_components.td,{children:`remembered preference, else off`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`lang`})})}),_jsxs(_components.td,{children:[`UI language code, for example `,_jsx(_components.code,{children:`de`})]}),_jsx(_components.td,{children:`Sets the language of the player interface.`}),_jsxs(_components.td,{children:[`library setting, else `,_jsx(_components.code,{children:`en`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`playsinline`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsxs(_components.td,{children:[`Plays the video inline on iPhone. When `,_jsx(_components.code,{children:`false`}),`, iOS opens its native fullscreen player on play.`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`true`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`disableIosPlayer`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsxs(_components.td,{children:[`Forces inline playback on iPhone even when `,_jsx(_components.code,{children:`playsinline=false`}),`, so the native iOS player is never used.`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`false`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`chromecast`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsx(_components.td,{children:`Shows or hides the Chromecast button.`}),_jsx(_components.td,{children:`library player controls setting`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`disableAirPlay`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsxs(_components.td,{children:[`Hides the AirPlay button when set to `,_jsx(_components.code,{children:`true`}),`. AirPlay is only offered when it is enabled in the library player controls.`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`false`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`showSpeed`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsx(_components.td,{children:`Shows the playback speed control. Not available for live streams.`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`true`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`showHeatmap`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsxs(_components.td,{children:[`Shows an engagement heatmap on the progress bar. Not shown together with `,_jsx(_components.code,{children:`compactControls`}),`.`]}),_jsx(_components.td,{children:`library setting`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`compactControls`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsx(_components.td,{children:`Enables the compact control bar, leaving more space for the video on desktop and mobile.`}),_jsx(_components.td,{children:`library setting`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`rememberPosition`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsxs(_components.td,{children:[`Stores the last playback position in the viewer’s browser and resumes from it on the next visit. When `,_jsx(_components.code,{children:`false`}),`, the video always starts from the beginning.`]}),_jsx(_components.td,{children:`library setting`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`rememberSettings`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsxs(_components.td,{children:[`Stores viewer preferences (captions, volume, mute, speed, time display and playback position) in the browser. When `,_jsx(_components.code,{children:`false`}),`, nothing is saved or restored, including the position.`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`true`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`levelCap`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`})]}),_jsx(_components.td,{children:`Caps the selected video quality at the player’s rendered size so a small player does not download high resolutions.`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`false`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`nativeHls`})})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`off`}),`, `,_jsx(_components.code,{children:`auto`}),`, `,_jsx(_components.code,{children:`safari`})]}),_jsxs(_components.td,{children:[`Lets Safari play the HLS stream natively instead of through the player’s HLS engine, which enables the audio track menu in iOS native fullscreen. `,_jsx(_components.code,{children:`auto`}),` applies on iPhone and iOS WebViews only. `,_jsx(_components.code,{children:`safari`}),` applies to every Safari, at the cost of quality selection and `,_jsx(_components.code,{children:`levelCap`}),`. Ignored for DRM videos.`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`off`})})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`direct-play-url`,children:`Direct play URL`}),`\n`,_jsx(_components.p,{children:`The direct play URL is a standalone page that hosts the player, for use when you want to link to a video rather than embed it:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://player.mediadelivery.net/play/{video_library_id}/{video_id}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`The page wraps the same embed player in a full-window layout and carries Open Graph metadata, so the link unfurls with the video title and thumbnail when shared on social platforms and in chat apps. It accepts the same query parameters as the embed URL:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://player.mediadelivery.net/play/{video_library_id}/{video_id}?t=30s`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`This example starts playback at 30 seconds.`}),`\n`,_jsx(Heading,{level:`2`,id:`player-keyboard-shortcuts`,children:`Player keyboard shortcuts`}),`\n`,_jsx(_components.p,{children:`Bunny Stream player has support for the following keyboard shortcuts.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Key`}),_jsx(_components.th,{children:`Action`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`0 to 9`}),_jsx(_components.td,{children:`Seek to 0% to 90% of the video`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`space`}),_jsx(_components.td,{children:`Toggle playback`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`K`}),_jsx(_components.td,{children:`Toggle playback`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`← or J`}),_jsx(_components.td,{children:`Seek backward 10 seconds`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`→ or L`}),_jsx(_components.td,{children:`Seek forward 10 seconds`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`↑`}),_jsx(_components.td,{children:`Increase volume`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`↓`}),_jsx(_components.td,{children:`Decrease volume`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`M`}),_jsx(_components.td,{children:`Toggle mute`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`F`}),_jsx(_components.td,{children:`Toggle fullscreen`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`C`}),_jsx(_components.td,{children:`Toggle captions`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\u003c`})}),_jsx(_components.td,{children:`Decrease playback speed`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`>`})}),_jsx(_components.td,{children:`Increase playback speed`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`custom-integration`,children:`Custom integration`}),`\n`,_jsxs(_components.p,{children:[`If you prefer to use your own player or a fully custom video integration, you can directly access the raw video files from Bunny Stream’s infrastructure. Please refer to our `,_jsx(_components.a,{href:`/stream/storage-structure`,children:`Video Storage Structure`}),` documentation for details on how to retrieve and utilize video files directly.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Embedding videos","description":"Bunny Stream is designed for developers and content creators to easily upload, process, and display videos within any application or website. Once your videos have been processed, you can embed them by using our lightweight embed player, enabling seamless playback across all devices and browsers.","href":"/stream/embedding"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How to embed a video","slug":"how-to-embed-a-video","depth":2,"children":[]},{"title":"Sizing and aspect ratio","slug":"sizing-and-aspect-ratio","depth":2,"children":[{"title":"Portrait video","slug":"portrait-video","depth":3,"children":[]}]},{"title":"Embedding restrictions","slug":"embedding-restrictions","depth":2,"children":[]},{"title":"Parameters","slug":"parameters","depth":2,"children":[]},{"title":"Supported Parameters","slug":"supported-parameters","depth":2,"children":[]},{"title":"Direct play URL","slug":"direct-play-url","depth":2,"children":[]},{"title":"Player keyboard shortcuts","slug":"player-keyboard-shortcuts","depth":2,"children":[]},{"title":"Custom integration","slug":"custom-integration","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"bunnynet-cb9733c2","siteName":"bunny.net Documentation","title":"Embedding videos - bunny.net Documentation","relatedPagesConfig":{"enabled":false,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-08T15:10:15.200Z","gitLastModified":"2026-09-08T15:09:38.000Z","originalFileLocation":"stream/embedding.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Bunny Stream is designed for developers and content creators to easily upload, process, and display videos within any application or website. Once your videos have been processed, you can embed them by using our lightweight embed player, enabling seamless playback across all devices and browsers.\">\u003cmeta data-mint-head name=\"application-name\" content=\"bunny.net Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/bunnynet-cb9733c2/Zv4NOenQlgPS3TXm/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/bunnynet-cb9733c2/Zv4NOenQlgPS3TXm/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/bunnynet-cb9733c2/Zv4NOenQlgPS3TXm/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/bunnynet-cb9733c2/Zv4NOenQlgPS3TXm/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/bunnynet-cb9733c2/Zv4NOenQlgPS3TXm/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/bunnynet-cb9733c2/Zv4NOenQlgPS3TXm/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/bunnynet-cb9733c2/Zv4NOenQlgPS3TXm/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/bunnynet-cb9733c2/Zv4NOenQlgPS3TXm/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/bunnynet-cb9733c2/Zv4NOenQlgPS3TXm/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Embedding videos - bunny.net Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Bunny Stream is designed for developers and content creators to easily upload, process, and display videos within any application or website. Once your videos have been processed, you can embed them by using our lightweight embed player, enabling seamless playback across all devices and browsers.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"bunny.net Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://bunny.net/docs/stream/embedding\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://bunnynet-cb9733c2.mintlify.app/_mintlify/api/og/v2?division=Playback\u0026amp;title=Embedding+videos\u0026amp;description=Bunny+Stream+is+designed+for+developers+and+content+creators+to+easily+upload%2C+process%2C+and+display+videos+within+any+application+or+website.+Once+your+videos+h\u0026amp;theme=3e3fa11ba94222b95e7f52d5\u0026amp;signature=21b8a3894a065cf1f65e2e841c8bda83c387cec7f431802a5f18a20e4b3386ff\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Embedding videos - bunny.net Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Bunny Stream is designed for developers and content creators to easily upload, process, and display videos within any application or website. Once your videos have been processed, you can embed them by using our lightweight embed player, enabling seamless playback across all devices and browsers.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://bunnynet-cb9733c2.mintlify.app/_mintlify/api/og/v2?division=Playback\u0026amp;title=Embedding+videos\u0026amp;description=Bunny+Stream+is+designed+for+developers+and+content+creators+to+easily+upload%2C+process%2C+and+display+videos+within+any+application+or+website.+Once+your+videos+h\u0026amp;theme=3e3fa11ba94222b95e7f52d5\u0026amp;signature=21b8a3894a065cf1f65e2e841c8bda83c387cec7f431802a5f18a20e4b3386ff\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/bunnynet-cb9733c2/Zv4NOenQlgPS3TXm/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"bunny.net Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#EF6126\">\u003clink data-mint-head rel=\"canonical\" href=\"https://bunny.net/docs/stream/embedding\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/stream/embedding.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://bunny.net/#organization\",\"name\":\"bunny.net Documentation\",\"url\":\"https://bunny.net\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/bunnynet-cb9733c2/54-4KCQKoNVNuoyW/logo/bunny-logo-dark.svg?fit=max\u0026auto=format\u0026n=54-4KCQKoNVNuoyW\u0026q=85\u0026s=62c091ea1aaea93d0a981902b7783e37\"}},{\"@type\":\"WebSite\",\"@id\":\"https://bunny.net/docs#website\",\"name\":\"bunny.net Documentation\",\"url\":\"https://bunny.net/docs\",\"publisher\":{\"@id\":\"https://bunny.net/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://bunny.net/docs/stream/embedding#webpage\",\"url\":\"https://bunny.net/docs/stream/embedding\",\"name\":\"Embedding videos\",\"description\":\"Bunny Stream is designed for developers and content creators to easily upload, process, and display videos within any application or website. Once your videos have been processed, you can embed them by using our lightweight embed player, enabling seamless playback across all devices and browsers.\",\"dateModified\":\"2026-09-08T15:09:38.000Z\",\"isPartOf\":{\"@id\":\"https://bunny.net/docs#website\"},\"breadcrumb\":{\"@id\":\"https://bunny.net/docs/stream/embedding#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://bunny.net/docs/stream/embedding#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Playback\",\"item\":\"https://bunny.net/docs/stream/player\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Embedding videos\",\"item\":\"https://bunny.net/docs/stream/embedding\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://bunny.net/docs/stream/embedding#article\",\"headline\":\"Embedding videos\",\"name\":\"Embedding videos\",\"description\":\"Bunny Stream is designed for developers and content creators to easily upload, process, and display videos within any application or website. Once your videos have been processed, you can embed them by using our lightweight embed player, enabling seamless playback across all devices and browsers.\",\"url\":\"https://bunny.net/docs/stream/embedding\",\"mainEntityOfPage\":{\"@id\":\"https://bunny.net/docs/stream/embedding#webpage\"},\"dateModified\":\"2026-09-08T15:09:38.000Z\",\"publisher\":{\"@id\":\"https://bunny.net/#organization\"},\"isPartOf\":{\"@id\":\"https://bunny.net/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"bunny.net Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"bunny.net Documentation","nav":{"global":null,"products":[{"product":"Home","icon":"book-open","pages":[{"title":"Home","href":""}]},{"product":"CDN","icon":"zap","description":"Accelerate and protect your content globally","pages":[{"title":"CDN","href":"/cdn"}]},{"product":"Magic Containers","icon":"box","description":"Deploy any app anywhere with Docker","pages":[{"title":"Magic Containers","href":"/magic-containers"}]},{"product":"Edge Scripting","icon":"code","description":"Deploy serverless code at the edge","pages":[{"title":"Edge Scripting","href":"/scripting"}]},{"product":"Stream","icon":"video","description":"Video streaming and delivery platform","tabs":[{"tab":"Documentation","groups":[{"group":"Documentation","pages":[{"title":"Bunny Stream","sidebarTitle":"Introduction","mode":"wide","href":"/stream"},{"title":"Quickstart","href":"/stream/quickstart"},{"title":"Authentication","href":"/stream/authentication"},{"title":"Pricing","href":"/stream/pricing"},{"title":"Bunny Stream Changelog","sidebarTitle":"Changelog","url":"/changelog?tags=Stream","href":"/stream/changelog"}]},{"group":"Features","pages":[{"group":"Encoding","pages":[{"title":"Free Encoding","sidebarTitle":"Free Encoding","href":"/stream/encoding"},{"title":"Adaptive bitrate streaming","href":"/stream/adaptive-bitrate"},{"title":"Multi-audio","href":"/stream/multi-audio"}]},{"title":"Premium Encoding","href":"/stream/premium-encoding"},{"title":"Transcribing","href":"/stream/transcribing"},{"title":"Smart Generate","href":"/stream/smart-generate"},{"group":"MediaCage DRM","pages":[{"title":"MediaCage DRM","sidebarTitle":"Overview","href":"/stream/drm/index"},{"title":"Quickstart MediaCage Basic DRM","href":"/stream/quickstart-mediacage-basic"},{"title":"Quickstart MediaCage Enterprise DRM","href":"/stream/quickstart-mediacage-enterprise"},{"group":"Basic DRM","pages":[{"title":"MediaCage Basic DRM","href":"/stream/mediacage-basic"},{"title":"Understanding MediaCage basic DRM","href":"/stream/mediacage-basic-guide"}]},{"group":"Enterprise DRM","pages":[{"title":"MediaCage Enterprise DRM","href":"/stream/mediacage-enterprise"},{"title":"Google Widevine DRM","href":"/stream/widevine-security-levels"},{"title":"Google Widevine DRM SD only for L3","href":"/stream/widevine-l3"},{"title":"Apple FairPlay Streaming","href":"/stream/fairplay-deployment"}]}]},{"title":"Advertising VAST","href":"/stream/vast"},{"title":"Delivery Tiers","href":"/stream/delivery-tiers"},{"title":"Replication","href":"/stream/replication"},{"group":"Security","pages":[{"title":"Security","sidebarTitle":"Overview","href":"/stream/security"},{"title":"Understanding Bunny Stream security options","sidebarTitle":"Security Options","href":"/stream/security-options"},{"title":"Embedded view token authentication","sidebarTitle":"Token Authentication","href":"/stream/token-authentication"}]},{"title":"Statistics","href":"/stream/statistics"},{"title":"Webhooks","href":"/stream/webhooks"}]},{"group":"Manage Videos","pages":[{"group":"Upload","pages":[{"title":"Dashboard","href":"/stream/dashboard"},{"title":"HTTP","href":"/stream/http-api"},{"title":"URL Fetch","href":"/stream/url-fetch"},{"title":"TUS Resumable Uploads","href":"/stream/tus-resumable-uploads"},{"group":"Frameworks","pages":[{"title":"Upload videos to Bunny Stream from Laravel","sidebarTitle":"Laravel","href":"/stream/upload/laravel"},{"title":"Upload videos to Bunny Stream from Rails","sidebarTitle":"Rails","href":"/stream/upload/rails"},{"title":"Upload videos to Bunny Stream from Django","sidebarTitle":"Django","href":"/stream/upload/django"}]}]},{"title":"Collections","href":"/stream/collections"},{"title":"Tagging","href":"/stream/tagging"},{"title":"MetaTags","href":"/stream/metatags"},{"title":"Storage Structure","href":"/stream/storage-structure"}]},{"group":"Playback","pages":[{"title":"Bunny Player","sidebarTitle":"Bunny Player","href":"/stream/player"},{"title":"Overview","sidebarTitle":"Player settings","description":"This area focuses on tailoring the Bunny Player's look and functionality to match your branding or specific preferences.","href":"/stream/player-settings"},{"title":"Embedding videos","href":"/stream/embedding"},{"title":"Playback control API","description":"The Bunny Stream Player offers a rich set of events and methods through its embeddable iframe player, enabling external programmatic interaction with playback sessions. To ensure standardization and ease of integration, the embeddable iframe player employs the player.js JavaScript library.","href":"/stream/playback-api"},{"title":"MP4 Fallback","href":"/stream/mp4-downloads"},{"group":"Frameworks","pages":[{"title":"Use Bunny Player with React","sidebarTitle":"React","href":"/stream/player/react"},{"title":"Use Bunny Player with Next.js","sidebarTitle":"Next.js","href":"/stream/player/nextjs"},{"title":"Use Bunny Player with Vue and Nuxt","sidebarTitle":"Vue and Nuxt","href":"/stream/player/vue"},{"title":"Use Bunny Player with Svelte and SvelteKit","sidebarTitle":"Svelte and SvelteKit","href":"/stream/player/svelte"},{"title":"Use Bunny Player with Astro","sidebarTitle":"Astro","href":"/stream/player/astro"},{"title":"Use Bunny Player with JavaScript","sidebarTitle":"JavaScript","href":"/stream/player/javascript"},{"title":"Sign Bunny Player embed URLs on the server","sidebarTitle":"Signed embed URLs","href":"/stream/player/signed-embeds"}]},{"group":"Mobile SDKs","tag":"New","expanded":true,"pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/stream/mobile-sdk"},{"title":"Token authentication with Mobile SDKs","sidebarTitle":"Mobile SDK Token Authentication","href":"/stream/mobile-sdk-token-authentication"},{"title":"Expo Video guide","href":"/stream/expo-video"},{"title":"Android SDK","tag":"Kotlin","href":"/stream/android-sdk"},{"title":"iOS SDK","tag":"Swift","href":"/stream/ios-sdk"},{"title":"React Native SDK","tag":"Typescript","sidebarTitle":"React Native SDK","href":"/stream/react-native-sdk"}]},{"group":"3rd Party Players","pages":[{"title":"Introduction","href":"/stream/players/index"},{"title":"Bitmovin player integration","href":"/stream/players/bitmovin"},{"title":"Shaka Player integration","href":"/stream/players/shaka"},{"title":"Widevine HTML5 integration","href":"/stream/players/widevine"},{"title":"Fairplay HTML5 player integration","href":"/stream/players/fairplay"}]},{"title":"Custom head HTML migration guide","href":"/stream/custom-head-html-migration-guide"}]},{"group":"Reference","pages":[{"title":"Video Specification","href":"/stream/video-specification"},{"title":"Vimeo2Bunny CLI","href":"/stream/vimeo2bunny"},{"title":"Data and Privacy","href":"/stream/data-and-privacy"},{"title":"API Reference","url":"/api-reference/stream","href":"/stream/api-reference"}]}]}]},{"product":"Storage","icon":"hard-drive","description":"Global object storage","pages":[{"title":"Storage","href":"/storage"}]},{"product":"Shield","icon":"shield","description":"Stay protected and online no matter what","pages":[{"title":"Shield","href":"/shield"}]},{"product":"Optimizer","icon":"sparkles","description":"Automatic image and web optimization.","pages":[{"title":"Optimizer","href":"/optimizer"}]},{"product":"DNS","icon":"globe","description":"Unlock the true power of DNS with an ultra-fast scriptable platform","pages":[{"title":"DNS","href":"/dns"}]},{"product":"Database","icon":"database","description":"Serverless SQLite over HTTP","pages":[{"title":"Database","href":"/database"}]},{"product":"Integrations","icon":"puzzle","description":"Official and third-party plugins and integrations","pages":[{"title":"Integrations","href":"/integrations/wordpress"}]},{"product":"CLI","icon":"terminal","description":"Manage bunny.net from your terminal","pages":[{"title":"CLI","href":"/cli"}]},{"product":"API Reference","icon":"square-terminal","description":"Build \u0026 Integrate with the Platform API","pages":[{"title":"API Reference","href":"/api-reference"}]},{"product":"Partners","icon":"handshake","description":"Manage customers, pricing, and billing as a bunny.net partner","pages":[{"title":"Partners","href":"/partners"}]}]},"basePath":"","title":"Embedding videos - bunny.net Documentation","buildId":"dpl_4RHMRqtvdHvKgaEfTTjFqjzja3B6","deploymentId":"dpl_4RHMRqtvdHvKgaEfTTjFqjzja3B6","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-CZTaVDTN.js","lightbox-handle-r17bVUz3.js"]}