CINXE.COM

AndroidX Media3 - Medium

<!DOCTYPE html><html xmlns:cc="http://creativecommons.org/ns#"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# medium-com: http://ogp.me/ns/fb/medium-com#"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=contain"><title>AndroidX Media3 - Medium</title><link rel="canonical" href="https://medium.com/google-exoplayer"><link id="feedLink" rel="alternate" type="application/rss+xml" title="RSS" href="https://medium.com/feed/google-exoplayer"><meta name="robots" content="index,follow"><meta name="title" content="AndroidX Media3 - Medium"><meta name="referrer" content="unsafe-url"><meta name="description" content="The Media3 developer blog."><meta name="theme-color" content="#000000"><meta property="og:title" content="AndroidX Media3 – Medium"><meta property="twitter:title" content="AndroidX Media3 – Medium"><meta property="og:url" content="https://medium.com/google-exoplayer"><meta property="og:image" content="https://cdn-images-1.medium.com/max/1200/1*T6Iewm9z1-b78nwfzQDnBg.png"><meta property="fb:app_id" content="542599432471018"><meta property="og:description" content="The Media3 developer blog."><meta name="twitter:description" content="The Media3 developer blog."><meta name="twitter:image:src" content="https://cdn-images-1.medium.com/max/1200/1*T6Iewm9z1-b78nwfzQDnBg.png"><meta property="og:type" content="medium-com:collection"><meta name="twitter:card" content="summary_large_image"><meta property="medium-com:creator" content="https://medium.com/@tonihei"><meta name="twitter:site" content="@Medium"><meta property="og:site_name" content="Medium"><meta name="twitter:app:name:iphone" content="Medium"><meta name="twitter:app:id:iphone" content="828256236"><meta name="twitter:app:url:iphone" content="medium://google-exoplayer"><meta property="al:ios:app_name" content="Medium"><meta property="al:ios:app_store_id" content="828256236"><meta property="al:android:package" content="com.medium.reader"><meta property="al:android:app_name" content="Medium"><meta property="al:ios:url" content="medium://google-exoplayer"><meta property="al:android:url" content="medium://google-exoplayer"><meta property="al:web:url" content="https://medium.com/google-exoplayer"><link rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml" /><link rel="alternate" href="android-app://com.medium.reader/https/medium.com/google-exoplayer" /><script type="application/ld+json">{"@context": "http://schema.org", "@graph": [{"@type": "WebSite", "url": "https:\/\/medium.com", "name": "Medium", "alternateName": "Medium is a community of readers and writers offering unique perspectives on ideas large and small."},{"@type": "Organization", "url": "https:\/\/medium.com\/google-exoplayer", "name": "AndroidX Media3"}]}</script><link rel="stylesheet" href="https://cdn-static-1.medium.com/_/fp/css/main-branding-base.ouwh4uMviI3QQWIjxRhkHA.12.css"><script>!function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener);</script><script>document.domain = document.domain;</script><script>if (window.top !== window.self) window.location = 'about:blank';var OB_startTime = new Date().getTime(); var OB_loadErrors = []; function _onerror(e) { OB_loadErrors.push(e) }; if (document.addEventListener) document.addEventListener("error", _onerror, true); else if (document.attachEvent) document.attachEvent("onerror", _onerror); function _asyncScript(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = u; f.parentNode.insertBefore(s, f);}function _asyncStyles(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("link"); s.rel = "stylesheet"; s.href = u; f.parentNode.insertBefore(s, f); return s}(new Image()).src = "/_/stat?event=pixel.load&origin=" + encodeURIComponent(location.origin);</script><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; ga("create", "G-7JY7T788PK", "auto", {"allowLinker": true, "legacyCookieDomain": window.location.hostname});ga("send", "pageview");</script><script async src="https://www.google-analytics.com/analytics.js"></script><script>(function () {var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; document.write("<style>section.section-image--fullBleed.is-backgrounded {padding-top: " + Math.round(1.1 * height) + "px;}section.section-image--fullScreen.is-backgrounded, section.section-image--coverFade.is-backgrounded {min-height: " + height + "px; padding-top: " + Math.round(0.5 * height) + "px;}.u-height100vh {height: " + height + "px !important;}.u-height110vh {height: " + Math.round(1.1 * height) + "px !important;}.u-minHeight100vh {min-height: " + height + "px !important;}.u-maxHeight100vh {max-height: " + height + "px !important;}section.section-image--coverFade {height: " + height + "px;}.section-aspectRatioViewportPlaceholder, .section-aspectRatioViewportCropPlaceholder {max-height: " + height + "px;}.section-aspectRatioViewportBottomSpacer, .section-aspectRatioViewportBottomPlaceholder {max-height: " + Math.round(0.5 * height) + "px;}.zoomable:before {top: " + (-1 * height) + "px; left: " + (-1 * width) + "px; padding: " + height + "px " + width + "px;}</style>");})()</script><!--[if lt IE 9]><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js"></script><![endif]--><link rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19" class="js-favicon"><link rel="apple-touch-icon" sizes="152x152" href="https://cdn-images-1.medium.com/fit/c/304/304/1*T6Iewm9z1-b78nwfzQDnBg.png"><link rel="apple-touch-icon" sizes="120x120" href="https://cdn-images-1.medium.com/fit/c/240/240/1*T6Iewm9z1-b78nwfzQDnBg.png"><link rel="apple-touch-icon" sizes="76x76" href="https://cdn-images-1.medium.com/fit/c/152/152/1*T6Iewm9z1-b78nwfzQDnBg.png"><link rel="apple-touch-icon" sizes="60x60" href="https://cdn-images-1.medium.com/fit/c/120/120/1*T6Iewm9z1-b78nwfzQDnBg.png"><link rel="mask-icon" href="https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg" color="#171717"></head><body itemscope class=" browser-ie os-windows v-unbound v-glyph v-glyph--m2-unbound-source-serif-pro is-noJs"><script>document.body.className = document.body.className.replace(/(^|\s)is-noJs(\s|$)/, "$1is-js$2")</script><div class="site-main" id="container"><div class="butterBar butterBar--error"></div><div class="surface"><div id="prerendered" class="screenContent"><div class="metabar u-clearfix js-metabar"><div class="branch-journeys-top"></div><div class="js-metabarMiddle metabar-inner u-marginAuto u-maxWidth1032 u-flexCenter u-justifyContentSpaceBetween u-height65 u-xs-height56 u-paddingHorizontal20"><div class="metabar-block u-flex1 u-flexCenter"><div class="js-metabarLogoLeft"><a href="https://medium.com/" data-log-event="home" class="siteNav-logo u-fillBlack u-flex0 u-flexCenter u-paddingTop0"><span class="svgIcon svgIcon--wordmarkMedium svgIcon--120x26px u-flex"><svg class="svgIcon-use" width="120" height="26" ><path d="M29.57 1.404l.036-.008V1.12h-7.27l-6.75 15.979-6.75-15.98H1.003v.278l.035.008c1.327.302 2 .752 2 2.374v18.993c0 1.623-.676 2.073-2.003 2.374L1 25.153v.279h5.315v-.278l-.035-.008c-1.327-.302-2-.751-2-2.374V4.88l8.67 20.552h.492l8.924-21.125V23.24c-.114 1.282-.782 1.677-1.983 1.95l-.036.009v.275h9.259V25.2l-.036-.008c-1.203-.274-1.886-.67-2-1.95l-.006-19.464h.006c0-1.622.674-2.072 2-2.374zm4.23 12.582c.15-3.412 1.367-5.875 3.41-5.918.629.01 1.157.219 1.568.62.872.852 1.282 2.634 1.219 5.298h-6.198zm-.092.962h10.85v-.046c-.03-2.61-.78-4.64-2.228-6.033-1.25-1.204-3.103-1.867-5.048-1.867h-.043c-1.01 0-2.248.246-3.13.693a7.316 7.316 0 00-2.623 2.086c-1.185 1.479-1.903 3.477-2.078 5.724a13.717 13.717 0 00-.04.755c-.004.195-.005.39-.001.587.117 5.087 2.846 9.153 7.692 9.153 4.254 0 6.73-3.132 7.348-7.336l-.312-.11c-1.085 2.259-3.034 3.628-5.252 3.461-3.028-.228-5.347-3.32-5.137-7.066m23.122 6.893c-.356.85-1.099 1.319-2.094 1.319-.995 0-1.905-.689-2.552-1.939-.694-1.342-1.06-3.24-1.06-5.487 0-4.678 1.445-7.704 3.68-7.704.937 0 1.674.468 2.026 1.284v12.527zm7.198 3.335c-1.327-.316-2-.787-2-2.492V0l-8.062 2.392v.293l.05-.004c1.111-.09 1.866.064 2.304.472.343.32.51.809.51 1.498v3.11C56.033 7.25 55.088 7 53.94 7c-2.326 0-4.453.987-5.986 2.779-1.599 1.867-2.444 4.42-2.444 7.38 0 5.287 2.584 8.84 6.43 8.84 2.25 0 4.06-1.242 4.888-3.336v2.811h7.233v-.29l-.035-.008zM70.94 3.085c0-1.65-1.236-2.896-2.875-2.896-1.632 0-2.908 1.272-2.908 2.896 0 1.624 1.278 2.896 2.908 2.896 1.64 0 2.875-1.245 2.875-2.896zm1.903 22.092c-1.327-.316-2-.787-2-2.492h-.006V7.055l-7.234 2.092v.284l.043.004c1.566.14 1.994.683 1.994 2.525v13.515h7.24v-.29l-.037-.008zm18.536 0c-1.327-.316-2-.787-2-2.492V7.055L82.49 9.078v.285l.04.004c1.28.136 1.65.71 1.65 2.56v9.88c-.426.85-1.227 1.356-2.196 1.39-1.573 0-2.439-1.07-2.439-3.012V7.055l-7.234 2.092v.284l.044.004c1.565.14 1.994.683 1.994 2.525v8.362a9.443 9.443 0 00.15 1.741l.13.57C75.243 24.845 76.848 26 79.362 26c2.129 0 3.996-1.328 4.818-3.405v2.885h7.233v-.291l-.034-.012zm28.102.298v-.291l-.035-.009c-1.44-.334-2.001-.964-2.001-2.248V12.295C117.445 8.98 115.597 7 112.5 7c-2.257 0-4.16 1.314-4.893 3.36-.582-2.168-2.257-3.36-4.734-3.36-2.175 0-3.88 1.156-4.612 3.11V7.056l-7.233 2.006v.286l.043.004c1.547.138 1.994.697 1.994 2.492v13.631h6.75v-.29l-.037-.01c-1.148-.271-1.519-.767-1.519-2.04V10.95c.304-.715.917-1.562 2.127-1.562 1.504 0 2.266 1.05 2.266 3.116v12.972h6.751v-.29l-.035-.01c-1.149-.271-1.52-.767-1.52-2.04V12.294a7.107 7.107 0 00-.095-1.21c.322-.777.97-1.696 2.23-1.696 1.524 0 2.265 1.02 2.265 3.116v12.972h7.233z"/></svg></span><span class="u-textScreenReader">Homepage</span></a></div><div class="u-paddingLeft10 u-sm-show r-paddingRight10"><a href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com/google-exoplayer%3F~feature=LoMobileNavBar&~channel=ShowCollectionHome&~stage=m2">Open in app</a></div></div><div class="metabar-block u-flex0 u-flexCenter"><div class="u-flexCenter u-height65 u-xs-height56"><div class="buttonSet buttonSet--wide u-lineHeightInherit"><a class="button button--primary button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fgoogle-exoplayer&amp;source=--------------------------nav_reg&amp;operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/google-exoplayer" data-action-source="--------------------------nav_reg">Sign in</a><a class="button button--primary button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fgoogle-exoplayer&amp;source=--------------------------nav_reg&amp;operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/google-exoplayer" data-action-source="--------------------------nav_reg">Get started</a></div></div></div></div></div><div class="metabar metabar--spacer js-metabarSpacer u-height65 u-xs-height56"></div><div class="collectionHeader js-collectionHeaderContainer u-relative collectionHeader--layoutSmall collectionHeader--alignmentLeft collectionHeader--withoutLogo collectionHeader--withoutBackground collectionHeader--colorBehaviorSubtle collectionHeader--withNavigation collectionHeader--editorLayoutTitle is-modeView"><div class="collectionHeader-aspectRatioTable"><div class="collectionHeader-aspectRatioContent u-backgroundSizeCover js-collectionHeaderBackground"><div class="collectionHeader-overlayBackground u-height100vh"></div><header class="collectionHeader-heroAndInlineNav u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto u-foreground js-collectionHeader"><div class="collectionHeader-hero js-collectionHeaderHero u-clearfix"><div class="collectionHeader-heroInner"><div class="collectionHeader-logo js-collectionHeaderLogo" style=""><a class="link u-baseColor--link" href="https://medium.com/google-exoplayer" title="Go to AndroidX Media3" aria-label="Go to AndroidX Media3"><div class="u-relative u-marginAuto"><div style="padding-bottom: 75%"></div><img class="collectionHeader-logoImage js-collectionHeaderLogoImage" /></div></a></div><div class="collectionHeader-nameAndDescription"><a class="link link--noUnderline u-baseColor--link" href="https://medium.com/google-exoplayer" title="Go to AndroidX Media3" aria-label="Go to AndroidX Media3"><h1 class="collectionHeader-name js-collectionName u-foreground u-baseColor--textDark u-paddingBottom4 u-lineHeightTightest u-contentSansBold u-fontSize40 u-xs-fontSize32">google-exoplayer</h1></a></div></div></div><nav class="collectionHeader-nav u-clearfix js-collectionHeaderNav u-lineHeight40 u-overflowHiddenY u-flex1"><div class="buttonSet u-flex1 u-noWrap u-overflowX u-paddingBottom100 u-xs-marginRight15"><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/google-exoplayer/archive">Archive</a></li></div><div class="buttonSet u-textAlignRight u-marginLeft18 u-flex0 u-noWrap"><label class="button button--small button--chromeless button--withIcon button--withSvgIcon inputGroup u-sm-hide metabar-predictiveSearch u-baseColor--buttonNormal u-baseColor--placeholderNormal" title="Search"><span class="svgIcon svgIcon--search svgIcon--25px u-baseColor--iconLight"><svg class="svgIcon-use" width="25" height="25" ><path d="M20.067 18.933l-4.157-4.157a6 6 0 10-.884.884l4.157 4.157a.624.624 0 10.884-.884zM6.5 11c0-2.62 2.13-4.75 4.75-4.75S16 8.38 16 11s-2.13 4.75-4.75 4.75S6.5 13.62 6.5 11z"/></svg></span><input class="js-predictiveSearchInput textInput textInput--rounded textInput--darkText u-baseColor--textNormal textInput--transparent" type="search" placeholder="Search" required="true" data-collection-id="8be3f5be7065" /></label><button class="button button--primary button--smallest u-noUserSelect button--withChrome u-accentColor--buttonNormal js-relationshipButton is-smallPill" data-action="sign-up-prompt" data-sign-in-action="toggle-follow-collection" data-requires-token="true" data-redirect="https://medium.com/_/subscribe/collection/google-exoplayer" data-action-source="pub_header----8be3f5be7065----------------------follow_pub" data-collection-id="8be3f5be7065"><span class="button-label js-buttonLabel">Follow</span></button></div></nav></header></div><div class="collectionHeader-aspectRatioCell"><div class="collectionHeader-aspectRatioFullWidth"></div></div></div></div><div class="u-marginBottom40 js-collectionStream"><div class="streamItem streamItem--section js-streamItem"><div class="u-clearfix u-maxWidth1032 u-marginAuto"><div class="row u-marginTop30 u-marginBottom20 u-sm-marginLeft20 u-sm-marginRight20 u-xs-marginTop0 u-xs-marginRight0 u-xs-marginLeft0"><div class="col u-size8of12 u-xs-size12of12"><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------0-----------------------" data-post-id="ba1c9c17ee1a"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@tonihei" data-action="show-user-card" data-action-value="d994f3760649" data-action-type="hover" data-user-id="d994f3760649" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*gM8DKToXqjbVvcpe." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Toni Heidenreich"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@tonihei?source=collection_home---6------0-----------------------" data-action="show-user-card" data-action-source="collection_home---6------0-----------------------" data-action-value="d994f3760649" data-action-type="hover" data-user-id="d994f3760649" dir="auto">Toni Heidenreich</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/media3-1-4-0-whats-new-ba1c9c17ee1a?source=collection_home---6------0-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/media3-1-4-0-whats-new-ba1c9c17ee1a?source=collection_home---6------0-----------------------" data-action-source="preview-listing" ><time datetime="2024-07-25T16:59:21.543Z">Jul 25</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/media3-1-4-0-whats-new-ba1c9c17ee1a?source=collection_home---6------0-----------------------" data-action-source="collection_home---6------0-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="0*x77zyHk-CD5RvQXY.png" data-width="1400" data-height="417" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/0*x77zyHk-CD5RvQXY.png"></div></figure><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf-after--figure graf--title">Media3 1.4.0 — what’s new?</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle">Media3 1.4.0 is released with new preload utilities, better HDR support in…</h4></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/media3-1-4-0-whats-new-ba1c9c17ee1a?source=collection_home---6------0-----------------------" data-action="open-post" data-action-source="collection_home---6------0-----------------------" data-action-value="https://medium.com/google-exoplayer/media3-1-4-0-whats-new-ba1c9c17ee1a?source=collection_home---6------0-----------------------" data-post-id="ba1c9c17ee1a">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="ba1c9c17ee1a" data-is-flush-left="true" data-source="listing-----ba1c9c17ee1a---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/ba1c9c17ee1a" data-action-source="listing-----ba1c9c17ee1a---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="ba1c9c17ee1a">65</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/media3-1-4-0-whats-new-ba1c9c17ee1a?source=collection_home---6------0-----------------------#--responses" data-action-source="collection_home---6------0-----------------------">2 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="ba1c9c17ee1a"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------1-----------------------" data-post-id="d6957f4b077d"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@abl26" data-action="show-user-card" data-action-value="25af5ba1a589" data-action-type="hover" data-user-id="25af5ba1a589" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*VdJk7jzAC54XX34r." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Andrew Lewis"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@abl26?source=collection_home---6------1-----------------------" data-action="show-user-card" data-action-source="collection_home---6------1-----------------------" data-action-value="25af5ba1a589" data-action-type="hover" data-user-id="25af5ba1a589" dir="auto">Andrew Lewis</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/media3-1-3-0-whats-new-d6957f4b077d?source=collection_home---6------1-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/media3-1-3-0-whats-new-d6957f4b077d?source=collection_home---6------1-----------------------" data-action-source="preview-listing" ><time datetime="2024-03-28T13:48:57.660Z">Mar 28</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/media3-1-3-0-whats-new-d6957f4b077d?source=collection_home---6------1-----------------------" data-action-source="collection_home---6------1-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="4d22" id="4d22" class="graf graf--h3 graf--leading graf--title">Media3 1.3.0 — What’s new?</h3><p name="23d4" id="23d4" class="graf graf--p graf-after--h3 graf--trailing">Media3 1.3.0 is now available! Feature highlights include support for image output in ExoPlayer, including handling for DASH thumbnails, some initial low-level APIs for preloading to reduce latency when switching between media items, transmuxing optimizations in Transformer, and…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/media3-1-3-0-whats-new-d6957f4b077d?source=collection_home---6------1-----------------------" data-action="open-post" data-action-source="collection_home---6------1-----------------------" data-action-value="https://medium.com/google-exoplayer/media3-1-3-0-whats-new-d6957f4b077d?source=collection_home---6------1-----------------------" data-post-id="d6957f4b077d">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="d6957f4b077d" data-is-flush-left="true" data-source="listing-----d6957f4b077d---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/d6957f4b077d" data-action-source="listing-----d6957f4b077d---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="d6957f4b077d">14</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/media3-1-3-0-whats-new-d6957f4b077d?source=collection_home---6------1-----------------------#--responses" data-action-source="collection_home---6------1-----------------------">2 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="d6957f4b077d"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------2-----------------------" data-post-id="668b4e4c2f97"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@kristisimakova" data-action="show-user-card" data-action-value="c775d3478a42" data-action-type="hover" data-user-id="c775d3478a42" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*Df3x9vx_Bd9vyBoFpK8vTg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Kristina Simakova"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@kristisimakova?source=collection_home---6------2-----------------------" data-action="show-user-card" data-action-source="collection_home---6------2-----------------------" data-action-value="c775d3478a42" data-action-type="hover" data-user-id="c775d3478a42" dir="auto">Kristina Simakova</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/trim-transcode-concatenate-your-guide-to-media3-editing-libraries-668b4e4c2f97?source=collection_home---6------2-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/trim-transcode-concatenate-your-guide-to-media3-editing-libraries-668b4e4c2f97?source=collection_home---6------2-----------------------" data-action-source="preview-listing" ><time datetime="2024-03-06T16:41:45.304Z">Mar 6</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/trim-transcode-concatenate-your-guide-to-media3-editing-libraries-668b4e4c2f97?source=collection_home---6------2-----------------------" data-action-source="collection_home---6------2-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*E1mHxlSOJUImw4SDV7tTTQ.jpeg" data-width="1800" data-height="600" data-is-featured="true" alt="an illustration of a film strip" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*E1mHxlSOJUImw4SDV7tTTQ.jpeg"></div></figure><h3 name="79ae" id="79ae" class="graf graf--h3 graf-after--figure graf--trailing graf--title">Trim, Transcode, Concatenate: Your Guide to Media3 Editing Libraries</h3></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/trim-transcode-concatenate-your-guide-to-media3-editing-libraries-668b4e4c2f97?source=collection_home---6------2-----------------------" data-action="open-post" data-action-source="collection_home---6------2-----------------------" data-action-value="https://medium.com/google-exoplayer/trim-transcode-concatenate-your-guide-to-media3-editing-libraries-668b4e4c2f97?source=collection_home---6------2-----------------------" data-post-id="668b4e4c2f97">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="668b4e4c2f97" data-is-flush-left="true" data-source="listing-----668b4e4c2f97---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/668b4e4c2f97" data-action-source="listing-----668b4e4c2f97---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="668b4e4c2f97">70</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="668b4e4c2f97"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------3-----------------------" data-post-id="82c6d2490f8d"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ibaker_97741" data-action="show-user-card" data-action-value="fcc058488992" data-action-type="hover" data-user-id="fcc058488992" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*Q6FL7KQJB4NP5wVC" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ian Baker"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ibaker_97741?source=collection_home---6------3-----------------------" data-action="show-user-card" data-action-source="collection_home---6------3-----------------------" data-action-value="fcc058488992" data-action-type="hover" data-user-id="fcc058488992" dir="auto">Ian Baker</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/media3-1-2-0-whats-new-82c6d2490f8d?source=collection_home---6------3-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/media3-1-2-0-whats-new-82c6d2490f8d?source=collection_home---6------3-----------------------" data-action-source="preview-listing" ><time datetime="2023-11-21T16:47:58.818Z">Nov 21, 2023</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/media3-1-2-0-whats-new-82c6d2490f8d?source=collection_home---6------3-----------------------" data-action-source="collection_home---6------3-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*AsLObd8ldBBiW8GdhRrfkw.png" data-width="550" data-height="279" data-is-featured="true" alt="Diagram showing a device running ExoPlayer making an HTTP GET request for ‘/segment1.m4s’ to a CDN Edge server and including a CMCD-Object HTTP request header with value ‘br=3200,d=4004,ot=v,tb=6000’." src="https://cdn-images-1.medium.com/fit/t/1600/480/1*AsLObd8ldBBiW8GdhRrfkw.png"></div></figure><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf-after--figure graf--title">Media3 1.2.0 — What’s new?</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle">Media3 1.2.0 is now out! This post highlights some of the most significant…</h4></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/media3-1-2-0-whats-new-82c6d2490f8d?source=collection_home---6------3-----------------------" data-action="open-post" data-action-source="collection_home---6------3-----------------------" data-action-value="https://medium.com/google-exoplayer/media3-1-2-0-whats-new-82c6d2490f8d?source=collection_home---6------3-----------------------" data-post-id="82c6d2490f8d">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="82c6d2490f8d" data-is-flush-left="true" data-source="listing-----82c6d2490f8d---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/82c6d2490f8d" data-action-source="listing-----82c6d2490f8d---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="82c6d2490f8d">43</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/media3-1-2-0-whats-new-82c6d2490f8d?source=collection_home---6------3-----------------------#--responses" data-action-source="collection_home---6------3-----------------------">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="82c6d2490f8d"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------4-----------------------" data-post-id="27d9dba9f5ed"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@tonihei" data-action="show-user-card" data-action-value="d994f3760649" data-action-type="hover" data-user-id="d994f3760649" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*gM8DKToXqjbVvcpe." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Toni Heidenreich"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@tonihei?source=collection_home---6------4-----------------------" data-action="show-user-card" data-action-source="collection_home---6------4-----------------------" data-action-value="d994f3760649" data-action-type="hover" data-user-id="d994f3760649" dir="auto">Toni Heidenreich</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/media3-is-ready-to-play-27d9dba9f5ed?source=collection_home---6------4-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/media3-is-ready-to-play-27d9dba9f5ed?source=collection_home---6------4-----------------------" data-action-source="preview-listing" ><time datetime="2023-03-24T10:25:04.407Z">Mar 24, 2023</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/media3-is-ready-to-play-27d9dba9f5ed?source=collection_home---6------4-----------------------" data-action-source="collection_home---6------4-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="0*F95XHSwQ6AQUacGm.png" data-width="1600" data-height="476" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/0*F95XHSwQ6AQUacGm.png"></div></figure><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf-after--figure graf--title">Media3 is ready to play!</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle">The full 1.0 release of the Jetpack Media3 library is here.</h4></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/media3-is-ready-to-play-27d9dba9f5ed?source=collection_home---6------4-----------------------" data-action="open-post" data-action-source="collection_home---6------4-----------------------" data-action-value="https://medium.com/google-exoplayer/media3-is-ready-to-play-27d9dba9f5ed?source=collection_home---6------4-----------------------" data-post-id="27d9dba9f5ed">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="27d9dba9f5ed" data-is-flush-left="true" data-source="listing-----27d9dba9f5ed---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/27d9dba9f5ed" data-action-source="listing-----27d9dba9f5ed---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="27d9dba9f5ed">80</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/media3-is-ready-to-play-27d9dba9f5ed?source=collection_home---6------4-----------------------#--responses" data-action-source="collection_home---6------4-----------------------">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="27d9dba9f5ed"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------5-----------------------" data-post-id="2367a712f112"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@bachinger" data-action="show-user-card" data-action-value="27823e454ddd" data-action-type="hover" data-user-id="27823e454ddd" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*Pm5DLIc1dYiCFhD6GqpsQA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Marc Bächinger"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@bachinger?source=collection_home---6------5-----------------------" data-action="show-user-card" data-action-source="collection_home---6------5-----------------------" data-action-value="27823e454ddd" data-action-type="hover" data-user-id="27823e454ddd" dir="auto">Marc Bächinger</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/jetpack-media3-1-0-0-beta01-whats-new-2367a712f112?source=collection_home---6------5-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/jetpack-media3-1-0-0-beta01-whats-new-2367a712f112?source=collection_home---6------5-----------------------" data-action-source="preview-listing" ><time datetime="2022-06-28T21:38:01.933Z">Jun 28, 2022</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/jetpack-media3-1-0-0-beta01-whats-new-2367a712f112?source=collection_home---6------5-----------------------" data-action-source="collection_home---6------5-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="2a8d" id="2a8d" class="graf graf--h3 graf--leading graf--title"><strong class="markup--strong markup--h3-strong">Jetpack Media3 1.0.0-beta01 — What’s new?</strong></h3><p name="f6e8" id="f6e8" class="graf graf--p graf--hasDropCapModel graf-after--h3 graf--trailing">Jetpack Media3 1.0.0-beta01 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://developer.android.com/jetpack/androidx/releases/media3#1.0.0-beta01">full release notes</a>. Please note that the Jetpack Media3 1.0.0-beta01 release corresponds to the <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md">ExoPlayer</a>…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/jetpack-media3-1-0-0-beta01-whats-new-2367a712f112?source=collection_home---6------5-----------------------" data-action="open-post" data-action-source="collection_home---6------5-----------------------" data-action-value="https://medium.com/google-exoplayer/jetpack-media3-1-0-0-beta01-whats-new-2367a712f112?source=collection_home---6------5-----------------------" data-post-id="2367a712f112">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="2367a712f112" data-is-flush-left="true" data-source="listing-----2367a712f112---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/2367a712f112" data-action-source="listing-----2367a712f112---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="2367a712f112">43</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="2367a712f112"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------6-----------------------" data-post-id="ec83d30db17a"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ibaker_97741" data-action="show-user-card" data-action-value="fcc058488992" data-action-type="hover" data-user-id="fcc058488992" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*Q6FL7KQJB4NP5wVC" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ian Baker"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ibaker_97741?source=collection_home---6------6-----------------------" data-action="show-user-card" data-action-source="collection_home---6------6-----------------------" data-action-value="fcc058488992" data-action-type="hover" data-user-id="fcc058488992" dir="auto">Ian Baker</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/exoplayer-2-17-whats-new-ec83d30db17a?source=collection_home---6------6-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-17-whats-new-ec83d30db17a?source=collection_home---6------6-----------------------" data-action-source="preview-listing" ><time datetime="2022-03-15T17:22:59.936Z">Mar 15, 2022</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/exoplayer-2-17-whats-new-ec83d30db17a?source=collection_home---6------6-----------------------" data-action-source="collection_home---6------6-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="3229" id="3229" class="graf graf--h3 graf--leading graf--title">ExoPlayer 2.17 — What’s new</h3><p name="381d" id="381d" class="graf graf--p graf-after--h3">ExoPlayer 2.17 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md#2170-2022-02-24">full release notes</a>.</p><h3 name="9a1b" id="9a1b" class="graf graf--h3 graf-after--p graf--trailing">Server Side Ad Insertion</h3></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-17-whats-new-ec83d30db17a?source=collection_home---6------6-----------------------" data-action="open-post" data-action-source="collection_home---6------6-----------------------" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-17-whats-new-ec83d30db17a?source=collection_home---6------6-----------------------" data-post-id="ec83d30db17a">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="ec83d30db17a" data-is-flush-left="true" data-source="listing-----ec83d30db17a---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/ec83d30db17a" data-action-source="listing-----ec83d30db17a---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="ec83d30db17a">24</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="ec83d30db17a"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------7-----------------------" data-post-id="cf9ef8e62be1"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ojw28" data-action="show-user-card" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*v7zdaZiHMzECiiFBwes_zA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Olly Woodman"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ojw28?source=collection_home---6------7-----------------------" data-action="show-user-card" data-action-source="collection_home---6------7-----------------------" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto">Olly Woodman</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/were-hiring-cf9ef8e62be1?source=collection_home---6------7-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/were-hiring-cf9ef8e62be1?source=collection_home---6------7-----------------------" data-action-source="preview-listing" ><time datetime="2021-12-07T23:50:45.040Z">Dec 7, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="1 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/were-hiring-cf9ef8e62be1?source=collection_home---6------7-----------------------" data-action-source="collection_home---6------7-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="d1b4" id="d1b4" class="graf graf--h3 graf--leading graf--title">We’re hiring!</h3><p name="f4b2" id="f4b2" class="graf graf--p graf-after--h3">Are you looking for a new challenge? We’re growing the Android Media team in London, and are looking for enthusiastic engineers to work across a number of projects.</p><p name="cf4a" id="cf4a" class="graf graf--p graf-after--p graf--trailing">Our <strong class="markup--strong markup--p-strong">framework sub-team</strong> is responsible for some of the key media components within the Android OS. These include…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/were-hiring-cf9ef8e62be1?source=collection_home---6------7-----------------------" data-action="open-post" data-action-source="collection_home---6------7-----------------------" data-action-value="https://medium.com/google-exoplayer/were-hiring-cf9ef8e62be1?source=collection_home---6------7-----------------------" data-post-id="cf9ef8e62be1">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="cf9ef8e62be1" data-is-flush-left="true" data-source="listing-----cf9ef8e62be1---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/cf9ef8e62be1" data-action-source="listing-----cf9ef8e62be1---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="cf9ef8e62be1">34</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/were-hiring-cf9ef8e62be1?source=collection_home---6------7-----------------------#--responses" data-action-source="collection_home---6------7-----------------------">3 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="cf9ef8e62be1"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------8-----------------------" data-post-id="785afe47ef95"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@tonihei" data-action="show-user-card" data-action-value="d994f3760649" data-action-type="hover" data-user-id="d994f3760649" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*gM8DKToXqjbVvcpe." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Toni Heidenreich"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@tonihei?source=collection_home---6------8-----------------------" data-action="show-user-card" data-action-source="collection_home---6------8-----------------------" data-action-value="d994f3760649" data-action-type="hover" data-user-id="d994f3760649" dir="auto">Toni Heidenreich</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/exoplayer-2-16-whats-new-785afe47ef95?source=collection_home---6------8-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-16-whats-new-785afe47ef95?source=collection_home---6------8-----------------------" data-action-source="preview-listing" ><time datetime="2021-11-19T10:45:07.152Z">Nov 19, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/exoplayer-2-16-whats-new-785afe47ef95?source=collection_home---6------8-----------------------" data-action-source="collection_home---6------8-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="c294" id="c294" class="graf graf--h3 graf--leading graf--title"><strong class="markup--strong markup--h3-strong">ExoPlayer 2.16 — What’s new</strong></h3><p name="5720" id="5720" class="graf graf--p graf-after--h3">ExoPlayer 2.16 is out and this post highlights some of the most significant changes. As always, we recommend also taking a look at the full <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://github.com/google/ExoPlayer/blob/r2.16.1/RELEASENOTES.md">release notes</a>.</p><h3 name="fe33" id="fe33" class="graf graf--h3 graf-after--p graf--trailing">Android 12 compatibility</h3></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-16-whats-new-785afe47ef95?source=collection_home---6------8-----------------------" data-action="open-post" data-action-source="collection_home---6------8-----------------------" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-16-whats-new-785afe47ef95?source=collection_home---6------8-----------------------" data-post-id="785afe47ef95">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="785afe47ef95" data-is-flush-left="true" data-source="listing-----785afe47ef95---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/785afe47ef95" data-action-source="listing-----785afe47ef95---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="785afe47ef95">42</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-16-whats-new-785afe47ef95?source=collection_home---6------8-----------------------#--responses" data-action-source="collection_home---6------8-----------------------">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="785afe47ef95"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------9-----------------------" data-post-id="a7b7e8d167fe"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@donturner" data-action="show-user-card" data-action-value="7f5a2cb6598e" data-action-type="hover" data-user-id="7f5a2cb6598e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*F2tQfS9RL-Br9vcm_ih_NQ.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Don Turner"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@donturner?source=collection_home---6------9-----------------------" data-action="show-user-card" data-action-source="collection_home---6------9-----------------------" data-action-value="7f5a2cb6598e" data-action-type="hover" data-user-id="7f5a2cb6598e" dir="auto">Don Turner</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/introducing-the-android-media-developer-survey-a7b7e8d167fe?source=collection_home---6------9-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/introducing-the-android-media-developer-survey-a7b7e8d167fe?source=collection_home---6------9-----------------------" data-action-source="preview-listing" ><time datetime="2021-10-06T21:20:00.244Z">Oct 6, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="1 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/introducing-the-android-media-developer-survey-a7b7e8d167fe?source=collection_home---6------9-----------------------" data-action-source="collection_home---6------9-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*bU0EcOBK_yPnjUoUT7_Uxw.jpeg" data-width="6000" data-height="4000" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*bU0EcOBK_yPnjUoUT7_Uxw.jpeg"></div></figure><h3 name="caba" id="caba" class="graf graf--h3 graf-after--figure graf--title">Introducing the Android Media Developer Survey</h3><p name="8341" id="8341" class="graf graf--p graf-after--h3 graf--trailing">Here in the Android media team, we’re working to make it easier to make great…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/introducing-the-android-media-developer-survey-a7b7e8d167fe?source=collection_home---6------9-----------------------" data-action="open-post" data-action-source="collection_home---6------9-----------------------" data-action-value="https://medium.com/google-exoplayer/introducing-the-android-media-developer-survey-a7b7e8d167fe?source=collection_home---6------9-----------------------" data-post-id="a7b7e8d167fe">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="a7b7e8d167fe" data-is-flush-left="true" data-source="listing-----a7b7e8d167fe---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/a7b7e8d167fe" data-action-source="listing-----a7b7e8d167fe---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="a7b7e8d167fe">11</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="a7b7e8d167fe"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------10-----------------------" data-post-id="4239c693ea8e"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@christosts" data-action="show-user-card" data-action-value="ca7731d59899" data-action-type="hover" data-user-id="ca7731d59899" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*Od8ylM-hvvqQkrSn" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Christos Tsilopoulos"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@christosts?source=collection_home---6------10-----------------------" data-action="show-user-card" data-action-source="collection_home---6------10-----------------------" data-action-value="ca7731d59899" data-action-type="hover" data-user-id="ca7731d59899" dir="auto">Christos Tsilopoulos</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/exoplayer-2-15-whats-new-4239c693ea8e?source=collection_home---6------10-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-15-whats-new-4239c693ea8e?source=collection_home---6------10-----------------------" data-action-source="preview-listing" ><time datetime="2021-08-26T11:47:24.123Z">Aug 26, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/exoplayer-2-15-whats-new-4239c693ea8e?source=collection_home---6------10-----------------------" data-action-source="collection_home---6------10-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="19e3" id="19e3" class="graf graf--h3 graf--leading graf--title">Exoplayer 2.15 - What’s new</h3><p name="bd7d" id="bd7d" class="graf graf--p graf-after--h3">ExoPlayer 2.15 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://github.com/google/ExoPlayer/blob/r2.15.0/RELEASENOTES.md">full release notes</a>.</p><h3 name="ed71" id="ed71" class="graf graf--h3 graf-after--p graf--trailing">DASH</h3></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-15-whats-new-4239c693ea8e?source=collection_home---6------10-----------------------" data-action="open-post" data-action-source="collection_home---6------10-----------------------" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-15-whats-new-4239c693ea8e?source=collection_home---6------10-----------------------" data-post-id="4239c693ea8e">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="4239c693ea8e" data-is-flush-left="true" data-source="listing-----4239c693ea8e---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/4239c693ea8e" data-action-source="listing-----4239c693ea8e---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="4239c693ea8e">19</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="4239c693ea8e"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------11-----------------------" data-post-id="b7a8ab04f8d1"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ibaker_97741" data-action="show-user-card" data-action-value="fcc058488992" data-action-type="hover" data-user-id="fcc058488992" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*Q6FL7KQJB4NP5wVC" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ian Baker"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ibaker_97741?source=collection_home---6------11-----------------------" data-action="show-user-card" data-action-source="collection_home---6------11-----------------------" data-action-value="fcc058488992" data-action-type="hover" data-user-id="fcc058488992" dir="auto">Ian Baker</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/standardising-datasource-implementations-through-testing-b7a8ab04f8d1?source=collection_home---6------11-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/standardising-datasource-implementations-through-testing-b7a8ab04f8d1?source=collection_home---6------11-----------------------" data-action-source="preview-listing" ><time datetime="2021-08-04T11:27:33.100Z">Aug 4, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/standardising-datasource-implementations-through-testing-b7a8ab04f8d1?source=collection_home---6------11-----------------------" data-action-source="collection_home---6------11-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="1d2a" id="1d2a" class="graf graf--h3 graf--leading graf--title"><strong class="markup--strong markup--h3-strong">Standardising </strong><code class="markup--code markup--h3-code"><strong class="markup--strong markup--h3-strong">DataSource</strong></code><strong class="markup--strong markup--h3-strong"> implementations through testing</strong></h3><h3 name="8071" id="8071" class="graf graf--h3 graf-after--h3">Background</h3><p name="4703" id="4703" class="graf graf--p graf-after--h3 graf--trailing">ExoPlayer has a modular structure, which allows applications using the library to override or vary many different aspects of its behaviour. This modularity is achieved through the use of…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/standardising-datasource-implementations-through-testing-b7a8ab04f8d1?source=collection_home---6------11-----------------------" data-action="open-post" data-action-source="collection_home---6------11-----------------------" data-action-value="https://medium.com/google-exoplayer/standardising-datasource-implementations-through-testing-b7a8ab04f8d1?source=collection_home---6------11-----------------------" data-post-id="b7a8ab04f8d1">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="b7a8ab04f8d1" data-is-flush-left="true" data-source="listing-----b7a8ab04f8d1---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/b7a8ab04f8d1" data-action-source="listing-----b7a8ab04f8d1---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="b7a8ab04f8d1">7</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="b7a8ab04f8d1"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------12-----------------------" data-post-id="2a9c70068752"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ojw28" data-action="show-user-card" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*v7zdaZiHMzECiiFBwes_zA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Olly Woodman"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ojw28?source=collection_home---6------12-----------------------" data-action="show-user-card" data-action-source="collection_home---6------12-----------------------" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto">Olly Woodman</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/exoplayer-2-14-whats-new-2a9c70068752?source=collection_home---6------12-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-14-whats-new-2a9c70068752?source=collection_home---6------12-----------------------" data-action-source="preview-listing" ><time datetime="2021-05-17T19:51:47.606Z">May 17, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/exoplayer-2-14-whats-new-2a9c70068752?source=collection_home---6------12-----------------------" data-action-source="collection_home---6------12-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="ca8e" id="ca8e" class="graf graf--h3 graf--leading graf--title">ExoPlayer 2.14 - What’s new</h3><p name="5952" id="5952" class="graf graf--p graf-after--h3">ExoPlayer 2.14 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As always, we recommend also taking a look at the <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md">full release notes</a>.</p><h3 name="3b7f" id="3b7f" class="graf graf--h3 graf-after--p graf--trailing">RTSP</h3></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-14-whats-new-2a9c70068752?source=collection_home---6------12-----------------------" data-action="open-post" data-action-source="collection_home---6------12-----------------------" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-14-whats-new-2a9c70068752?source=collection_home---6------12-----------------------" data-post-id="2a9c70068752">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="2a9c70068752" data-is-flush-left="true" data-source="listing-----2a9c70068752---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/2a9c70068752" data-action-source="listing-----2a9c70068752---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="2a9c70068752">136</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-14-whats-new-2a9c70068752?source=collection_home---6------12-----------------------#--responses" data-action-source="collection_home---6------12-----------------------">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="2a9c70068752"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------13-----------------------" data-post-id="ea2d76b01b61"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ojw28" data-action="show-user-card" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*v7zdaZiHMzECiiFBwes_zA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Olly Woodman"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ojw28?source=collection_home---6------13-----------------------" data-action="show-user-card" data-action-source="collection_home---6------13-----------------------" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto">Olly Woodman</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/were-hiring-ea2d76b01b61?source=collection_home---6------13-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/were-hiring-ea2d76b01b61?source=collection_home---6------13-----------------------" data-action-source="preview-listing" ><time datetime="2021-03-18T11:50:22.280Z">Mar 18, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="1 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/were-hiring-ea2d76b01b61?source=collection_home---6------13-----------------------" data-action-source="collection_home---6------13-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="53b0" id="53b0" class="graf graf--h3 graf--leading graf--title">We’re hiring!</h3><p name="a056" id="a056" class="graf graf--p graf-after--h3">Join us and help to improve the developer facing APIs powering media playback, processing and related use cases for hundreds of thousands of Android apps.</p><p name="54d8" id="54d8" class="graf graf--p graf-after--p graf--trailing">Our team in London develop the open-source ExoPlayer library, which powers billions of video playbacks daily on Android…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/were-hiring-ea2d76b01b61?source=collection_home---6------13-----------------------" data-action="open-post" data-action-source="collection_home---6------13-----------------------" data-action-value="https://medium.com/google-exoplayer/were-hiring-ea2d76b01b61?source=collection_home---6------13-----------------------" data-post-id="ea2d76b01b61">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="ea2d76b01b61" data-is-flush-left="true" data-source="listing-----ea2d76b01b61---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/ea2d76b01b61" data-action-source="listing-----ea2d76b01b61---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="ea2d76b01b61">24</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/were-hiring-ea2d76b01b61?source=collection_home---6------13-----------------------#--responses" data-action-source="collection_home---6------13-----------------------">2 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="ea2d76b01b61"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------14-----------------------" data-post-id="bc0d35d96b48"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@kimvde" data-action="show-user-card" data-action-value="31eab97ed6eb" data-action-type="hover" data-user-id="31eab97ed6eb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*TpWX6SQ_hcNg7XRzDp1o0g.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Kim Van Den Eeckhaut"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@kimvde?source=collection_home---6------14-----------------------" data-action="show-user-card" data-action-source="collection_home---6------14-----------------------" data-action-value="31eab97ed6eb" data-action-type="hover" data-user-id="31eab97ed6eb" dir="auto">Kim Van Den Eeckhaut</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/transforming-media-with-exoplayer-bc0d35d96b48?source=collection_home---6------14-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/transforming-media-with-exoplayer-bc0d35d96b48?source=collection_home---6------14-----------------------" data-action-source="preview-listing" ><time datetime="2021-02-10T11:18:43.433Z">Feb 10, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/transforming-media-with-exoplayer-bc0d35d96b48?source=collection_home---6------14-----------------------" data-action-source="collection_home---6------14-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="7181" id="7181" class="graf graf--h3 graf--leading graf--title">Transforming media with ExoPlayer</h3><p name="37a9" id="37a9" class="graf graf--p graf-after--h3">ExoPlayer 2.13 includes a new <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://github.com/google/ExoPlayer/tree/r2.13.0/library/transformer">Transformer</a> library module for converting media streams. This post describes what this module does and how to use it.</p><h3 name="20c1" id="20c1" class="graf graf--h3 graf-after--p graf--trailing">API capabilities</h3></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/transforming-media-with-exoplayer-bc0d35d96b48?source=collection_home---6------14-----------------------" data-action="open-post" data-action-source="collection_home---6------14-----------------------" data-action-value="https://medium.com/google-exoplayer/transforming-media-with-exoplayer-bc0d35d96b48?source=collection_home---6------14-----------------------" data-post-id="bc0d35d96b48">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="bc0d35d96b48" data-is-flush-left="true" data-source="listing-----bc0d35d96b48---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/bc0d35d96b48" data-action-source="listing-----bc0d35d96b48---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="bc0d35d96b48">25</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/transforming-media-with-exoplayer-bc0d35d96b48?source=collection_home---6------14-----------------------#--responses" data-action-source="collection_home---6------14-----------------------">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="bc0d35d96b48"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------15-----------------------" data-post-id="8552d5841060"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@tonihei" data-action="show-user-card" data-action-value="d994f3760649" data-action-type="hover" data-user-id="d994f3760649" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*gM8DKToXqjbVvcpe." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Toni Heidenreich"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@tonihei?source=collection_home---6------15-----------------------" data-action="show-user-card" data-action-source="collection_home---6------15-----------------------" data-action-value="d994f3760649" data-action-type="hover" data-user-id="d994f3760649" dir="auto">Toni Heidenreich</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/low-latency-live-streaming-with-exoplayer-8552d5841060?source=collection_home---6------15-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/low-latency-live-streaming-with-exoplayer-8552d5841060?source=collection_home---6------15-----------------------" data-action-source="preview-listing" ><time datetime="2021-02-09T09:55:04.362Z">Feb 9, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/low-latency-live-streaming-with-exoplayer-8552d5841060?source=collection_home---6------15-----------------------" data-action-source="collection_home---6------15-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*oKxy-iwR5p0NV8IfkN_stg.png" data-width="1400" data-height="517" data-is-featured="true" alt="Diagram showing segments in a live stream with a low-latency playback position in the yet unfinished segment at the live edge" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*oKxy-iwR5p0NV8IfkN_stg.png"></div></figure><h3 name="a123" id="a123" class="graf graf--h3 graf-after--figure graf--title"><strong class="markup--strong markup--h3-strong">Low-latency live streaming with ExoPlayer</strong></h3><p name="305b" id="305b" class="graf graf--p graf-after--h3 graf--trailing">Low-latency live streaming was identified as one of the biggest challenges for video…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/low-latency-live-streaming-with-exoplayer-8552d5841060?source=collection_home---6------15-----------------------" data-action="open-post" data-action-source="collection_home---6------15-----------------------" data-action-value="https://medium.com/google-exoplayer/low-latency-live-streaming-with-exoplayer-8552d5841060?source=collection_home---6------15-----------------------" data-post-id="8552d5841060">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="8552d5841060" data-is-flush-left="true" data-source="listing-----8552d5841060---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/8552d5841060" data-action-source="listing-----8552d5841060---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="8552d5841060">95</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/low-latency-live-streaming-with-exoplayer-8552d5841060?source=collection_home---6------15-----------------------#--responses" data-action-source="collection_home---6------15-----------------------">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="8552d5841060"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------16-----------------------" data-post-id="8dd2b7144ccc"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ibaker_97741" data-action="show-user-card" data-action-value="fcc058488992" data-action-type="hover" data-user-id="fcc058488992" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*Q6FL7KQJB4NP5wVC" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ian Baker"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ibaker_97741?source=collection_home---6------16-----------------------" data-action="show-user-card" data-action-source="collection_home---6------16-----------------------" data-action-value="fcc058488992" data-action-type="hover" data-user-id="fcc058488992" dir="auto">Ian Baker</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/exoplayer-2-13-whats-new-8dd2b7144ccc?source=collection_home---6------16-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-13-whats-new-8dd2b7144ccc?source=collection_home---6------16-----------------------" data-action-source="preview-listing" ><time datetime="2021-02-05T14:59:05.832Z">Feb 5, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/exoplayer-2-13-whats-new-8dd2b7144ccc?source=collection_home---6------16-----------------------" data-action-source="collection_home---6------16-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="7a50" id="7a50" class="graf graf--h3 graf--leading graf--title">ExoPlayer 2.13 - What’s new</h3><p name="d87f" id="d87f" class="graf graf--p graf-after--h3">ExoPlayer 2.13 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As always, we recommend also taking a look at the <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md">full release notes</a>.</p><h3 name="50c9" id="50c9" class="graf graf--h3 graf-after--p graf--trailing">Transformer API</h3></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-13-whats-new-8dd2b7144ccc?source=collection_home---6------16-----------------------" data-action="open-post" data-action-source="collection_home---6------16-----------------------" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-13-whats-new-8dd2b7144ccc?source=collection_home---6------16-----------------------" data-post-id="8dd2b7144ccc">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="8dd2b7144ccc" data-is-flush-left="true" data-source="listing-----8dd2b7144ccc---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/8dd2b7144ccc" data-action-source="listing-----8dd2b7144ccc---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="8dd2b7144ccc">106</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-13-whats-new-8dd2b7144ccc?source=collection_home---6------16-----------------------#--responses" data-action-source="collection_home---6------16-----------------------">6 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="8dd2b7144ccc"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------17-----------------------" data-post-id="d6b7d89b9063"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@jaewan_51359" data-action="show-user-card" data-action-value="7b453302af7a" data-action-type="hover" data-user-id="7b453302af7a" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*HQjlR39KDjNn-2Fw" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Jaewan Kim"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@jaewan_51359?source=collection_home---6------17-----------------------" data-action="show-user-card" data-action-source="collection_home---6------17-----------------------" data-action-value="7b453302af7a" data-action-type="hover" data-user-id="7b453302af7a" dir="auto">Jaewan Kim</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/the-media2-extension-for-exoplayer-d6b7d89b9063?source=collection_home---6------17-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/the-media2-extension-for-exoplayer-d6b7d89b9063?source=collection_home---6------17-----------------------" data-action-source="preview-listing" ><time datetime="2020-09-21T10:06:44.756Z">Sep 21, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/the-media2-extension-for-exoplayer-d6b7d89b9063?source=collection_home---6------17-----------------------" data-action-source="collection_home---6------17-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="f255" id="f255" class="graf graf--h3 graf--leading graf--title">The media2 extension for ExoPlayer</h3><p name="da98" id="da98" class="graf graf--p graf-after--h3 graf--trailing">The <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://developer.android.com/jetpack/androidx/releases/media2">AndroidX media2 session API</a> is the new version of Android’s MediaSession API. By integrating your application’s media player with this API, you can allow playback to be controlled via Bluetooth media control keys, Google Assistant, Android Auto, and other…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/the-media2-extension-for-exoplayer-d6b7d89b9063?source=collection_home---6------17-----------------------" data-action="open-post" data-action-source="collection_home---6------17-----------------------" data-action-value="https://medium.com/google-exoplayer/the-media2-extension-for-exoplayer-d6b7d89b9063?source=collection_home---6------17-----------------------" data-post-id="d6b7d89b9063">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="d6b7d89b9063" data-is-flush-left="true" data-source="listing-----d6b7d89b9063---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/d6b7d89b9063" data-action-source="listing-----d6b7d89b9063---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="d6b7d89b9063">118</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/the-media2-extension-for-exoplayer-d6b7d89b9063?source=collection_home---6------17-----------------------#--responses" data-action-source="collection_home---6------17-----------------------">2 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="d6b7d89b9063"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------18-----------------------" data-post-id="abe0a24edb55"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@bachinger" data-action="show-user-card" data-action-value="27823e454ddd" data-action-type="hover" data-user-id="27823e454ddd" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*Pm5DLIc1dYiCFhD6GqpsQA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Marc Bächinger"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@bachinger?source=collection_home---6------18-----------------------" data-action="show-user-card" data-action-source="collection_home---6------18-----------------------" data-action-value="27823e454ddd" data-action-type="hover" data-user-id="27823e454ddd" dir="auto">Marc Bächinger</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/a-top-level-playlist-api-for-exoplayer-abe0a24edb55?source=collection_home---6------18-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/a-top-level-playlist-api-for-exoplayer-abe0a24edb55?source=collection_home---6------18-----------------------" data-action-source="preview-listing" ><time datetime="2020-09-17T20:34:05.311Z">Sep 17, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/a-top-level-playlist-api-for-exoplayer-abe0a24edb55?source=collection_home---6------18-----------------------" data-action-source="collection_home---6------18-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf--leading graf--title">A top-level playlist API for ExoPlayer</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--subtitle">ExoPlayer 2.12 integrates playlist support into the player’s top-level API.</h4><p name="previewSnippet0" id="previewSnippet0" class="graf graf--p graf-after--h4 graf--trailing">In ExoPlayer 2.0, MediaSource composition made it possible to play sequences of media items using…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/a-top-level-playlist-api-for-exoplayer-abe0a24edb55?source=collection_home---6------18-----------------------" data-action="open-post" data-action-source="collection_home---6------18-----------------------" data-action-value="https://medium.com/google-exoplayer/a-top-level-playlist-api-for-exoplayer-abe0a24edb55?source=collection_home---6------18-----------------------" data-post-id="abe0a24edb55">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="abe0a24edb55" data-is-flush-left="true" data-source="listing-----abe0a24edb55---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/abe0a24edb55" data-action-source="listing-----abe0a24edb55---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="abe0a24edb55">236</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/a-top-level-playlist-api-for-exoplayer-abe0a24edb55?source=collection_home---6------18-----------------------#--responses" data-action-source="collection_home---6------18-----------------------">2 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="abe0a24edb55"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------19-----------------------" data-post-id="7598fee12cf4"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ibaker_97741" data-action="show-user-card" data-action-value="fcc058488992" data-action-type="hover" data-user-id="fcc058488992" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*Q6FL7KQJB4NP5wVC" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ian Baker"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ibaker_97741?source=collection_home---6------19-----------------------" data-action="show-user-card" data-action-source="collection_home---6------19-----------------------" data-action-value="fcc058488992" data-action-type="hover" data-user-id="fcc058488992" dir="auto">Ian Baker</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4?source=collection_home---6------19-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4?source=collection_home---6------19-----------------------" data-action-source="preview-listing" ><time datetime="2020-09-14T16:06:45.900Z">Sep 14, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4?source=collection_home---6------19-----------------------" data-action-source="collection_home---6------19-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*fFkjRc9DgHcYLyrxlYEqWw.png" data-width="2160" data-height="1080" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*fFkjRc9DgHcYLyrxlYEqWw.png"></div></figure><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf-after--figure graf--title">Improved Japanese subtitle support</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle">ExoPlayer 2.12 adds parsing and rendering support for vertical text…</h4></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4?source=collection_home---6------19-----------------------" data-action="open-post" data-action-source="collection_home---6------19-----------------------" data-action-value="https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4?source=collection_home---6------19-----------------------" data-post-id="7598fee12cf4">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="7598fee12cf4" data-is-flush-left="true" data-source="listing-----7598fee12cf4---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/7598fee12cf4" data-action-source="listing-----7598fee12cf4---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="7598fee12cf4">21</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="7598fee12cf4"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------20-----------------------" data-post-id="e43ef8ff72e7"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ojw28" data-action="show-user-card" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*v7zdaZiHMzECiiFBwes_zA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Olly Woodman"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ojw28?source=collection_home---6------20-----------------------" data-action="show-user-card" data-action-source="collection_home---6------20-----------------------" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto">Olly Woodman</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/exoplayer-2-12-whats-new-e43ef8ff72e7?source=collection_home---6------20-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-12-whats-new-e43ef8ff72e7?source=collection_home---6------20-----------------------" data-action-source="preview-listing" ><time datetime="2020-09-13T10:22:23.131Z">Sep 13, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/exoplayer-2-12-whats-new-e43ef8ff72e7?source=collection_home---6------20-----------------------" data-action-source="collection_home---6------20-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="0*NfJJ6aXHa0Oh_DZj" data-width="1600" data-height="900" data-focus-x="50" data-focus-y="50" data-is-featured="true" src="https://cdn-images-1.medium.com/focal/1600/480/50/50/0*NfJJ6aXHa0Oh_DZj"></div></figure><h3 name="c6ec" id="c6ec" class="graf graf--h3 graf-after--figure graf--title">ExoPlayer 2.12 - What’s new</h3><p name="5971" id="5971" class="graf graf--p graf-after--h3 graf--trailing">ExoPlayer 2.12 contains many new features, improvements and bug fixes. This post highlights some of the most…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-12-whats-new-e43ef8ff72e7?source=collection_home---6------20-----------------------" data-action="open-post" data-action-source="collection_home---6------20-----------------------" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-12-whats-new-e43ef8ff72e7?source=collection_home---6------20-----------------------" data-post-id="e43ef8ff72e7">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="e43ef8ff72e7" data-is-flush-left="true" data-source="listing-----e43ef8ff72e7---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/e43ef8ff72e7" data-action-source="listing-----e43ef8ff72e7---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="e43ef8ff72e7">400</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-12-whats-new-e43ef8ff72e7?source=collection_home---6------20-----------------------#--responses" data-action-source="collection_home---6------20-----------------------">4 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="e43ef8ff72e7"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------21-----------------------" data-post-id="3026207850b2"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@christosts" data-action="show-user-card" data-action-value="ca7731d59899" data-action-type="hover" data-user-id="ca7731d59899" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*Od8ylM-hvvqQkrSn" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Christos Tsilopoulos"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@christosts?source=collection_home---6------21-----------------------" data-action="show-user-card" data-action-source="collection_home---6------21-----------------------" data-action-value="ca7731d59899" data-action-type="hover" data-user-id="ca7731d59899" dir="auto">Christos Tsilopoulos</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/improved-rendering-performance-operating-mediacodec-in-asynchronous-mode-and-asynchronous-buffer-3026207850b2?source=collection_home---6------21-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/improved-rendering-performance-operating-mediacodec-in-asynchronous-mode-and-asynchronous-buffer-3026207850b2?source=collection_home---6------21-----------------------" data-action-source="preview-listing" ><time datetime="2020-02-21T18:51:02.616Z">Feb 21, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/improved-rendering-performance-operating-mediacodec-in-asynchronous-mode-and-asynchronous-buffer-3026207850b2?source=collection_home---6------21-----------------------" data-action-source="collection_home---6------21-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*B98pyBHvgTOUSqZdp6D7eQ.png" data-width="360" data-height="720" data-focus-x="50" data-focus-y="49" data-is-featured="true" src="https://cdn-images-1.medium.com/focal/1600/480/50/49/1*B98pyBHvgTOUSqZdp6D7eQ.png"></div></figure><h3 name="3c57" id="3c57" class="graf graf--h3 graf-after--figure graf--title">Improving ExoPlayer rendering performance</h3><p name="767f" id="767f" class="graf graf--p graf-after--h3 graf--trailing">We have recently pushed a new experimental feature to the ExoPlayer dev-v2 branch as…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/improved-rendering-performance-operating-mediacodec-in-asynchronous-mode-and-asynchronous-buffer-3026207850b2?source=collection_home---6------21-----------------------" data-action="open-post" data-action-source="collection_home---6------21-----------------------" data-action-value="https://medium.com/google-exoplayer/improved-rendering-performance-operating-mediacodec-in-asynchronous-mode-and-asynchronous-buffer-3026207850b2?source=collection_home---6------21-----------------------" data-post-id="3026207850b2">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="3026207850b2" data-is-flush-left="true" data-source="listing-----3026207850b2---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/3026207850b2" data-action-source="listing-----3026207850b2---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="3026207850b2">143</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/improved-rendering-performance-operating-mediacodec-in-asynchronous-mode-and-asynchronous-buffer-3026207850b2?source=collection_home---6------21-----------------------#--responses" data-action-source="collection_home---6------21-----------------------">3 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="3026207850b2"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------22-----------------------" data-post-id="e0e0701e4b6c"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ojw28" data-action="show-user-card" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*v7zdaZiHMzECiiFBwes_zA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Olly Woodman"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ojw28?source=collection_home---6------22-----------------------" data-action="show-user-card" data-action-source="collection_home---6------22-----------------------" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto">Olly Woodman</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/exoplayer-2-11-whats-new-e0e0701e4b6c?source=collection_home---6------22-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-11-whats-new-e0e0701e4b6c?source=collection_home---6------22-----------------------" data-action-source="preview-listing" ><time datetime="2019-12-11T16:41:46.637Z">Dec 11, 2019</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/exoplayer-2-11-whats-new-e0e0701e4b6c?source=collection_home---6------22-----------------------" data-action-source="collection_home---6------22-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="f4a1" id="f4a1" class="graf graf--h3 graf--leading graf--title">ExoPlayer 2.11 - What’s new</h3><p name="3900" id="3900" class="graf graf--p graf-after--h3">ExoPlayer 2.11 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As always, we recommend also taking a look at the <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md">full release notes</a>.</p><h3 name="5ee4" id="5ee4" class="graf graf--h3 graf-after--p graf--trailing">Android 10</h3></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-11-whats-new-e0e0701e4b6c?source=collection_home---6------22-----------------------" data-action="open-post" data-action-source="collection_home---6------22-----------------------" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-11-whats-new-e0e0701e4b6c?source=collection_home---6------22-----------------------" data-post-id="e0e0701e4b6c">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="e0e0701e4b6c" data-is-flush-left="true" data-source="listing-----e0e0701e4b6c---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/e0e0701e4b6c" data-action-source="listing-----e0e0701e4b6c---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="e0e0701e4b6c">326</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-11-whats-new-e0e0701e4b6c?source=collection_home---6------22-----------------------#--responses" data-action-source="collection_home---6------22-----------------------">6 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="e0e0701e4b6c"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation u-borderBottomLight" data-source="collection_home---6------23-----------------------" data-post-id="a7cb19bedef9"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@sofija.jvc" data-action="show-user-card" data-action-value="34e28d98371" data-action-type="hover" data-user-id="34e28d98371" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/2*AMuP2oKHJ9pm_dpWpQmxFg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Sofija Jovic"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@sofija.jvc?source=collection_home---6------23-----------------------" data-action="show-user-card" data-action-source="collection_home---6------23-----------------------" data-action-value="34e28d98371" data-action-type="hover" data-user-id="34e28d98371" dir="auto">Sofija Jovic</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9?source=collection_home---6------23-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9?source=collection_home---6------23-----------------------" data-action-source="preview-listing" ><time datetime="2019-10-10T17:59:14.633Z">Oct 10, 2019</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="1 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9?source=collection_home---6------23-----------------------" data-action-source="collection_home---6------23-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="c6ee" id="c6ee" class="graf graf--h3 graf--leading graf--title">Playing AV1 videos with ExoPlayer</h3><p name="993b" id="993b" class="graf graf--p graf-after--h3 graf--trailing"><span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://en.wikipedia.org/wiki/AV1">AV1</a> is a new video codec that aims to provide <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://aomedia.org/news/av1-test-results/">improved compression efficiency</a> compared to VP9 and HEVC. Over the past year, we’ve seen considerable interest in supporting AV1 playback in ExoPlayer. As part of keeping pace with the latest developments in video coding…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9?source=collection_home---6------23-----------------------" data-action="open-post" data-action-source="collection_home---6------23-----------------------" data-action-value="https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9?source=collection_home---6------23-----------------------" data-post-id="a7cb19bedef9">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="a7cb19bedef9" data-is-flush-left="true" data-source="listing-----a7cb19bedef9---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/a7cb19bedef9" data-action-source="listing-----a7cb19bedef9---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="a7cb19bedef9">283</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9?source=collection_home---6------23-----------------------#--responses" data-action-source="collection_home---6------23-----------------------">3 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="a7cb19bedef9"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="postArticle postArticle--short is-withAccentColors"><div class="u-paddingBottom25 u-paddingTop20 js-trackPostPresentation" data-source="collection_home---6------24-----------------------" data-post-id="15d344eaa8b9"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ojw28" data-action="show-user-card" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*v7zdaZiHMzECiiFBwes_zA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Olly Woodman"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ojw28?source=collection_home---6------24-----------------------" data-action="show-user-card" data-action-source="collection_home---6------24-----------------------" data-action-value="7d401664dcde" data-action-type="hover" data-user-id="7d401664dcde" dir="auto">Olly Woodman</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/google-exoplayer/exoplayer-2-10-whats-new-15d344eaa8b9?source=collection_home---6------24-----------------------" data-action="open-post" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-10-whats-new-15d344eaa8b9?source=collection_home---6------24-----------------------" data-action-source="preview-listing" ><time datetime="2019-05-06T20:31:00.257Z">May 6, 2019</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div><a class="" href="https://medium.com/google-exoplayer/exoplayer-2-10-whats-new-15d344eaa8b9?source=collection_home---6------24-----------------------" data-action-source="collection_home---6------24-----------------------"><div class="u-maxWidth600 u-margin0 postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="a8be" id="a8be" class="graf graf--h3 graf--leading graf--title">ExoPlayer 2.10 — What’s new</h3><p name="ee05" id="ee05" class="graf graf--p graf-after--h3 graf--trailing">ExoPlayer 2.10 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. Take a look at the <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md">full release notes</a> for a more comprehensive list, and our <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://exoplayer.dev/">new and improved developer site</a> for more information about using…</p></div></div></section></div></a><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-10-whats-new-15d344eaa8b9?source=collection_home---6------24-----------------------" data-action="open-post" data-action-source="collection_home---6------24-----------------------" data-action-value="https://medium.com/google-exoplayer/exoplayer-2-10-whats-new-15d344eaa8b9?source=collection_home---6------24-----------------------" data-post-id="15d344eaa8b9">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="15d344eaa8b9" data-is-flush-left="true" data-source="listing-----15d344eaa8b9---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/15d344eaa8b9" data-action-source="listing-----15d344eaa8b9---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="15d344eaa8b9">282</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/google-exoplayer/exoplayer-2-10-whats-new-15d344eaa8b9?source=collection_home---6------24-----------------------#--responses" data-action-source="collection_home---6------24-----------------------">3 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="15d344eaa8b9"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="col u-size4of12 u-xs-size12of12 js-aboutCollectionBox u-marginTop30 u-minHeight250 u-xs-hide"></div></div></div></div></div><style class="js-collectionStyle"> .u-accentColor--borderLight {border-color: #1A8917 !important;} .u-accentColor--borderNormal {border-color: #1A8917 !important;} .u-accentColor--borderDark {border-color: #0F730C !important;} .u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #1A8917 !important;} .u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #1A8917 !important;} .u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #0F730C !important;} .u-accentColor--textNormal {color: #0F730C !important;} .u-accentColor--hoverTextNormal:hover {color: #0F730C !important;} .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #0F730C !important;} .u-accentColor--textDark {color: #0F730C !important;} .u-accentColor--backgroundLight {background-color: #1A8917 !important;} .u-accentColor--backgroundNormal {background-color: #1A8917 !important;} .u-accentColor--backgroundDark {background-color: #0F730C !important;} .u-accentColor--buttonDark {border-color: #0F730C !important; color: #0F730C !important;} .u-accentColor--buttonDark:hover {border-color: #0F730C !important;} .u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #0F730C !important; fill: #0F730C !important;} .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #1A8917 !important; color: #0F730C !important;} .u-accentColor--buttonNormal:hover {border-color: #0F730C !important;} .u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #1A8917 !important; fill: #1A8917 !important;} .u-accentColor--buttonNormal.button--filled .icon:before,.u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonDark.button--filled,.u-accentColor--buttonDark.button--withChrome.is-active,.u-accentColor--fillWhenActive.is-active {background-color: #0F730C !important; border-color: #0F730C !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #1A8917 !important; border-color: #1A8917 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .postArticle.is-withAccentColors .markup--user,.postArticle.is-withAccentColors .markup--query {color: #0F730C !important;} .u-accentColor--highlightFaint {background-color: rgba(232, 243, 232, 1) !important;} .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(163, 208, 162, 1) !important;} .postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(232, 243, 232, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(232, 243, 232, 1), rgba(232, 243, 232, 1));} .postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(209, 231, 209, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(209, 231, 209, 1), rgba(209, 231, 209, 1));} .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(163, 208, 162, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(163, 208, 162, 1), rgba(163, 208, 162, 1));} .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(163, 208, 162, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(163, 208, 162, 1), rgba(163, 208, 162, 1));} .postArticle.is-withAccentColors .markup--highlight {background-color: rgba(163, 208, 162, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(163, 208, 162, 1), rgba(163, 208, 162, 1));}</style><style class="js-collectionStyleConstant">.u-imageBgColor {background-color: rgba(0, 0, 0, 0.24705882352941178);} .u-imageSpectrum .u-baseColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconLight .svgIcon,.u-imageSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--iconNormal .svgIcon,.u-imageSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconDark .svgIcon,.u-imageSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDarker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important; color: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--buttonLight .icon:before,.u-imageSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark .icon:before,.u-imageSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal .icon:before,.u-imageSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonDark.button--filled,.u-imageSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--buttonNormal.button--filled,.u-imageSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--link {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .ui-h1,.u-imageSpectrum .ui-h2,.u-imageSpectrum .ui-h3,.u-imageSpectrum .ui-h4,.u-imageSpectrum .ui-brand1,.u-imageSpectrum .ui-brand2,.u-imageSpectrum .ui-captionStrong {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-body,.u-imageSpectrum .ui-caps {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-summary,.u-imageSpectrum .ui-caption {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconLight .svgIcon,.u-imageSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--iconNormal .svgIcon,.u-imageSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconDark .svgIcon,.u-imageSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark .icon:before,.u-imageSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonDark.button--filled,.u-imageSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-imageSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-imageSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .postArticle.is-withAccentColors .markup--user,.u-imageSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--highlightFaint {background-color: rgba(255, 255, 255, 0.2) !important;} .u-imageSpectrum .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 255, 255, 0.6) !important;} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: rgba(255, 255, 255, 0.2) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: rgba(255, 255, 255, 0.4) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}.u-resetSpectrum .u-tintBgColor {background-color: rgba(255, 255, 255, 1) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%) !important;} .u-resetSpectrum .u-baseColor--borderLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderDark {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--iconLight .svgIcon,.u-resetSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconNormal .svgIcon,.u-resetSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconDark .svgIcon,.u-resetSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textNormal {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDarker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--backgroundLight {background-color: rgba(0, 0, 0, 0.09803921568627451) !important;} .u-resetSpectrum .u-baseColor--backgroundNormal {background-color: rgba(0, 0, 0, 0.2) !important;} .u-resetSpectrum .u-baseColor--backgroundDark {background-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight .icon:before,.u-resetSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark {border-color: rgba(0, 0, 0, 0.6) !important; color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--buttonDark .icon:before,.u-resetSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important; color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal .icon:before,.u-resetSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(0, 0, 0, 0.4980392156862745) !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark.button--filled,.u-resetSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2980392156862745) !important; border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--buttonNormal.button--filled,.u-resetSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2) !important; border-color: rgba(0, 0, 0, 0.2) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--link {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--darken:active {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--link.link--darker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .ui-h1,.u-resetSpectrum .ui-h2,.u-resetSpectrum .ui-h3,.u-resetSpectrum .ui-h4,.u-resetSpectrum .ui-brand1,.u-resetSpectrum .ui-brand2,.u-resetSpectrum .ui-captionStrong {color: rgba(0, 0, 0, 0.8) !important; fill: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .ui-body,.u-resetSpectrum .ui-caps {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .ui-summary,.u-resetSpectrum .ui-caption {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-accentColor--borderLight {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderNormal {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderDark {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconLight .svgIcon,.u-resetSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--iconNormal .svgIcon,.u-resetSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconDark .svgIcon,.u-resetSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textDark {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundLight {background-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundNormal {background-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundDark {background-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark {border-color: rgba(17, 128, 14, 1) !important; color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark .icon:before,.u-resetSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(15, 115, 12, 1) !important; fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(26, 137, 23, 1) !important; color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(17, 128, 14, 1) !important; fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark.button--filled,.u-resetSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-resetSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(15, 115, 12, 1) !important; border-color: rgba(15, 115, 12, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-resetSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(17, 128, 14, 1) !important; border-color: rgba(17, 128, 14, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .postArticle.is-withAccentColors .markup--user,.u-resetSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(17, 128, 14, 1) !important;}</style><div class="js-collectionFooter u-hide"><div class="container u-maxWidth1040"><div class="u-marginTop10 u-paddingTop10 u-paddingBottom30 u-borderTopLighter"><div class="linkSet u-clearfix"><div class="u-floatRight u-textColorNormal u-baseColor--textNormal u-xs-floatLeft"><a class="button button--chromeless u-baseColor--buttonNormal u-marginLeft15 u-lineHeight35 u-xs-block u-xs-marginLeft0" href="https://medium.com/google-exoplayer/about" title="About AndroidX Media3" aria-label="About AndroidX Media3">About AndroidX Media3</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/google-exoplayer/latest" title="Latest Stories for AndroidX Media3" aria-label="Latest Stories for AndroidX Media3">Latest Stories</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/google-exoplayer/archive" title="Archive for AndroidX Media3" aria-label="Archive for AndroidX Media3">Archive</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/about">About Medium</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f">Terms</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9">Privacy</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/business">Teams</a></div></div></div></div></div></div></div></div><div class="loadingBar"></div><script>// <![CDATA[ window["obvInit"] = function (opt_embedded) {window["obvInit"]["embedded"] = opt_embedded; window["obvInit"]["ready"] = true;} // ]]></script><script>// <![CDATA[ var GLOBALS = {"audioUrl":"https://d1fcbxp97j4nb2.cloudfront.net","baseUrl":"https://medium.com","buildLabel":"20241126-1740-root","currentUser":{"userId":"lo_322ec2a2b1f8","isVerified":false,"subscriberEmail":"","hasPastMemberships":false,"isEnrolledInHightower":false,"isEligibleForHightower":true,"hightowerLastLockedAt":0,"isWriterProgramEnrolled":true,"isWriterProgramInvited":false,"isWriterProgramOptedOut":false,"writerProgramVersion":0,"writerProgramEnrolledAt":0,"friendLinkOnboarding":0,"hasAdditionalUnlocks":false,"hasApiAccess":false,"writerProgramDistributionSettingOptedIn":false,"isSuspended":false,"collectionOnboardingSeen":0,"atsQualifiedAt":0},"currentUserHasUnverifiedEmail":false,"isAuthenticated":false,"isCurrentUserVerified":false,"miroUrl":"https://cdn-images-1.medium.com","moduleUrls":{"base":"https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.95z8xpkUEidhPbIWsh2BVw.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.zqOu8dxaQRtqDyChHdOWlQ.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.y0UkxCxPBUbLlduk5XbwLQ.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.eZhPgaD8AglnbC5Rzxqvhg.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.XeRjm4FlHTBOsUvoOQ6Ppg.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.r9MSvtAmj0CMkyIC0CCCbA.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.AiXyuYj3AvxRA1-7HEyP9Q.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.fsLyLvZO4VZXL_zb4RXgeg.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.6Dyc-nVN2MDV_AM9XDAZug.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.rUyrVjlTpUj61voxnZosQw.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.2I2tXSo7-rbez_WYXfga0Q.12.js"},"previewConfig":{"weightThreshold":1,"weightImageParagraph":0.51,"weightIframeParagraph":0.8,"weightTextParagraph":0.08,"weightEmptyParagraph":0,"weightP":0.003,"weightH":0.005,"weightBq":0.003,"minPTextLength":60,"truncateBoundaryChars":20,"detectTitle":true,"detectTitleLevThreshold":0.15},"productName":"Medium","supportsEdit":false,"termsUrl":"//policy.medium.com/medium-terms-of-service-9db0094a1e0f","textshotHost":"textshot.textshot-production.svc.cluster.local","transactionId":"1732695697224:e592240cec87","useragent":{"browser":"ie","family":"ie","os":"windows","version":7,"supportsDesktopEdit":false,"supportsInteract":false,"supportsView":true,"isMobile":false,"isTablet":false,"isNative":false,"supportsFileAPI":false,"isTier1":false,"clientVersion":"","clientChannel":"","supportsRealScrollEvents":false,"supportsVhUnits":false,"ruinsViewportSections":false,"supportsHtml5Video":false,"supportsMagicUnderlines":false,"isWebView":false,"isFacebookWebView":false,"supportsProgressiveMedia":false,"supportsPromotedPosts":true,"isBot":false,"isNativeIphone":false,"supportsCssVariables":false,"supportsVideoSections":true,"emojiSupportLevel":1,"isSearchBot":false,"isSyndicationBot":false,"isNativeAndroid":false,"isNativeIos":false,"isSeoAuditBot":false,"isInternalApp":false,"supportsApplePay":false,"supportsScrollableMetabar":false},"variants":{"allow_access":true,"allow_signup":true,"allow_test_auth":"disallow","android_enable_editor_new_publishing_flow":true,"android_enable_friend_links_creation":true,"android_enable_friend_links_postpage_banners":true,"android_enable_image_sharer":true,"android_enable_lists_v2":true,"android_enable_syntax_highlight":true,"android_enable_topic_portals":true,"android_rating_prompt_stories_read_threshold":2,"android_two_hour_refresh":true,"available_annual_plan":"2c754bcc2995","available_annual_premium_plan":"4a442ace1476","available_monthly_plan":"60e220181034","available_monthly_premium_plan":"12a660186432","browsable_stream_config_bucket":"curated-topics","can_receive_tips_v0":true,"can_send_tips_v0":true,"coronavirus_topic_recirc":true,"disable_partner_program_enrollment":true,"enable_abandoned_cart_promotion_email":true,"enable_android_dynamic_aspirational_paywall":true,"enable_android_dynamic_programming_paywall":true,"enable_android_miro_v2":true,"enable_android_offline_reading":true,"enable_android_verified_author":true,"enable_app_flirty_thirty":true,"enable_apple_sign_in":true,"enable_apple_webhook":true,"enable_aurora_pub_follower_page":true,"enable_author_cards":true,"enable_author_cards_byline":true,"enable_auto_follow_on_subscribe":true,"enable_automod":true,"enable_bayesian_average_pub_search":true,"enable_bg_post_post":true,"enable_billing_frequency_on_step2":"control","enable_boost_nia_v01":true,"enable_braintree_apple_pay":true,"enable_braintree_client":true,"enable_braintree_google_pay":true,"enable_braintree_integration":true,"enable_braintree_paypal":true,"enable_braintree_trial_membership":true,"enable_braintree_webhook":true,"enable_branch_io":true,"enable_cache_less_following_feed":true,"enable_configure_pronouns":true,"enable_conversion_model_v2":"group_2","enable_conversion_ranker_v2":"control","enable_creator_welcome_email":true,"enable_deprecate_legacy_providers_v3":true,"enable_diversification_rex":true,"enable_entities_to_follow_v2":true,"enable_eventstats_event_processing":true,"enable_explicit_signals":true,"enable_explicit_signals_updated_post_previews":true,"enable_footer_app_buttons":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_group_gifting":true,"enable_iceland_forced_android":true,"enable_import":true,"enable_intrinsic_automatic_actions":true,"enable_ios_autorefresh":true,"enable_ios_dynamic_paywall_aspiriational":true,"enable_ios_dynamic_paywall_programming":true,"enable_ios_easy_resubscribe":true,"enable_ios_offline_reading":true,"enable_legacy_feed_in_iceland":true,"enable_lite_archive_page":true,"enable_lite_continue_this_thread":true,"enable_lite_homepage":true,"enable_lite_response_markup":true,"enable_lite_server_upstream_deadlines":true,"enable_lo_homepage":"control","enable_maim_the_meter":true,"enable_marketing_emails":true,"enable_mastodon_avatar_upload":true,"enable_mastodon_for_members":true,"enable_mastodon_for_members_username_selection":true,"enable_medium2_kbfd":true,"enable_members_only_audio":true,"enable_ml_rank_rex_anno":true,"enable_moc_load_processor_all_recs_surfaces":true,"enable_moc_load_processor_c":true,"enable_moc_load_processor_first_story":true,"enable_new_manage_membership_flow":true,"enable_new_stripe_customers":true,"enable_newsletter_lo_flow_custom_domains":true,"enable_pill_based_home_feed":true,"enable_post_bottom_responses":true,"enable_post_bottom_responses_input":true,"enable_pp_country_expansion":true,"enable_pp_v4":true,"enable_pre_pp_v4":true,"enable_premium_tier":true,"enable_premium_tier_badge":true,"enable_publication_hierarchy_web":true,"enable_ranker_v10":"control","enable_recaptcha_enterprise":true,"enable_recirc_model":true,"enable_recommended_publishers_query":true,"enable_rex_aggregator_v2":true,"enable_rex_new_push_notification_endpoint":true,"enable_rex_reading_history":true,"enable_rito_upstream_deadlines":true,"enable_seamless_social_sharing":true,"enable_see_pronouns":true,"enable_sharer_create_post_share_key":true,"enable_sharer_validate_post_share_key":true,"enable_simplified_digest_v2_b":true,"enable_speechify_ios":true,"enable_speechify_widget":true,"enable_sprig":true,"enable_starspace":true,"enable_susi_redesign_android":true,"enable_susi_redesign_ios":true,"enable_switch_plan_premium_tier":true,"enable_tag_recs":true,"enable_tick_landing_page":true,"enable_tipping_v0_android":true,"enable_tipping_v0_ios":true,"enable_tribute_landing_page":true,"enable_update_explore_wtf":true,"enable_update_topic_portals_wtf":true,"enable_updated_pub_recs_ui":true,"enable_verifications_service":true,"glyph_font_set":"m2-unbound-source-serif-pro","goliath_externalsearch_enable_comment_deindexation":true,"ios_display_paywall_after_onboarding":true,"ios_enable_friend_links_creation":true,"ios_enable_friend_links_postpage_banners":true,"ios_enable_home_post_menu":true,"ios_enable_lock_responses":true,"ios_enable_verified_book_author":true,"ios_iceland_nux":true,"ios_in_app_free_trial":true,"ios_remove_twitter_onboarding_step":true,"ios_social_share_sheet":true,"limit_post_referrers":true,"limit_user_follows":true,"mobile_custom_app_icon":true,"num_post_bottom_responses_to_show":"3","onboarding_tags_from_top_views":true,"reader_fair_distribution_non_qp":true,"redefined_top_posts":true,"reengagement_notification_duration":3,"rex_generator_max_candidates":1000,"signin_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","signup_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","skip_fs_cache_user_vals":true},"xsrfToken":"","iosAppId":"828256236","supportEmail":"yourfriends@medium.com","fp":{"/icons/monogram-mask.svg":"https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg","/icons/favicon-medium-editor.ico":"https://cdn-static-1.medium.com/_/fp/icons/favicon-medium-editor.PiakrZWB7Yb80quUVQWM6g.12.ico"},"authBaseUrl":"https://medium.com","imageUploadSizeMb":25,"isAuthDomainRequest":true,"algoliaApiEndpoint":"https://MQ57UUUQZ2-dsn.algolia.net","algoliaAppId":"MQ57UUUQZ2","algoliaSearchOnlyApiKey":"394474ced050e3911ae2249ecc774921","iosAppStoreUrl":"https://itunes.apple.com/app/medium-everyones-stories/id828256236?pt=698524&mt=8","iosAppLinkBaseUrl":"medium:","algoliaIndexPrefix":"medium_","androidPlayStoreUrl":"https://play.google.com/store/apps/details?id=com.medium.reader","googleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","androidPackage":"com.medium.reader","androidPlayStoreMarketScheme":"market://details?id=com.medium.reader","googleAuthUri":"https://accounts.google.com/o/oauth2/auth","androidScheme":"medium","layoutData":{"useDynamicScripts":false,"googleAnalyticsTrackingCode":"G-7JY7T788PK","jsShivUrl":"https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js","useDynamicCss":false,"faviconUrl":"https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","faviconImageId":"5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","fontSets":[{"id":8,"url":"https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2-unbound-source-serif-pro.css"},{"id":11,"url":"https://glyph.medium.com/css/m2-unbound-source-serif-pro.css"},{"id":9,"url":"https://glyph.medium.com/css/mkt.css"}],"glyphUrl":"https://glyph.medium.com"},"authBaseUrlRev":"moc.muidem//:sptth","stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","archiveUploadSizeMb":100,"previewConfig2":{"weightThreshold":1,"weightImageParagraph":0.05,"raiseImage":true,"enforceHeaderHierarchy":true,"isImageInsetRight":true},"isAmp":false,"iosScheme":"medium","facebook":{"key":"542599432471018","namespace":"medium-com","scope":{"default":["public_profile","email"],"connect":["public_profile","email"],"login":["public_profile","email"],"share":["public_profile","email"]}},"memberContentTopicId":"13d7efd82fb2","audioContentTopicId":"3792abbd134","isDoNotAuth":false,"buggle":{"videoUrl":"https://cdn-videos-1.medium.com","audioUrl":"https://cdn-audio-1.medium.com"},"referrerType":5,"partnerProgramEmail":"partnerprogram@medium.com","recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","countryCode":"SG","bypassMeter":false,"branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","paypal":{"clientMode":"production","oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com/redeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"}},"collectionConfig":{"mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"]},"bypassMeterWithShareKey":false,"recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","cdcMessaging":[{"text":"For more information on the novel coronavirus and Covid-19, visit ","href":"","type":"text","start":0,"end":0},{"text":"cdc.gov","href":"https://www.cdc.gov/coronavirus/2019-nCoV","type":"link","start":66,"end":73},{"text":".","href":"","type":"text","start":0,"end":0}],"braintree":{"merchantId":"m56f8fqpf7ngnrd4"},"diagnostics":{},"domain":"medium.com"} // ]]></script><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.95z8xpkUEidhPbIWsh2BVw.12.js" async></script><script>// <![CDATA[ window["obvInit"]({"references":{"Collection":{"8be3f5be7065":{"id":"8be3f5be7065","name":"AndroidX Media3","slug":"google-exoplayer","tags":[],"creatorId":"d994f3760649","description":"The Media3 developer blog","shortDescription":"The Media3 developer blog","image":{"imageId":"1*T6Iewm9z1-b78nwfzQDnBg.png","filter":"","backgroundSize":"","originalWidth":60,"originalHeight":60,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":4168,"activeAt":1721926761620},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"collectionMastheadId":"f8d403048c5b","sections":[{"type":2,"collectionHeaderMetadata":{"title":"google-exoplayer","backgroundImage":{},"logoImage":{},"alignment":2,"layout":4}},{"type":1,"postListMetadata":{"source":1,"layout":6,"number":25,"postIds":[]}}],"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF1A8917","point":0},{"color":"#FF11800E","point":0.1},{"color":"#FF0F730C","point":0.2},{"color":"#FF095407","point":1}],"backgroundColor":"#FFFFFFFF"},"highlightSpectrum":{"colorPoints":[{"color":"#FFFFFFFF","point":0},{"color":"#FFE8F3E8","point":0.1},{"color":"#FFE8F3E8","point":0.2},{"color":"#FFD1E7D1","point":0.6},{"color":"#FFA3D0A2","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF095407","point":0},{"color":"#FF0F730C","point":0.1},{"color":"#FF11800E","point":0.2},{"color":"#FF1A8917","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":5,"title":"Archive","url":"https://medium.com/google-exoplayer/archive"}],"colorBehavior":1,"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"google-exoplayer","backgroundImage":{},"logoImage":{},"alignment":2,"layout":4},"subscriberCount":4168,"tagline":"The ExoPlayer developer blog","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092962196,"type":"Collection"}},"User":{"d994f3760649":{"userId":"d994f3760649","name":"Toni Heidenreich","username":"tonihei","createdAt":1500538489427,"imageId":"0*gM8DKToXqjbVvcpe.","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":true,"userDismissableFlags":[32,46,12,8,21,19,2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"25af5ba1a589":{"userId":"25af5ba1a589","name":"Andrew Lewis","username":"abl26","createdAt":1465896060853,"imageId":"0*VdJk7jzAC54XX34r.","backgroundImageId":"","bio":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[12,2,29],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"c775d3478a42":{"userId":"c775d3478a42","name":"Kristina Simakova","username":"kristisimakova","createdAt":1473507429362,"imageId":"1*Df3x9vx_Bd9vyBoFpK8vTg.jpeg","backgroundImageId":"","bio":"","twitterScreenName":"KristiSimakova","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"subdomainCreatedAt":1605014405431,"hasCompletedProfile":false,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[32,29,9,8,5,2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"fcc058488992":{"userId":"fcc058488992","name":"Ian Baker","username":"ibaker_97741","createdAt":1570703984462,"imageId":"0*Q6FL7KQJB4NP5wVC","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,12,2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"27823e454ddd":{"userId":"27823e454ddd","name":"Marc Bächinger","username":"bachinger","createdAt":1469020214028,"imageId":"1*Pm5DLIc1dYiCFhD6GqpsQA.jpeg","backgroundImageId":"","bio":"Software engineer.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,12,2,18],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"de-ch","type":"User"},"7d401664dcde":{"userId":"7d401664dcde","name":"Olly Woodman","username":"ojw28","createdAt":1464194183490,"imageId":"1*v7zdaZiHMzECiiFBwes_zA.png","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,12,2,18],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"7f5a2cb6598e":{"userId":"7f5a2cb6598e","name":"Don Turner","username":"donturner","createdAt":1438092804404,"imageId":"1*F2tQfS9RL-Br9vcm_ih_NQ.png","backgroundImageId":"","bio":"Android Developer Relations Engineer @ Google","twitterScreenName":"donturner","allowNotes":1,"mediumMemberAt":1703442993000,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[48,12,8,50,2,33,49],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"ca7731d59899":{"userId":"ca7731d59899","name":"Christos Tsilopoulos","username":"christosts","createdAt":1582213520891,"imageId":"0*Od8ylM-hvvqQkrSn","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[12,2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"31eab97ed6eb":{"userId":"31eab97ed6eb","name":"Kim Van Den Eeckhaut","username":"kimvde","createdAt":1582281400125,"imageId":"1*TpWX6SQ_hcNg7XRzDp1o0g.jpeg","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"7b453302af7a":{"userId":"7b453302af7a","name":"Jaewan Kim","username":"jaewan_51359","createdAt":1592331313145,"imageId":"0*HQjlR39KDjNn-2Fw","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[12],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"34e28d98371":{"userId":"34e28d98371","name":"Sofija Jovic","username":"sofija.jvc","createdAt":1558523576022,"imageId":"2*AMuP2oKHJ9pm_dpWpQmxFg.jpeg","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[12,2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"}},"Post":{"ba1c9c17ee1a":{"id":"ba1c9c17ee1a","versionId":"e6dcdcc5e523","creatorId":"d994f3760649","homeCollectionId":"8be3f5be7065","title":"Media3 1.4.0 — what’s new?","detectedLanguage":"en","latestVersion":"e6dcdcc5e523","latestPublishedVersion":"e6dcdcc5e523","hasUnpublishedEdits":false,"latestRev":190,"createdAt":1721924203837,"updatedAt":1732061877797,"acceptedAt":0,"firstPublishedAt":1721926761543,"latestPublishedAt":1721926761543,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Media3 1.4.0 is released with new preload utilities, better HDR support in Transformer and images in PlayerView","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*x77zyHk-CD5RvQXY.png","filter":"","backgroundSize":"","originalWidth":1400,"originalHeight":417,"strategy":"resample","height":0,"width":0},"wordCount":658,"imageCount":3,"readingTime":3.033018867924528,"subtitle":"Media3 1.4.0 is released with new preload utilities, better HDR support in Transformer and images in PlayerView","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":12,"isBookmarked":false,"tags":[{"slug":"media3","name":"Media3","postCount":29,"metadata":{"postCount":29,"coverImage":{"id":"1*AsLObd8ldBBiW8GdhRrfkw.png","originalWidth":550,"originalHeight":279,"isFeatured":true,"alt":"Diagram showing a device running ExoPlayer making an HTTP GET request for ‘/segment1.m4s’ to a CDN Edge server and including a CMCD-Object HTTP request header with value ‘br=3200,d=4004,ot=v,tb=6000’."}},"type":"Tag"},{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"mediasession","name":"Mediasession","postCount":11,"metadata":{"postCount":11,"coverImage":{"id":"1*B56RI_TcH2JVEBpaQ-d8_g.png","originalWidth":362,"originalHeight":413,"isFeatured":true}},"type":"Tag"},{"slug":"editing","name":"Editing","postCount":12081,"metadata":{"postCount":12081,"coverImage":{"id":"1*SRCWc72HKn7WI7RHvmz-uw.gif","originalWidth":874,"originalHeight":210,"isFeatured":true}},"type":"Tag"},{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://github.com/androidx/media/issues","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/blob/1.4.0/RELEASENOTES.md","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1721926762640},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":65,"sectionCount":3,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"media3-1-4-0-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"media3-1-4-0-whats-new-ba1c9c17ee1a","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*x77zyHk-CD5RvQXY.png","originalWidth":1400,"originalHeight":417,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Media3 1.4.0 — what’s new?","alignment":1},{"name":"previewSubtitle","type":13,"text":"Media3 1.4.0 is released with new preload utilities, better HDR support in…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Media3 1.4.0 is released with new preload utilities, better HDR support in Transformer and images in PlayerView"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"55cb163c93b9","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"593b","type":3,"text":"Media3 1.4.0 — what’s new?","markups":[{"type":1,"start":0,"end":26}]},{"name":"b9bb","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"0*x77zyHk-CD5RvQXY.png","originalWidth":1400,"originalHeight":417,"isFeatured":true}},{"name":"d691","type":1,"text":"Media3 1.4.0 is now released! \nThis release brings several exciting enhancements, including new preload utilities for playback with ExoPlayer, improved HDR support in Transformer, a revamped subtitle pipeline, out-of-the-box image support in PlayerView, and more flexible error handling in MediaSession.","markups":[{"type":10,"start":132,"end":141},{"type":10,"start":167,"end":178},{"type":10,"start":242,"end":252},{"type":10,"start":290,"end":302},{"type":1,"start":0,"end":29}]},{"name":"3c86","type":1,"text":"We’ve also been busy fixing bugs and making various improvements…","markups":[{"type":3,"start":141,"end":154,"href":"https://github.com/androidx/media/blob/1.4.0/RELEASENOTES.md","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"4013","startIndex":0}]},"isFullContent":false,"subtitle":"Media3 1.4.0 is released with new preload utilities, better HDR support in Transformer and images in PlayerView"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"d6957f4b077d":{"id":"d6957f4b077d","versionId":"5deb25f421d3","creatorId":"25af5ba1a589","homeCollectionId":"8be3f5be7065","title":"Media3 1.3.0 — What’s new?","detectedLanguage":"en","latestVersion":"5deb25f421d3","latestPublishedVersion":"5deb25f421d3","hasUnpublishedEdits":false,"latestRev":131,"createdAt":1711554963876,"updatedAt":1711685967290,"acceptedAt":0,"firstPublishedAt":1711633737660,"latestPublishedAt":1711633737660,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Media3 1.3.0 is now available!","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":504,"imageCount":0,"readingTime":1.9018867924528302,"subtitle":"Media3 1.3.0 is now available!","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":9,"isBookmarked":false,"tags":[{"slug":"media3","name":"Media3","postCount":29,"metadata":{"postCount":29,"coverImage":{"id":"1*AsLObd8ldBBiW8GdhRrfkw.png","originalWidth":550,"originalHeight":279,"isFeatured":true,"alt":"Diagram showing a device running ExoPlayer making an HTTP GET request for ‘/segment1.m4s’ to a CDN Edge server and including a CMCD-Object HTTP request header with value ‘br=3200,d=4004,ot=v,tb=6000’."}},"type":"Tag"},{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"media3-transformer","name":"Media3 Transformer","postCount":1,"metadata":{"postCount":1,"coverImage":{"id":"1*E1mHxlSOJUImw4SDV7tTTQ.jpeg","originalWidth":1800,"originalHeight":600,"isFeatured":true,"alt":"an illustration of a film strip"}},"type":"Tag"},{"slug":"android-media","name":"Android Media","postCount":32,"metadata":{"postCount":32,"coverImage":{"id":"1*AsLObd8ldBBiW8GdhRrfkw.png","originalWidth":550,"originalHeight":279,"isFeatured":true,"alt":"Diagram showing a device running ExoPlayer making an HTTP GET request for ‘/segment1.m4s’ to a CDN Edge server and including a CMCD-Object HTTP request header with value ‘br=3200,d=4004,ot=v,tb=6000’."}},"type":"Tag"},{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://android-developers.googleblog.com/2023/10/androidx-minsdkversion-19.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/media/media3/exoplayer/migration-guide","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/issues","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/trim-transcode-concatenate-your-guide-to-media3-editing-libraries-668b4e4c2f97","alts":[{"type":3,"url":"medium://p/668b4e4c2f97"},{"type":2,"url":"medium://p/668b4e4c2f97"}],"httpStatus":200},{"url":"https://github.com/androidx/media/blob/1.3.0/RELEASENOTES.md","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/image/ImageOutput","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/media3/common/TrackSelectionParameters.Builder#setPrioritizeImageOverVideoEnabled(boolean)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/media3/transformer/Transformer.Builder#experimentalSetTrimOptimizationEnabled(boolean)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/ExoPlayer#setImageOutput(androidx.media3.exoplayer.image.ImageOutput)","alts":[],"httpStatus":200},{"url":"https://dashif-documents.azurewebsites.net/DASH-IF-IOP/pull/341/DASH-IF-IOP.html#codecs-thumbnails","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1711633739726},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":14,"sectionCount":3,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"media3-1-3-0-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"media3-1-3-0-whats-new-d6957f4b077d","previewContent":{"bodyModel":{"paragraphs":[{"name":"4d22","type":3,"text":"Media3 1.3.0 — What’s new?","markups":[],"alignment":1},{"name":"23d4","type":1,"text":"Media3 1.3.0 is now available! Feature highlights include support for image output in ExoPlayer, including handling for DASH thumbnails, some initial low-level APIs for preloading to reduce latency when switching between media items, transmuxing optimizations in Transformer, and…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Media3 1.3.0 is now available!"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"4d22","type":3,"text":"Media3 1.3.0 — What’s new?","markups":[]},{"name":"23d4","type":1,"text":"Media3 1.3.0 is now available! Feature highlights include support for image output in ExoPlayer, including handling for DASH thumbnails, some initial low-level APIs for preloading to reduce latency when switching between media items, transmuxing optimizations in Transformer, and many smaller bug fixes and improvements.","markups":[]},{"name":"b3d5","type":1,"text":"As a reminder, the exoplayer2 package…","markups":[{"type":10,"start":351,"end":358},{"type":3,"start":228,"end":240,"href":"https://developer.android.com/media/media3/exoplayer/migration-guide","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"acde","startIndex":0}]},"isFullContent":false,"subtitle":"Media3 1.3.0 is now available!"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"668b4e4c2f97":{"id":"668b4e4c2f97","versionId":"109f08e57830","creatorId":"c775d3478a42","homeCollectionId":"8be3f5be7065","title":"Trim, Transcode, Concatenate: Your Guide to Media3 Editing Libraries","detectedLanguage":"en","latestVersion":"109f08e57830","latestPublishedVersion":"109f08e57830","hasUnpublishedEdits":false,"latestRev":569,"createdAt":1706818387746,"updatedAt":1709785191687,"acceptedAt":0,"firstPublishedAt":1709743305304,"latestPublishedAt":1709743305304,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Media3 includes libraries for a variety of media use cases. In this blog post we’ll focus on APIs we’ve recently published for video…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*E1mHxlSOJUImw4SDV7tTTQ.jpeg","filter":"","backgroundSize":"","originalWidth":1800,"originalHeight":600,"strategy":"resample","height":0,"width":0},"wordCount":1037,"imageCount":6,"readingTime":4.863207547169811,"subtitle":"Media3 includes libraries for a variety of media use cases. In this blog post we’ll focus on APIs we’ve recently published for video…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":22,"isBookmarked":false,"tags":[{"slug":"media3","name":"Media3","postCount":29,"metadata":{"postCount":29,"coverImage":{"id":"1*AsLObd8ldBBiW8GdhRrfkw.png","originalWidth":550,"originalHeight":279,"isFeatured":true,"alt":"Diagram showing a device running ExoPlayer making an HTTP GET request for ‘/segment1.m4s’ to a CDN Edge server and including a CMCD-Object HTTP request header with value ‘br=3200,d=4004,ot=v,tb=6000’."}},"type":"Tag"},{"slug":"media3-transformer","name":"Media3 Transformer","postCount":1,"metadata":{"postCount":1,"coverImage":{"id":"1*E1mHxlSOJUImw4SDV7tTTQ.jpeg","originalWidth":1800,"originalHeight":600,"isFeatured":true,"alt":"an illustration of a film strip"}},"type":"Tag"},{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"jetpack-media3","name":"Jetpack Media3","postCount":7,"metadata":{"postCount":7,"coverImage":{"id":"1*Vc1wLLwk3d0X8p1TxFu5pg.jpeg","originalWidth":2048,"originalHeight":2048,"isFeatured":true}},"type":"Tag"},{"slug":"video-editing","name":"Video Editing","postCount":9543,"metadata":{"postCount":9543,"coverImage":{"id":"0*dUmZuc8TLQlfY6bw","originalWidth":3456,"originalHeight":4608,"isFeatured":true,"unsplashPhotoId":"s7Mc0yKTppo"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://android-developers.googleblog.com/2023/05/media-transcoding-and-editing-transform-and-roll-out.html","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/tree/release/demos/transformer","alts":[],"httpStatus":200},{"url":"https://developer.android.com/media/implement/editing-app","alts":[],"httpStatus":200},{"url":"https://peach.blender.org/","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/tree/main","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/media3#1.2.0","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/issues","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media3/transformer/Composition.Builder","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media3/transformer/EditedMediaItemSequence","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1709743306501},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":70,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"trim-transcode-concatenate-your-guide-to-media3-editing-libraries","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"trim-transcode-concatenate-your-guide-to-media3-editing-libraries-668b4e4c2f97","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*E1mHxlSOJUImw4SDV7tTTQ.jpeg","originalWidth":1800,"originalHeight":600,"isFeatured":true,"alt":"an illustration of a film strip"}},{"name":"79ae","type":3,"text":"Trim, Transcode, Concatenate: Your Guide to Media3 Editing Libraries","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Media3 includes libraries for a variety of media use cases. In this blog post we’ll focus on APIs we’ve recently published for video…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"cbd5c49898f7","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"79ae","type":3,"text":"Trim, Transcode, Concatenate: Your Guide to Media3 Editing Libraries","markups":[]},{"name":"b1ec","type":1,"text":"Media3 includes libraries for a variety of media use cases. In this blog post we’ll focus on APIs we’ve recently published for video creation, including: converting media from one format to another, applying effects, and producing compositions out of multiple input audio/video streams. We’ll start by revisiting some of the…","markups":[{"type":3,"start":349,"end":379,"href":"https://android-developers.googleblog.com/2023/05/media-transcoding-and-editing-transform-and-roll-out.html","title":"","rel":"","anchorType":0}],"hasDropCap":true}],"sections":[{"name":"3592","startIndex":0}]},"isFullContent":false,"subtitle":"Media3 includes libraries for a variety of media use cases. In this blog post we’ll focus on APIs we’ve recently published for video…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"82c6d2490f8d":{"id":"82c6d2490f8d","versionId":"f99d9b768f83","creatorId":"fcc058488992","homeCollectionId":"8be3f5be7065","title":"Media3 1.2.0 — What’s new?","detectedLanguage":"en","latestVersion":"f99d9b768f83","latestPublishedVersion":"f99d9b768f83","hasUnpublishedEdits":false,"latestRev":441,"createdAt":1699982244869,"updatedAt":1700630956669,"acceptedAt":0,"firstPublishedAt":1700585278818,"latestPublishedAt":1700585278818,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Media3 1.2.0 is now out! This post highlights some of the most significant changes to our Editing libraries, the media3-session module…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*AsLObd8ldBBiW8GdhRrfkw.png","filter":"","backgroundSize":"","originalWidth":550,"originalHeight":279,"strategy":"resample","height":0,"width":0},"wordCount":882,"imageCount":1,"readingTime":3.528301886792453,"subtitle":"Media3 1.2.0 is now out! This post highlights some of the most significant changes to our Editing libraries, the media3-session module…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":15,"isBookmarked":false,"tags":[{"slug":"android-media","name":"Android Media","postCount":32,"metadata":{"postCount":32,"coverImage":{"id":"1*AsLObd8ldBBiW8GdhRrfkw.png","originalWidth":550,"originalHeight":279,"isFeatured":true,"alt":"Diagram showing a device running ExoPlayer making an HTTP GET request for ‘/segment1.m4s’ to a CDN Edge server and including a CMCD-Object HTTP request header with value ‘br=3200,d=4004,ot=v,tb=6000’."}},"type":"Tag"},{"slug":"media3","name":"Media3","postCount":29,"metadata":{"postCount":29,"coverImage":{"id":"1*AsLObd8ldBBiW8GdhRrfkw.png","originalWidth":550,"originalHeight":279,"isFeatured":true,"alt":"Diagram showing a device running ExoPlayer making an HTTP GET request for ‘/segment1.m4s’ to a CDN Edge server and including a CMCD-Object HTTP request header with value ‘br=3200,d=4004,ot=v,tb=6000’."}},"type":"Tag"},{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://medium.com/google-exoplayer/transforming-media-with-exoplayer-bc0d35d96b48","alts":[{"type":3,"url":"medium://p/bc0d35d96b48"},{"type":2,"url":"medium://p/bc0d35d96b48"}],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/media3-is-ready-to-play-27d9dba9f5ed","alts":[{"type":3,"url":"medium://p/27d9dba9f5ed"},{"type":2,"url":"medium://p/27d9dba9f5ed"}],"httpStatus":200},{"url":"https://github.com/search?q=repo%3Aandroidx%2Fmedia+testplayerrunhelper.&type=code","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/testing/espresso","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/tree/release/libraries/muxer","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/tree/release/libraries/decoder_midi","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/tree/release/libraries/effect","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/tree/release/demos/transformer","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/transformer/getting-started","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/session/mediasessionservice#auto-authorization","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/blob/release/RELEASENOTES.md#12","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/session/mediasession#modify-playlist","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/wearables/apps/audio#speakers","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/exoplayer/cmcd","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/issues","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/session/mediasessionservice#resumption","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters.Builder#setAudioOffloadPreferences(androidx.media3.common.TrackSelectionParameters.AudioOffloadPreferences)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/exoplayer/playlists#modifying-playlist","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media3/test/utils/robolectric/TestPlayerRunHelper","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/wearables/apps/audio#exoplayer","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media3/transformer/Composition","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/compose/testing","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/session/mediasessionservice#media-notification-controller","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media3/test/utils/TestExoPlayerBuilder","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1700585280906},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":43,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"media3-1-2-0-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"media3-1-2-0-whats-new-82c6d2490f8d","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*AsLObd8ldBBiW8GdhRrfkw.png","originalWidth":550,"originalHeight":279,"isFeatured":true,"alt":"Diagram showing a device running ExoPlayer making an HTTP GET request for ‘/segment1.m4s’ to a CDN Edge server and including a CMCD-Object HTTP request header with value ‘br=3200,d=4004,ot=v,tb=6000’."}},{"name":"previewTitle","type":3,"text":"Media3 1.2.0 — What’s new?","alignment":1},{"name":"previewSubtitle","type":13,"text":"Media3 1.2.0 is now out! This post highlights some of the most significant…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Media3 1.2.0 is now out! This post highlights some of the most significant changes to our Editing libraries, the media3-session module…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"b9c3ddcbc687","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"b444","type":3,"text":"Media3 1.2.0 — What’s new?","markups":[]},{"name":"9a1e","type":1,"text":"Media3 1.2.0 is now available! This post highlights some of the most significant changes to our Editing libraries, the media3-session module, and ExoPlayer. As always, we recommend also taking a look at the full release notes.","markups":[{"type":10,"start":119,"end":133},{"type":3,"start":207,"end":225,"href":"https://github.com/androidx/media/blob/release/RELEASENOTES.md#12","title":"","rel":"","anchorType":0}]},{"name":"61ec","type":1,"text":"This is the first androidx.media3 release without a corresponding com.google.android.exoplayer2 release — the exoplayer2…","markups":[{"type":10,"start":18,"end":33},{"type":10,"start":66,"end":95},{"type":10,"start":110,"end":120},{"type":10,"start":240,"end":250},{"type":3,"start":148,"end":205,"href":"https://medium.com/google-exoplayer/media3-is-ready-to-play-27d9dba9f5ed","title":"","rel":"","anchorType":0},{"type":3,"start":315,"end":331,"href":"https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"3067","startIndex":0}]},"isFullContent":false,"subtitle":"Media3 1.2.0 is now out! This post highlights some of the most significant changes to our Editing libraries, the media3-session module…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"27d9dba9f5ed":{"id":"27d9dba9f5ed","versionId":"9f9a3321aa79","creatorId":"d994f3760649","homeCollectionId":"8be3f5be7065","title":"Media3 is ready to play!","detectedLanguage":"en","latestVersion":"9f9a3321aa79","latestPublishedVersion":"9f9a3321aa79","hasUnpublishedEdits":false,"latestRev":264,"createdAt":1679650784454,"updatedAt":1679717751929,"acceptedAt":0,"firstPublishedAt":1679653504407,"latestPublishedAt":1679653504407,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"The full 1.0 release of the Jetpack Media3 library is here.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*F95XHSwQ6AQUacGm.png","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":476,"strategy":"resample","height":0,"width":0},"wordCount":1454,"imageCount":1,"readingTime":5.686792452830189,"subtitle":"The full 1.0 release of the Jetpack Media3 library is here.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":19,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"media3","name":"Media3","postCount":29,"metadata":{"postCount":29,"coverImage":{"id":"1*AsLObd8ldBBiW8GdhRrfkw.png","originalWidth":550,"originalHeight":279,"isFeatured":true,"alt":"Diagram showing a device running ExoPlayer making an HTTP GET request for ‘/segment1.m4s’ to a CDN Edge server and including a CMCD-Object HTTP request header with value ‘br=3200,d=4004,ot=v,tb=6000’."}},"type":"Tag"},{"slug":"androidx","name":"Androidx","postCount":267,"metadata":{"postCount":267,"coverImage":{"id":"1*CROblt7xj6Qey6lf46LKUw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"jetpack","name":"Jetpack","postCount":1444,"metadata":{"postCount":1444,"coverImage":{"id":"1*ykPIAcpLN3vaghlbIH2Trw.jpeg","originalWidth":1100,"originalHeight":617}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://android-developers.googleblog.com/2023/03/media3-is-ready-to-play.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/media2","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/tree/main/demos/session","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/media3#1.0.0","alts":[],"httpStatus":200},{"url":"https://github.com/googlesamples/android-media-controller","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/components/foreground-services","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3/getting-started/playing-in-background","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide?db=nevmital#MediaBrowserService","alts":[],"httpStatus":200},{"url":"https://github.com/android/uamp","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=sTIBDcyCmCg","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=sTIBDcyCmCg&feature=applinks"},{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=sTIBDcyCmCg&feature=applinks"}],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/android/support/v4/media/package-summary","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide#MediaBrowserService","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/issues/111#issuecomment-1406466363","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide#MediaSessionConnector","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/issues","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide#MediaBrowser","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide#exoplayer","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide#usingscript","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1679653506608},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":80,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"media3-is-ready-to-play","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"media3-is-ready-to-play-27d9dba9f5ed","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*F95XHSwQ6AQUacGm.png","originalWidth":1600,"originalHeight":476,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Media3 is ready to play!","alignment":1},{"name":"previewSubtitle","type":13,"text":"The full 1.0 release of the Jetpack Media3 library is here.","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"The full 1.0 release of the Jetpack Media3 library is here."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"https://android-developers.googleblog.com/2023/03/media3-is-ready-to-play.html","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"Media3 is ready to play!","previewContent2":{"bodyModel":{"paragraphs":[{"name":"9de6","type":3,"text":"Media3 is ready to play!","markups":[]},{"name":"9e47","type":1,"text":"Originally published by Nevin Mital on the Android Developer Blog.","markups":[{"type":3,"start":43,"end":65,"href":"https://android-developers.googleblog.com/2023/03/media3-is-ready-to-play.html","title":"","rel":"","anchorType":0},{"type":2,"start":0,"end":66}]},{"name":"a223","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"0*F95XHSwQ6AQUacGm.png","originalWidth":1600,"originalHeight":476,"isFeatured":true}},{"name":"3cfd","type":1,"text":"Today, we’re pleased to announce the full 1.0 release of the Jetpack Media3 library. After sharing a first look at the library at Android Developer Summit 2021, we published several alpha and beta releases over the past several months to…","markups":[{"type":3,"start":42,"end":53,"href":"https://developer.android.com/jetpack/androidx/releases/media3#1.0.0","title":"","rel":"","anchorType":0},{"type":3,"start":61,"end":75,"href":"https://github.com/androidx/media","title":"","rel":"","anchorType":0},{"type":3,"start":130,"end":159,"href":"https://www.youtube.com/watch?v=sTIBDcyCmCg","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"cee3","startIndex":0}]},"isFullContent":false,"subtitle":"The full 1.0 release of the Jetpack Media3 library is here."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"2367a712f112":{"id":"2367a712f112","versionId":"b5cbd2f36aeb","creatorId":"27823e454ddd","homeCollectionId":"8be3f5be7065","title":"Jetpack Media3 1.0.0-beta01 — What’s new","detectedLanguage":"en","latestVersion":"b5cbd2f36aeb","latestPublishedVersion":"b5cbd2f36aeb","hasUnpublishedEdits":false,"latestRev":239,"createdAt":1656332650321,"updatedAt":1656454582998,"acceptedAt":0,"firstPublishedAt":1656452281933,"latestPublishedAt":1656454574875,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":1189,"imageCount":0,"readingTime":4.486792452830189,"subtitle":"","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":21,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://developer.android.com/reference/android/media/Spatializer#isAvailable()","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/Spatializer#canBeSpatialized(android.media.AudioAttributes,%20android.media.AudioFormat)","alts":[],"httpStatus":200},{"url":"https://support.google.com/accounts/answer/6078260","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/versions","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/Spatializer#nested-classeshttps://developer.android.com/reference/android/media/Spatializer","alts":[],"httpStatus":200},{"url":"https://developer.android.com/about/versions/13/behavior-changes-13#playback-controls","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media/media3","alts":[],"httpStatus":200},{"url":"https://developer.android.com/about/versions/12/behavior-changes-12#foreground-service-launch-restrictions","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/Spatializer.OnSpatializerStateChangedListener","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/media3#1.0.0-beta01","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/issues","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/were-hiring-cf9ef8e62be1","alts":[{"type":3,"url":"medium://p/cf9ef8e62be1"},{"type":2,"url":"medium://p/cf9ef8e62be1"}],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/Spatializer#isEnabled()","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/resources/providing-resources#UiModeQualifier","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/tree/release/demos/session","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1656454575689},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":43,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"jetpack-media3-1-0-0-beta01-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"jetpack-media3-1-0-0-beta01-whats-new-2367a712f112","previewContent":{"bodyModel":{"paragraphs":[{"name":"2a8d","type":3,"text":"Jetpack Media3 1.0.0-beta01 — What’s new?","markups":[{"type":1,"start":0,"end":41}],"alignment":1},{"name":"f6e8","type":1,"text":"Jetpack Media3 1.0.0-beta01 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes. Please note that the Jetpack Media3 1.0.0-beta01 release corresponds to the ExoPlayer…","markups":[{"type":3,"start":149,"end":167,"href":"https://developer.android.com/jetpack/androidx/releases/media3#1.0.0-beta01","title":"","rel":"noopener","anchorType":0},{"type":3,"start":245,"end":254,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","title":"","rel":"noopener","anchorType":0}],"hasDropCap":true,"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":""},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"2a8d","type":3,"text":"Jetpack Media3 1.0.0-beta01 — What’s new?","markups":[{"type":1,"start":0,"end":41}]},{"name":"f6e8","type":1,"text":"Jetpack Media3 1.0.0-beta01 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes. Please note that the Jetpack Media3 1.0.0-beta01 release corresponds to the ExoPlayer 2.18.0 release.","markups":[{"type":3,"start":149,"end":167,"href":"https://developer.android.com/jetpack/androidx/releases/media3#1.0.0-beta01","title":"","rel":"noopener","anchorType":0},{"type":3,"start":245,"end":261,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","title":"","rel":"noopener","anchorType":0}],"hasDropCap":true},{"name":"bbf6","type":3,"text":"Jetpack library versioning and API stability","markups":[]},{"name":"3fa2","type":1,"text":"Aligned with other Jetpack libraries, Media3 follows a…","markups":[{"type":3,"start":53,"end":81,"href":"https://developer.android.com/jetpack/androidx/versions","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"d952","startIndex":0}]},"isFullContent":false,"subtitle":""},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"ec83d30db17a":{"id":"ec83d30db17a","versionId":"5b245908118c","creatorId":"fcc058488992","homeCollectionId":"8be3f5be7065","title":"ExoPlayer 2.17 — What’s new","detectedLanguage":"en","latestVersion":"5b245908118c","latestPublishedVersion":"5b245908118c","hasUnpublishedEdits":false,"latestRev":49,"createdAt":1647363607770,"updatedAt":1659658028618,"acceptedAt":0,"firstPublishedAt":1647364979936,"latestPublishedAt":1647364979936,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.17 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":483,"imageCount":0,"readingTime":1.8226415094339623,"subtitle":"ExoPlayer 2.17 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":13,"isBookmarked":false,"tags":[],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://medium.com/google-exoplayer/were-hiring-cf9ef8e62be1","alts":[{"type":3,"url":"medium://p/cf9ef8e62be1"},{"type":2,"url":"medium://p/cf9ef8e62be1"}],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/ima/ImaServerSideAdInsertionMediaSource.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/ad-insertion.html#using-a-third-party-ads-sdk-1","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/ad-insertion.html#ima-extension-1","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/source/ads/ServerSideAdInsertionMediaSource.html","alts":[],"httpStatus":200},{"url":"https://support.google.com/admanager/answer/6147120","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/releases/tag/r2.17.0","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md#2170-2022-02-24","alts":[],"httpStatus":200},{"url":"https://github.com/androidx/media/releases/tag/1.0.0-alpha02","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1647364980451},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":24,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"exoplayer-2-17-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"exoplayer-2-17-whats-new-ec83d30db17a","previewContent":{"bodyModel":{"paragraphs":[{"name":"3229","type":3,"text":"ExoPlayer 2.17 — What’s new","markups":[],"alignment":1},{"name":"381d","type":1,"text":"ExoPlayer 2.17 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":136,"end":154,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md#2170-2022-02-24","title":"","rel":"","anchorType":0}],"alignment":1},{"name":"9a1b","type":3,"text":"Server Side Ad Insertion","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.17 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"3229","type":3,"text":"ExoPlayer 2.17 — What’s new","markups":[]},{"name":"381d","type":1,"text":"ExoPlayer 2.17 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":136,"end":154,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md#2170-2022-02-24","title":"","rel":"","anchorType":0}]},{"name":"9a1b","type":3,"text":"Server Side Ad Insertion","markups":[]},{"name":"0556","type":1,"text":"ExoPlayer 2.17.0 includes support for server-side ad insertion, in which ads (and associated metadata) are inserted into a content stream on the server…","markups":[]}],"sections":[{"name":"bc3d","startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.17 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"cf9ef8e62be1":{"id":"cf9ef8e62be1","versionId":"323e2942aa7b","creatorId":"7d401664dcde","homeCollectionId":"8be3f5be7065","title":"We’re hiring!","detectedLanguage":"en","latestVersion":"323e2942aa7b","latestPublishedVersion":"323e2942aa7b","hasUnpublishedEdits":true,"latestRev":141,"createdAt":1638918792933,"updatedAt":1641270156712,"acceptedAt":0,"firstPublishedAt":1638921045040,"latestPublishedAt":1638921151209,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Are you looking for a new challenge? We’re growing the Android Media team in London, and are looking for enthusiastic engineers to work…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":263,"imageCount":0,"readingTime":0.9924528301886792,"subtitle":"Are you looking for a new challenge? We’re growing the Android Media team in London, and are looking for enthusiastic engineers to work…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":20,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"london","name":"London","postCount":31114,"metadata":{"postCount":31114,"coverImage":{"id":"0*lLOcDuA-XK4-wQBT","originalWidth":1280,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"open-source","name":"Open Source","postCount":51165,"metadata":{"postCount":51165,"coverImage":{"id":"1*U4dT88z1buEiUtw_Y8UViQ.png","originalWidth":2240,"originalHeight":1260,"isFeatured":true}},"type":"Tag"},{"slug":"google","name":"Google","postCount":112796,"metadata":{"postCount":112796,"coverImage":{"id":"0*uH3-v-mL9SA-dTgj","originalWidth":958,"originalHeight":639,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":3,"links":{"entries":[{"url":"https://github.com/google/ExoPlayer","alts":[],"httpStatus":200},{"url":"https://www.linkedin.com/in/ojw28/","alts":[],"httpStatus":999}],"version":"0.3","generatedAt":1638921151485},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":34,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"were-hiring","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"were-hiring-cf9ef8e62be1","previewContent":{"bodyModel":{"paragraphs":[{"name":"d1b4","type":3,"text":"We’re hiring!","markups":[],"alignment":1},{"name":"f4b2","type":1,"text":"Are you looking for a new challenge? We’re growing the Android Media team in London, and are looking for enthusiastic engineers to work across a number of projects.","markups":[],"alignment":1},{"name":"cf4a","type":1,"text":"Our framework sub-team is responsible for some of the key media components within the Android OS. These include…","markups":[{"type":1,"start":4,"end":22}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Are you looking for a new challenge? We’re growing the Android Media team in London, and are looking for enthusiastic engineers to work…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"41f596841dec","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"d1b4","type":3,"text":"We’re hiring!","markups":[]},{"name":"f4b2","type":1,"text":"Are you looking for a new challenge? We’re growing the Android Media team in London, and are looking for enthusiastic engineers to work across a number of projects.","markups":[]},{"name":"cf4a","type":1,"text":"Our framework sub-team is responsible for some of the key media components within the Android OS. These include MediaSession (through which an…","markups":[{"type":10,"start":112,"end":124},{"type":10,"start":249,"end":260},{"type":1,"start":4,"end":22},{"type":1,"start":443,"end":452},{"type":1,"start":459,"end":481}]}],"sections":[{"name":"467d","startIndex":0}]},"isFullContent":false,"subtitle":"Are you looking for a new challenge? We’re growing the Android Media team in London, and are looking for enthusiastic engineers to work…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"785afe47ef95":{"id":"785afe47ef95","versionId":"b1bd3126e0a2","creatorId":"d994f3760649","homeCollectionId":"8be3f5be7065","title":"ExoPlayer 2.16 — What’s new","detectedLanguage":"en","latestVersion":"b1bd3126e0a2","latestPublishedVersion":"b1bd3126e0a2","hasUnpublishedEdits":false,"latestRev":133,"createdAt":1636625170142,"updatedAt":1641293291239,"acceptedAt":0,"firstPublishedAt":1637318707152,"latestPublishedAt":1637318707152,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.16 is out and this post highlights some of the most significant changes. As always, we recommend also taking a look at the…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":413,"imageCount":0,"readingTime":1.558490566037736,"subtitle":"ExoPlayer 2.16 is out and this post highlights some of the most significant changes. As always, we recommend also taking a look at the…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":23,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android-media","name":"Android Media","postCount":32,"metadata":{"postCount":32,"coverImage":{"id":"1*AsLObd8ldBBiW8GdhRrfkw.png","originalWidth":550,"originalHeight":279,"isFeatured":true,"alt":"Diagram showing a device running ExoPlayer making an HTTP GET request for ‘/segment1.m4s’ to a CDN Edge server and including a CMCD-Object HTTP request header with value ‘br=3200,d=4004,ot=v,tb=6000’."}},"type":"Tag"},{"slug":"androidx","name":"Androidx","postCount":267,"metadata":{"postCount":267,"coverImage":{"id":"1*CROblt7xj6Qey6lf46LKUw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"android-12","name":"Android 12","postCount":311,"metadata":{"postCount":311,"coverImage":{"id":"0*VIMW1QvaWGyLVvXI","originalWidth":6429,"originalHeight":4286,"isFeatured":true,"unsplashPhotoId":"1psdELDctR4"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://android-developers.googleblog.com/2021/10/jetpack-media3.html","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/were-hiring-ea2d76b01b61","alts":[{"type":3,"url":"medium://p/ea2d76b01b61"},{"type":2,"url":"medium://p/ea2d76b01b61"}],"httpStatus":200},{"url":"https://github.com/androidx/media","alts":[],"httpStatus":200},{"url":"https://youtu.be/sTIBDcyCmCg","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=sTIBDcyCmCg&feature=youtu.be&feature=applinks"},{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=sTIBDcyCmCg&feature=youtu.be&feature=applinks"}],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues/","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.16.1/RELEASENOTES.md","alts":[],"httpStatus":200},{"url":"https://developer.android.com/about/versions/12/foreground-services","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1637318708263},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":42,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"exoplayer-2-16-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"exoplayer-2-16-whats-new-785afe47ef95","previewContent":{"bodyModel":{"paragraphs":[{"name":"c294","type":3,"text":"ExoPlayer 2.16 — What’s new","markups":[{"type":1,"start":0,"end":27}],"alignment":1},{"name":"5720","type":1,"text":"ExoPlayer 2.16 is out and this post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":140,"end":153,"href":"https://github.com/google/ExoPlayer/blob/r2.16.1/RELEASENOTES.md","title":"","rel":"","anchorType":0}],"alignment":1},{"name":"fe33","type":3,"text":"Android 12 compatibility","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.16 is out and this post highlights some of the most significant changes. As always, we recommend also taking a look at the…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"e4d07bc82547","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"c294","type":3,"text":"ExoPlayer 2.16 — What’s new","markups":[{"type":1,"start":0,"end":27}]},{"name":"5720","type":1,"text":"ExoPlayer 2.16 is out and this post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":140,"end":153,"href":"https://github.com/google/ExoPlayer/blob/r2.16.1/RELEASENOTES.md","title":"","rel":"","anchorType":0}]},{"name":"fe33","type":3,"text":"Android 12 compatibility","markups":[]},{"name":"ff7b","type":1,"text":"ExoPlayer 2.16 contains a variety of changes to ensure your app can target Android 12. Two changes are particularly important:","markups":[]},{"name":"3dde","type":9,"text":"The new foreground…","markups":[{"type":10,"start":86,"end":101},{"type":10,"start":182,"end":197},{"type":3,"start":8,"end":46,"href":"https://developer.android.com/about/versions/12/foreground-services","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"8964","startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.16 is out and this post highlights some of the most significant changes. As always, we recommend also taking a look at the…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"a7b7e8d167fe":{"id":"a7b7e8d167fe","versionId":"47e34e4a314a","creatorId":"7f5a2cb6598e","homeCollectionId":"8be3f5be7065","title":"Introducing the Android Media Developer Survey","detectedLanguage":"en","latestVersion":"47e34e4a314a","latestPublishedVersion":"47e34e4a314a","hasUnpublishedEdits":false,"latestRev":38,"createdAt":1633543288669,"updatedAt":1641351397759,"acceptedAt":0,"firstPublishedAt":1633555200244,"latestPublishedAt":1633555200244,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Here in the Android media team, we’re working to make it easier to make great media apps on Android. We’re really interested to hear your…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*bU0EcOBK_yPnjUoUT7_Uxw.jpeg","filter":"","backgroundSize":"","originalWidth":6000,"originalHeight":4000,"strategy":"resample","height":0,"width":0},"wordCount":103,"imageCount":1,"readingTime":0.588679245283019,"subtitle":"Here in the Android media team, we’re working to make it easier to make great media apps on Android. We’re really interested to hear your…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":9,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android-media-api","name":"Android Media Api","postCount":19,"metadata":{"postCount":19,"coverImage":{"id":"1*2_mUAwAihjBYMszQCCL0Mw.png","originalWidth":5760,"originalHeight":3240}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48171,"metadata":{"postCount":48171,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://goo.gle/media-survey-7","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1633555200782},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":11,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"introducing-the-android-media-developer-survey","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"introducing-the-android-media-developer-survey-a7b7e8d167fe","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*bU0EcOBK_yPnjUoUT7_Uxw.jpeg","originalWidth":6000,"originalHeight":4000,"isFeatured":true}},{"name":"caba","type":3,"text":"Introducing the Android Media Developer Survey","markups":[],"alignment":1},{"name":"8341","type":1,"text":"Here in the Android media team, we’re working to make it easier to make great…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Here in the Android media team, we’re working to make it easier to make great media apps on Android. We’re really interested to hear your…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"43e5","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*bU0EcOBK_yPnjUoUT7_Uxw.jpeg","originalWidth":6000,"originalHeight":4000,"isFeatured":true}},{"name":"caba","type":3,"text":"Introducing the Android Media Developer Survey","markups":[]},{"name":"8341","type":1,"text":"Here in the Android media team, we’re working to make it easier to make great media apps on Android. We’re really interested to hear your experiences with ExoPlayer, other Android media APIs and developer resources.","markups":[]},{"name":"33f2","type":1,"text":"We’ve created a survey specifically for media developers to provide feedback, so we can improve…","markups":[]}],"sections":[{"name":"73d0","startIndex":0}]},"isFullContent":false,"subtitle":"Here in the Android media team, we’re working to make it easier to make great media apps on Android. We’re really interested to hear your…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":true,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"4239c693ea8e":{"id":"4239c693ea8e","versionId":"f3885e31babf","creatorId":"ca7731d59899","homeCollectionId":"8be3f5be7065","title":"Exoplayer 2.15 - What’s new","detectedLanguage":"en","latestVersion":"f3885e31babf","latestPublishedVersion":"f3885e31babf","hasUnpublishedEdits":false,"latestRev":405,"createdAt":1629199667111,"updatedAt":1641409355595,"acceptedAt":0,"firstPublishedAt":1629978444123,"latestPublishedAt":1629978444123,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.15 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":318,"imageCount":0,"readingTime":1.2,"subtitle":"ExoPlayer 2.15 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":16,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48171,"metadata":{"postCount":48171,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://www.etsi.org/deliver/etsi_ts/103200_103299/103285/01.02.01_60/ts_103285v010201p.pdf#page=67","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/were-hiring-ea2d76b01b61","alts":[{"type":3,"url":"medium://p/ea2d76b01b61"},{"type":2,"url":"medium://p/ea2d76b01b61"}],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/PlaybackException.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/upstream/DefaultLoadErrorHandlingPolicy.html#getFallbackSelectionFor(com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.FallbackOptions,com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.LoadErrorInfo)","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.15.0/RELEASENOTES.md","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1629978444736},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":19,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"exoplayer-2-15-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"exoplayer-2-15-whats-new-4239c693ea8e","previewContent":{"bodyModel":{"paragraphs":[{"name":"19e3","type":3,"text":"Exoplayer 2.15 - What’s new","markups":[],"alignment":1},{"name":"bd7d","type":1,"text":"ExoPlayer 2.15 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":136,"end":154,"href":"https://github.com/google/ExoPlayer/blob/r2.15.0/RELEASENOTES.md","title":"","rel":"","anchorType":0}],"alignment":1},{"name":"ed71","type":3,"text":"DASH","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.15 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"19e3","type":3,"text":"Exoplayer 2.15 - What’s new","markups":[]},{"name":"bd7d","type":1,"text":"ExoPlayer 2.15 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":136,"end":154,"href":"https://github.com/google/ExoPlayer/blob/r2.15.0/RELEASENOTES.md","title":"","rel":"","anchorType":0}]},{"name":"ed71","type":3,"text":"DASH","markups":[]},{"name":"b18b","type":1,"text":"We’ve added support for multiple BaseURL elements in DASH manifests. An initial base URL is selected according to the declared serviceLocation, priority and…","markups":[{"type":10,"start":127,"end":142},{"type":10,"start":144,"end":152},{"type":10,"start":157,"end":163},{"type":3,"start":144,"end":163,"href":"https://www.etsi.org/deliver/etsi_ts/103200_103299/103285/01.02.01_60/ts_103285v010201p.pdf#page=67","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"1282","startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.15 is now out! This post highlights some of the most significant changes. As always, we recommend also taking a look at the…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"b7a8ab04f8d1":{"id":"b7a8ab04f8d1","versionId":"a1e7a9131732","creatorId":"fcc058488992","homeCollectionId":"8be3f5be7065","title":"Standardising DataSource implementations through testing","detectedLanguage":"en","latestVersion":"a1e7a9131732","latestPublishedVersion":"a1e7a9131732","hasUnpublishedEdits":false,"latestRev":136,"createdAt":1627637673909,"updatedAt":1641432984933,"acceptedAt":0,"firstPublishedAt":1628076453100,"latestPublishedAt":1628076453100,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":929,"imageCount":0,"readingTime":3.5056603773584905,"subtitle":"","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":6,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"testing","name":"Testing","postCount":42730,"metadata":{"postCount":42730,"coverImage":{"id":"1*JZHO5lsnXJ3BvUdHHbN8xA.png","originalWidth":8418,"originalHeight":2506,"isFeatured":true}},"type":"Tag"},{"slug":"medium","name":"Media","postCount":23,"metadata":{"postCount":23,"coverImage":{"id":"0*UngT-CflNQ4Xvy1C","originalWidth":5184,"originalHeight":3888,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"http://robolectric.org/","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/testutil/HttpDataSourceTestEnv.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/upstream/DataSource.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/glossary.html#exoplayer","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/testutil/FakeDataSource.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/testutil/DataSourceContractTest.html","alts":[],"httpStatus":200},{"url":"https://github.com/square/okhttp/tree/master/mockwebserver","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.14.2/library/common/src/test/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSourceContractTest.java","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.14.2/library/core/src/test/java/com/google/android/exoplayer2/upstream/ByteArrayDataSourceContractTest.java","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.14.2/library/core/src/androidTest/java/com/google/android/exoplayer2/upstream/RawResourceDataSourceContractTest.java","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.14.2/library/core/src/test/java/com/google/android/exoplayer2/upstream/UdpDataSourceContractTest.java","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.14.2/library/core/src/test/java/com/google/android/exoplayer2/upstream/CacheDataSourceContractTest.java","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.14.2/library/core/src/test/java/com/google/android/exoplayer2/upstream/cache/CacheDataSourceTest.java","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.14.2/library/core/src/test/java/com/google/android/exoplayer2/upstream/FileDataSourceContractTest.java","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/commit/3b08a792bbe1409c93eee40f56204766de79db4b","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/commit/1a68f3d3a481e9a668a3c0222d997f27cc220b55","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/commit/1affbf9357c061149b3cb287972ea0157d1b6735","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/commit/10de7b2ab0d1974bf19ad2e590e9546eaf1bb145","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1628076454011},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":7,"sectionCount":2,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"standardising-datasource-implementations-through-testing","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"standardising-datasource-implementations-through-testing-b7a8ab04f8d1","previewContent":{"bodyModel":{"paragraphs":[{"name":"1d2a","type":3,"text":"Standardising DataSource implementations through testing","markups":[{"type":10,"start":14,"end":24},{"type":1,"start":0,"end":56}],"alignment":1},{"name":"8071","type":3,"text":"Background","markups":[],"alignment":1},{"name":"4703","type":1,"text":"ExoPlayer has a modular structure, which allows applications using the library to override or vary many different aspects of its behaviour. This modularity is achieved through the use of…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":""},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"1d2a","type":3,"text":"Standardising DataSource implementations through testing","markups":[{"type":10,"start":14,"end":24},{"type":1,"start":0,"end":56}]},{"name":"8071","type":3,"text":"Background","markups":[]},{"name":"4703","type":1,"text":"ExoPlayer has a modular structure, which allows applications using the library to override or vary many different aspects of its behaviour. This modularity is achieved through the use of interfaces that represent distinct parts of the media loading and playback pipeline. Examples include DataSource, MediaSource, TrackSelector, Extractor and Renderer. For…","markups":[{"type":10,"start":289,"end":299},{"type":10,"start":301,"end":312},{"type":10,"start":314,"end":327},{"type":10,"start":329,"end":338},{"type":10,"start":343,"end":351},{"type":3,"start":441,"end":453,"href":"https://exoplayer.dev/glossary.html#exoplayer","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"3998","startIndex":0}]},"isFullContent":false,"subtitle":""},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"2a9c70068752":{"id":"2a9c70068752","versionId":"2fdf317d606f","creatorId":"7d401664dcde","homeCollectionId":"8be3f5be7065","title":"ExoPlayer 2.14 - What’s new","detectedLanguage":"en","latestVersion":"2fdf317d606f","latestPublishedVersion":"2fdf317d606f","hasUnpublishedEdits":true,"latestRev":148,"createdAt":1621270053949,"updatedAt":1641494323878,"acceptedAt":0,"firstPublishedAt":1621281107606,"latestPublishedAt":1621281107606,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.14 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":629,"imageCount":0,"readingTime":2.3735849056603775,"subtitle":"ExoPlayer 2.14 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":35,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48171,"metadata":{"postCount":48171,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4","alts":[{"type":2,"url":"medium://p/7598fee12cf4"},{"type":3,"url":"medium://p/7598fee12cf4"}],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/were-hiring-ea2d76b01b61","alts":[{"type":3,"url":"medium://p/ea2d76b01b61"},{"type":2,"url":"medium://p/ea2d76b01b61"}],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.Listener.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/drm/DrmSessionManager.html#preacquireSession(android.os.Looper,com.google.android.exoplayer2.drm.DrmSessionEventListener.EventDispatcher,com.google.android.exoplayer2.Format)","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/MediaMetadata.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.EventListener.html#onMediaMetadataChanged(com.google.android.exoplayer2.MediaMetadata)","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.EventListener.html#onAvailableCommandsChanged(com.google.android.exoplayer2.Player.Commands)","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/rtsp.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/SubtitleView.html#setViewType(int)","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.html#addListener(com.google.android.exoplayer2.Player.Listener)","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.html#getMediaMetadata()","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.html#isCommandAvailable(int)","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.html#getAvailableCommands()","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","alts":[],"httpStatus":200},{"url":"https://github.com/dlafayet","alts":[],"httpStatus":200},{"url":"https://github.com/szaboa","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues/8435","alts":[],"httpStatus":200},{"url":"https://github.com/abeljim","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1621281108982},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":136,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"exoplayer-2-14-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"exoplayer-2-14-whats-new-2a9c70068752","previewContent":{"bodyModel":{"paragraphs":[{"name":"ca8e","type":3,"text":"ExoPlayer 2.14 - What’s new","markups":[],"alignment":1},{"name":"5952","type":1,"text":"ExoPlayer 2.14 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":180,"end":198,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","title":"","rel":"noopener","anchorType":0}],"alignment":1},{"name":"3b7f","type":3,"text":"RTSP","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.14 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"ca8e","type":3,"text":"ExoPlayer 2.14 - What’s new","markups":[]},{"name":"5952","type":1,"text":"ExoPlayer 2.14 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":180,"end":198,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","title":"","rel":"noopener","anchorType":0}]},{"name":"3b7f","type":3,"text":"RTSP","markups":[]},{"name":"3e31","type":1,"text":"ExoPlayer 2.14 includes support for streaming over RTSP. This initial version supports RTSP version 1.0, H.264 video, and…","markups":[]}],"sections":[{"name":"8a57","startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.14 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"ea2d76b01b61":{"id":"ea2d76b01b61","versionId":"7fdeaa281be5","creatorId":"7d401664dcde","homeCollectionId":"8be3f5be7065","title":"We’re hiring!","detectedLanguage":"en","latestVersion":"7fdeaa281be5","latestPublishedVersion":"7fdeaa281be5","hasUnpublishedEdits":false,"latestRev":51,"createdAt":1616067822869,"updatedAt":1641568013283,"acceptedAt":0,"firstPublishedAt":1616068222280,"latestPublishedAt":1628785581617,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Join us and help to improve the developer facing APIs powering media playback, processing and related use cases for hundreds of thousands…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":95,"imageCount":0,"readingTime":0.3584905660377358,"subtitle":"Join us and help to improve the developer facing APIs powering media playback, processing and related use cases for hundreds of thousands…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":14,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48171,"metadata":{"postCount":48171,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"hiring","name":"Hiring","postCount":39802,"metadata":{"postCount":39802,"coverImage":{"id":"1*rVvBHi6N6Ms0hts1HAr0Bw.png","originalWidth":1655,"originalHeight":922}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://www.linkedin.com/in/ojw28/","alts":[],"httpStatus":999},{"url":"https://careers.google.com/jobs/results/115976595925017286-staff-software-engineer-android-media/","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1628785582094},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":24,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"were-hiring","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"were-hiring-ea2d76b01b61","previewContent":{"bodyModel":{"paragraphs":[{"name":"53b0","type":3,"text":"We’re hiring!","markups":[],"alignment":1},{"name":"a056","type":1,"text":"Join us and help to improve the developer facing APIs powering media playback, processing and related use cases for hundreds of thousands of Android apps.","markups":[],"alignment":1},{"name":"54d8","type":1,"text":"Our team in London develop the open-source ExoPlayer library, which powers billions of video playbacks daily on Android…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Join us and help to improve the developer facing APIs powering media playback, processing and related use cases for hundreds of thousands…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"53b0","type":3,"text":"We’re hiring!","markups":[]},{"name":"a056","type":1,"text":"Join us and help to improve the developer facing APIs powering media playback, processing and related use cases for hundreds of thousands of Android apps.","markups":[]},{"name":"54d8","type":1,"text":"Our team in London develop the open-source ExoPlayer library, which powers billions of video playbacks daily on Android devices. We’re also expanding to look at…","markups":[]}],"sections":[{"name":"971c","startIndex":0}]},"isFullContent":false,"subtitle":"Join us and help to improve the developer facing APIs powering media playback, processing and related use cases for hundreds of thousands…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":true,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"bc0d35d96b48":{"id":"bc0d35d96b48","versionId":"e9fd53eacd71","creatorId":"31eab97ed6eb","homeCollectionId":"8be3f5be7065","title":"Transforming media with ExoPlayer","detectedLanguage":"en","latestVersion":"e9fd53eacd71","latestPublishedVersion":"e9fd53eacd71","hasUnpublishedEdits":false,"latestRev":77,"createdAt":1612782755917,"updatedAt":1640849356839,"acceptedAt":0,"firstPublishedAt":1612955923433,"latestPublishedAt":1612955923433,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.13 includes a new Transformer library module for converting media streams. This post describes what this module does and how…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":760,"imageCount":0,"readingTime":2.8679245283018866,"subtitle":"ExoPlayer 2.13 includes a new Transformer library module for converting media streams. This post describes what this module does and how…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":19,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48171,"metadata":{"postCount":48171,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"androiddev","name":"AndroidDev","postCount":12148,"metadata":{"postCount":12148,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/transformer/Transformer.html#startTransformation%28com.google.android.exoplayer2.MediaItem,java.lang.String%29","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/transformer/Transformer.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/source/MediaSourceFactory.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/transformer/Transformer.html#getProgress%28com.google.android.exoplayer2.transformer.ProgressHolder%29","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/transformer/Transformer.Builder.html#setFlattenForSlowMotion%28boolean%29","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/tree/r2.13.0/library/transformer","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/MediaItem.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/SimpleExoPlayer.html","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/release-v2/CONTRIBUTING.md","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/os/ParcelFileDescriptor","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/MediaMuxer","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1612955924199},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":25,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"transforming-media-with-exoplayer","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"transforming-media-with-exoplayer-bc0d35d96b48","previewContent":{"bodyModel":{"paragraphs":[{"name":"7181","type":3,"text":"Transforming media with ExoPlayer","markups":[],"alignment":1},{"name":"37a9","type":1,"text":"ExoPlayer 2.13 includes a new Transformer library module for converting media streams. This post describes what this module does and how to use it.","markups":[{"type":3,"start":30,"end":41,"href":"https://github.com/google/ExoPlayer/tree/r2.13.0/library/transformer","title":"","rel":"","anchorType":0}],"alignment":1},{"name":"20c1","type":3,"text":"API capabilities","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.13 includes a new Transformer library module for converting media streams. This post describes what this module does and how…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"7181","type":3,"text":"Transforming media with ExoPlayer","markups":[]},{"name":"37a9","type":1,"text":"ExoPlayer 2.13 includes a new Transformer library module for converting media streams. This post describes what this module does and how to use it.","markups":[{"type":3,"start":30,"end":41,"href":"https://github.com/google/ExoPlayer/tree/r2.13.0/library/transformer","title":"","rel":"","anchorType":0}]},{"name":"20c1","type":3,"text":"API capabilities","markups":[]},{"name":"aa9e","type":1,"text":"Unlike the other ExoPlayer libraries, the main purpose of the Transformer API is not media playback. It takes an input media stream, applies changes to it…","markups":[]}],"sections":[{"name":"600c","startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.13 includes a new Transformer library module for converting media streams. This post describes what this module does and how…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"8552d5841060":{"id":"8552d5841060","versionId":"7dbf1488c874","creatorId":"d994f3760649","homeCollectionId":"8be3f5be7065","title":"Low-latency live streaming with ExoPlayer","detectedLanguage":"en","latestVersion":"7dbf1488c874","latestPublishedVersion":"7dbf1488c874","hasUnpublishedEdits":false,"latestRev":162,"createdAt":1612375647280,"updatedAt":1640837939874,"acceptedAt":0,"firstPublishedAt":1612864504362,"latestPublishedAt":1612864504362,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Low-latency live streaming was identified as one of the biggest challenges for video developers in the Bitmovin Video Developer Report…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*oKxy-iwR5p0NV8IfkN_stg.png","filter":"","backgroundSize":"","originalWidth":1400,"originalHeight":517,"strategy":"resample","height":0,"width":0},"wordCount":539,"imageCount":2,"readingTime":2.417295597484277,"subtitle":"Low-latency live streaming was identified as one of the biggest challenges for video developers in the Bitmovin Video Developer Report…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":26,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"live-streaming","name":"Live Streaming","postCount":49131,"metadata":{"postCount":49131,"coverImage":{"id":"1*5pb-LbnrlVTEym6LmllnNw.jpeg","originalWidth":736,"originalHeight":1104}},"type":"Tag"},{"slug":"low-latency-streaming","name":"Low Latency Streaming","postCount":63,"metadata":{"postCount":63,"coverImage":{"id":"0*WDbMra8sn2FEp3tP.png","originalWidth":500,"originalHeight":364,"isFeatured":true}},"type":"Tag"},{"slug":"low-latency","name":"Low Latency","postCount":271,"metadata":{"postCount":271,"coverImage":{"id":"0*l97vC1QkxR8Sivxt.png","originalWidth":328,"originalHeight":328,"isFeatured":true}},"type":"Tag"},{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://dashif.org/docs/CR-Low-Latency-Live-r8.pdf","alts":[],"httpStatus":200},{"url":"https://go.bitmovin.com/video-developer-report-2020","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/live-streaming.html","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues","alts":[],"httpStatus":200},{"url":"https://developer.apple.com/documentation/http_live_streaming/enabling_low-latency_hls","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1612864504843},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":95,"sectionCount":4,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"low-latency-live-streaming-with-exoplayer","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"low-latency-live-streaming-with-exoplayer-8552d5841060","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*oKxy-iwR5p0NV8IfkN_stg.png","originalWidth":1400,"originalHeight":517,"isFeatured":true,"alt":"Diagram showing segments in a live stream with a low-latency playback position in the yet unfinished segment at the live edge"}},{"name":"a123","type":3,"text":"Low-latency live streaming with ExoPlayer","markups":[{"type":1,"start":0,"end":41}],"alignment":1},{"name":"305b","type":1,"text":"Low-latency live streaming was identified as one of the biggest challenges for video…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Low-latency live streaming was identified as one of the biggest challenges for video developers in the Bitmovin Video Developer Report…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":3,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"primaryTopicId":"64756708407c","isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"a123","type":3,"text":"Low-latency live streaming with ExoPlayer","markups":[{"type":1,"start":0,"end":41}]},{"name":"305b","type":1,"text":"Low-latency live streaming was identified as one of the biggest challenges for video developers in the Bitmovin Video Developer Report 2020. So you may be pleased to hear that, from version 2.13.0, ExoPlayer supports new low-latency live streaming protocols.","markups":[{"type":3,"start":103,"end":139,"href":"https://go.bitmovin.com/video-developer-report-2020","title":"","rel":"","anchorType":0}]},{"name":"113b","type":1,"text":"Low-latency live streaming is all about reducing the live offset, also…","markups":[]}],"sections":[{"name":"a664","startIndex":0}]},"isFullContent":false,"subtitle":"Low-latency live streaming was identified as one of the biggest challenges for video developers in the Bitmovin Video Developer Report…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"8dd2b7144ccc":{"id":"8dd2b7144ccc","versionId":"6cae3b85d1bc","creatorId":"fcc058488992","homeCollectionId":"8be3f5be7065","title":"ExoPlayer 2.13 - What’s new","detectedLanguage":"en","latestVersion":"6cae3b85d1bc","latestPublishedVersion":"6cae3b85d1bc","hasUnpublishedEdits":false,"latestRev":110,"createdAt":1612375178400,"updatedAt":1640806001748,"acceptedAt":0,"firstPublishedAt":1612537145832,"latestPublishedAt":1613131829731,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.13 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":572,"imageCount":0,"readingTime":2.158490566037736,"subtitle":"ExoPlayer 2.13 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":32,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48171,"metadata":{"postCount":48171,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":6,"links":{"entries":[{"url":"https://dashif.org/docs/CR-Low-Latency-Live-r8.pdf","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/track-selection.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/ad-insertion.html","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/transforming-media-with-exoplayer-bc0d35d96b48","alts":[{"type":3,"url":"medium://p/bc0d35d96b48"},{"type":2,"url":"medium://p/bc0d35d96b48"}],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/low-latency-live-streaming-with-exoplayer-8552d5841060","alts":[{"type":3,"url":"medium://p/8552d5841060"},{"type":2,"url":"medium://p/8552d5841060"}],"httpStatus":200},{"url":"https://developer.apple.com/documentation/http_live_streaming/enabling_low-latency_hls","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1613131830499},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":106,"sectionCount":2,"readingList":0,"topics":[{"topicId":"ab3d8f7f8eb1","slug":"ios-development","createdAt":1521651850182,"deletedAt":0,"image":{"id":"1*g_B4JNulmfXSj0AyEjImyA@2x.jpeg","originalWidth":5184,"originalHeight":3456},"name":"iOS Dev","description":"Appy talk.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"iOS App Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"exoplayer-2-13-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"exoplayer-2-13-whats-new-8dd2b7144ccc","previewContent":{"bodyModel":{"paragraphs":[{"name":"7a50","type":3,"text":"ExoPlayer 2.13 - What’s new","markups":[],"alignment":1},{"name":"d87f","type":1,"text":"ExoPlayer 2.13 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":180,"end":198,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","title":"","rel":"","anchorType":0}],"alignment":1},{"name":"50c9","type":3,"text":"Transformer API","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.13 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"7a50","type":3,"text":"ExoPlayer 2.13 - What’s new","markups":[]},{"name":"d87f","type":1,"text":"ExoPlayer 2.13 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":180,"end":198,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","title":"","rel":"","anchorType":0}]},{"name":"50c9","type":3,"text":"Transformer API","markups":[]},{"name":"a89d","type":1,"text":"ExoPlayer 2.13 includes a new Transformer library module for converting media. This API takes an input stream, applies…","markups":[]}],"sections":[{"name":"c69a","startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.13 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"d6b7d89b9063":{"id":"d6b7d89b9063","versionId":"87cce92398af","creatorId":"7b453302af7a","homeCollectionId":"8be3f5be7065","title":"The media2 extension for ExoPlayer","detectedLanguage":"en","latestVersion":"87cce92398af","latestPublishedVersion":"87cce92398af","hasUnpublishedEdits":false,"latestRev":2843,"createdAt":1593057921463,"updatedAt":1639614975790,"acceptedAt":0,"firstPublishedAt":1600682804756,"latestPublishedAt":1600682804756,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"The AndroidX media2 session API is the new version of Android’s MediaSession API. By integrating your application’s media player with this…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":804,"imageCount":0,"readingTime":3.0339622641509436,"subtitle":"The AndroidX media2 session API is the new version of Android’s MediaSession API. By integrating your application’s media player with this…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":34,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48171,"metadata":{"postCount":48171,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/SessionCallbackBuilder.CustomCommandProvider.html#onCustomCommand-androidx.media2.session.MediaSession-androidx.media2.session.MediaSession.ControllerInfo-androidx.media2.session.SessionCommand-android.os.Bundle-","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/SessionCallbackBuilder.CustomCommandProvider.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/SessionCallbackBuilder.AllowedCommandProvider.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/SessionCallbackBuilder.CustomCommandProvider.html#getCustomCommands-androidx.media2.session.MediaSession-androidx.media2.session.MediaSession.ControllerInfo-","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/MediaSessionUtil.html#getSessionCompatToken-androidx.media2.session.MediaSession-","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/SessionCallbackBuilder.MediaItemProvider.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/SessionCallbackBuilder.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/SessionPlayerConnector.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/DefaultMediaItemConverter.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/DefaultMediaItemConverter.html#getMetadata-com.google.android.exoplayer2.MediaItem-","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/SessionPlayerConnector.html#setControlDispatcher-com.google.android.exoplayer2.ControlDispatcher-","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/DefaultControlDispatcher.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/MediaItemConverter.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/media2/SessionCallbackBuilder.DefaultAllowedCommandProvider.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/PlayerNotificationManager.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ControlDispatcher.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media2/session/MediaSession.SessionCallback","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media2/common/MediaMetadata#MediaId","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media2/session/MediaSession?hl=en","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media2/common/SessionPlayer","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/media2/session/MediaController","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/session/MediaSessionManager#getActiveSessions%28android.content.ComponentName%29","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/media2","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1600682809559},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":118,"sectionCount":4,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"the-media2-extension-for-exoplayer","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"the-media2-extension-for-exoplayer-d6b7d89b9063","previewContent":{"bodyModel":{"paragraphs":[{"name":"f255","type":3,"text":"The media2 extension for ExoPlayer","markups":[],"alignment":1},{"name":"da98","type":1,"text":"The AndroidX media2 session API is the new version of Android’s MediaSession API. By integrating your application’s media player with this API, you can allow playback to be controlled via Bluetooth media control keys, Google Assistant, Android Auto, and other…","markups":[{"type":3,"start":4,"end":31,"href":"https://developer.android.com/jetpack/androidx/releases/media2","title":"","rel":"","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"The AndroidX media2 session API is the new version of Android’s MediaSession API. By integrating your application’s media player with this…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":3,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"primaryTopicId":"64756708407c","isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"f255","type":3,"text":"The media2 extension for ExoPlayer","markups":[]},{"name":"da98","type":1,"text":"The AndroidX media2 session API is the new version of Android’s MediaSession API. By integrating your application’s media player with this API, you can allow playback to be controlled via Bluetooth media control keys, Google Assistant, Android Auto, and other applications running on the user’s device.","markups":[{"type":3,"start":4,"end":31,"href":"https://developer.android.com/jetpack/androidx/releases/media2","title":"","rel":"","anchorType":0}]},{"name":"8ec5","type":1,"text":"The core class in…","markups":[{"type":10,"start":44,"end":56},{"type":3,"start":44,"end":56,"href":"https://developer.android.com/reference/androidx/media2/session/MediaSession?hl=en","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"e91c","startIndex":0}]},"isFullContent":false,"subtitle":"The AndroidX media2 session API is the new version of Android’s MediaSession API. By integrating your application’s media player with this…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"abe0a24edb55":{"id":"abe0a24edb55","versionId":"7ef1f2c7fb99","creatorId":"27823e454ddd","homeCollectionId":"8be3f5be7065","title":"A top-level playlist API for ExoPlayer","detectedLanguage":"en","latestVersion":"7ef1f2c7fb99","latestPublishedVersion":"7ef1f2c7fb99","hasUnpublishedEdits":false,"latestRev":2601,"createdAt":1598909135902,"updatedAt":1639609008554,"acceptedAt":0,"firstPublishedAt":1600374845311,"latestPublishedAt":1600390854175,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.12 integrates playlist support into the player’s top-level API.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":1068,"imageCount":0,"readingTime":4.030188679245283,"subtitle":"ExoPlayer 2.12 integrates playlist support into the player’s top-level API.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":32,"isBookmarked":false,"tags":[],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://github.com/google/ExoPlayer/issues/new?assignees=&labels=question%2C+needs+triage&template=question.md&title=","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/playlists.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/playlists.html#detecting-when-the-playlist-changes","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.MediaItemTransitionReason.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.html","alts":[],"httpStatus":200},{"url":"http://exoplayer.dev/media-items.html","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/exoplayer-2-x-mediasource-composition-6c285fcbca1f","alts":[{"type":3,"url":"medium://p/6c285fcbca1f"},{"type":2,"url":"medium://p/6c285fcbca1f"}],"httpStatus":200}],"version":"0.3","generatedAt":1600390854713},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":236,"sectionCount":2,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"a-top-level-playlist-api-for-exoplayer","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"a-top-level-playlist-api-for-exoplayer-abe0a24edb55","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewTitle","type":3,"text":"A top-level playlist API for ExoPlayer","alignment":1},{"name":"previewSubtitle","type":13,"text":"ExoPlayer 2.12 integrates playlist support into the player’s top-level API.","alignment":1},{"name":"previewSnippet0","type":1,"text":"In ExoPlayer 2.0, MediaSource composition made it possible to play sequences of media items using…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.12 integrates playlist support into the player’s top-level API."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1600374844024,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"f239","type":3,"text":"A top-level playlist API for ExoPlayer","markups":[]},{"name":"b465","type":1,"text":"In ExoPlayer 2.0, MediaSource composition made it possible to play sequences of media items using ConcatenatingMediaSource. ExoPlayer 2.5 added the ability to dynamically edit the sequence of media items during playback. ExoPlayer 2.12 goes a step further, directly integrating playlist support into the player’s top-level API. Along with the new…","markups":[{"type":10,"start":98,"end":122},{"type":10,"start":367,"end":376},{"type":10,"start":496,"end":507},{"type":10,"start":566,"end":575},{"type":10,"start":601,"end":612},{"type":3,"start":18,"end":41,"href":"https://medium.com/google-exoplayer/exoplayer-2-x-mediasource-composition-6c285fcbca1f","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"5d9e","startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.12 integrates playlist support into the player’s top-level API."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"7598fee12cf4":{"id":"7598fee12cf4","versionId":"bfa97734fd80","creatorId":"fcc058488992","homeCollectionId":"8be3f5be7065","title":"Improved Japanese subtitle support","detectedLanguage":"en","latestVersion":"bfa97734fd80","latestPublishedVersion":"bfa97734fd80","hasUnpublishedEdits":false,"latestRev":603,"createdAt":1600091098830,"updatedAt":1639609263532,"acceptedAt":0,"firstPublishedAt":1600099605900,"latestPublishedAt":1600164656784,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.12 adds parsing and rendering support for vertical text and rubies.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*fFkjRc9DgHcYLyrxlYEqWw.png","filter":"","backgroundSize":"","originalWidth":2160,"originalHeight":1080,"strategy":"resample","height":0,"width":0},"wordCount":571,"imageCount":3,"readingTime":2.7047169811320755,"subtitle":"ExoPlayer 2.12 adds parsing and rendering support for vertical text and rubies.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":11,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android-development","name":"Android Development","postCount":5156,"metadata":{"postCount":5156,"coverImage":{"id":"1*l4w3lWSwIWfC8TIMY6vfYA.png","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"subtitles","name":"Subtitles","postCount":771,"metadata":{"postCount":771,"coverImage":{"id":"1*jBRrXoBayhMY7Ke6a9jvgw.jpeg","originalWidth":640,"originalHeight":427,"isFeatured":true,"alt":"Ripe, red tomatoes against a canvas background; Scrabble tiles spell out “Tomatoes”"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/text/span/HorizontalTextInVerticalContextSpan.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/text/span/RubySpan.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.EventListener.html#onTracksChanged-com.google.android.exoplayer2.source.TrackGroupArray-com.google.android.exoplayer2.trackselection.TrackSelectionArray-","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/text/TextOutput.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/text/Cue.html#text","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/text/Cue.html#position","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/text/Cue.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/text/Cue.html#VERTICAL_TYPE_LR","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/text/Cue.html#VERTICAL_TYPE_RL","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/text/Cue.html#verticalType","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/SubtitleView.html#VIEW_TYPE_WEB","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/SubtitleView.html#setViewType-int-","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/SubtitleView.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/SubtitleView.html#VIEW_TYPE_CANVAS","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/PlayerView.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/StyledPlayerView.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/SimpleExoPlayer.html#addTextOutput-com.google.android.exoplayer2.text.TextOutput-","alts":[],"httpStatus":200},{"url":"https://www.w3.org/TR/webvtt1/#webvtt-vertical-text-cue-setting","alts":[],"httpStatus":200},{"url":"https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-rubyPosition","alts":[],"httpStatus":200},{"url":"https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-textCombine","alts":[],"httpStatus":200},{"url":"https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-ruby","alts":[],"httpStatus":200},{"url":"https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-writingMode","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/exoplayer-2-12-whats-new-e43ef8ff72e7","alts":[{"type":3,"url":"medium://p/e43ef8ff72e7"},{"type":2,"url":"medium://p/e43ef8ff72e7"}],"httpStatus":200},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/text-combine-upright#:~:text=The%20text-combine-upright%20CSS,glyph%20for%20layout%20and%20decoration.","alts":[],"httpStatus":200},{"url":"https://developer.mozilla.org/en-US/docs/Web/CSS/ruby-position#:~:text=The%20ruby-position%20CSS%20property,side%20%28%20inter-character%20%29.","alts":[],"httpStatus":200},{"url":"https://netflixtechblog.com/implementing-japanese-subtitles-on-netflix-c165fbe61989","alts":[{"type":3,"url":"medium://p/c165fbe61989"},{"type":2,"url":"medium://p/c165fbe61989"}],"httpStatus":200},{"url":"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby","alts":[],"httpStatus":200},{"url":"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rt","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/text/spans#custom-spans","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/webkit/WebView","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1600164658033},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":21,"sectionCount":2,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"improved-japanese-subtitle-support","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"improved-japanese-subtitle-support-7598fee12cf4","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*fFkjRc9DgHcYLyrxlYEqWw.png","originalWidth":2160,"originalHeight":1080}},{"name":"previewTitle","type":3,"text":"Improved Japanese subtitle support","alignment":1},{"name":"previewSubtitle","type":13,"text":"ExoPlayer 2.12 adds parsing and rendering support for vertical text…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.12 adds parsing and rendering support for vertical text and rubies."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"ad0f","type":3,"text":"Improved Japanese subtitle support","markups":[]},{"name":"b006","type":1,"text":"ExoPlayer 2.12 adds parsing and rendering support for features often used in Japanese subtitles. We’ve received multiple requests from app developers to improve our support in this area.","markups":[{"type":3,"start":0,"end":14,"href":"https://medium.com/google-exoplayer/exoplayer-2-12-whats-new-e43ef8ff72e7","title":"","rel":"","anchorType":0}]},{"name":"7062","type":1,"text":"We now support the following features from TTML and WebVTT sources:","markups":[]},{"name":"4f05","type":9,"text":"Vertical text (with tate-chū-yoko)","markups":[]},{"name":"a90d","type":9,"text":"Rubies","markups":[]},{"name":"9432","type":1,"text":"Netflix has written a blog post…","markups":[{"type":3,"start":20,"end":31,"href":"https://netflixtechblog.com/implementing-japanese-subtitles-on-netflix-c165fbe61989","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"a9c1","startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.12 adds parsing and rendering support for vertical text and rubies."},"cardType":0,"isDistributionAlertDismissed":true,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"e43ef8ff72e7":{"id":"e43ef8ff72e7","versionId":"c3f54104f12d","creatorId":"7d401664dcde","homeCollectionId":"8be3f5be7065","title":"ExoPlayer 2.12 - What’s new","detectedLanguage":"en","latestVersion":"c3f54104f12d","latestPublishedVersion":"c3f54104f12d","hasUnpublishedEdits":false,"latestRev":597,"createdAt":1599662676520,"updatedAt":1639609034043,"acceptedAt":0,"firstPublishedAt":1599992543131,"latestPublishedAt":1600682955788,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.12 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*NfJJ6aXHa0Oh_DZj","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":900,"strategy":"resample","height":0,"width":0,"focusPercentX":50,"focusPercentY":50},"wordCount":1133,"imageCount":1,"readingTime":4.475471698113208,"subtitle":"ExoPlayer 2.12 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":90,"isBookmarked":false,"tags":[{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48171,"metadata":{"postCount":48171,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":4,"links":{"entries":[{"url":"https://en.wikipedia.org/wiki/Ruby_character","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.Builder.html#setSessionKeepaliveMs-long-","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/MetadataRetriever.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/DefaultRenderersFactory.html#setEnableAudioOffload-boolean-","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/customization.html#customizing-extractor-flags","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/downloading-media.html#creating-a-downloadmanager","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/playlists.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/media-items.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ExoPlayer.html#experimentalSetOffloadSchedulingEnabled-boolean-","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/SubtitleView.html#setViewType-int-","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/tree/release-v2/extensions/mediasession","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/tree/release-v2/extensions/media2","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/audiofx/AudioEffect","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/a-top-level-playlist-api-for-exoplayer-abe0a24edb55","alts":[{"type":3,"url":"medium://p/abe0a24edb55"},{"type":2,"url":"medium://p/abe0a24edb55"}],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4","alts":[{"type":3,"url":"medium://p/7598fee12cf4"},{"type":2,"url":"medium://p/7598fee12cf4"}],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/the-media2-extension-for-exoplayer-d6b7d89b9063","alts":[{"type":3,"url":"medium://p/d6b7d89b9063"},{"type":2,"url":"medium://p/d6b7d89b9063"}],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues/7267","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/pull/7667","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1600682957618},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":400,"sectionCount":3,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"exoplayer-2-12-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"exoplayer-2-12-whats-new-e43ef8ff72e7","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*NfJJ6aXHa0Oh_DZj","originalWidth":1600,"originalHeight":900,"isFeatured":true,"focusPercentX":50,"focusPercentY":50}},{"name":"c6ec","type":3,"text":"ExoPlayer 2.12 - What’s new","markups":[],"alignment":1},{"name":"5971","type":1,"text":"ExoPlayer 2.12 contains many new features, improvements and bug fixes. This post highlights some of the most…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.12 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"c6ec","type":3,"text":"ExoPlayer 2.12 - What’s new","markups":[]},{"name":"5971","type":1,"text":"ExoPlayer 2.12 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes.","markups":[]},{"name":"3e4d","type":3,"text":"Top-level playlist API","markups":[]},{"name":"5d5a","type":1,"text":"The biggest change in the 2.12 release is that playlist support has been added directly to the player’s top-level API, along with a new MediaItem class for defining content to be…","markups":[{"type":10,"start":136,"end":145},{"type":10,"start":205,"end":229}]}],"sections":[{"name":"1e88","startIndex":0},{"name":"ccfd","startIndex":2}]},"isFullContent":false,"subtitle":"ExoPlayer 2.12 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes."},"cardType":0,"isDistributionAlertDismissed":true,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"3026207850b2":{"id":"3026207850b2","versionId":"1e544c61533f","creatorId":"ca7731d59899","homeCollectionId":"8be3f5be7065","title":"Improving ExoPlayer rendering performance","detectedLanguage":"en","latestVersion":"1e544c61533f","latestPublishedVersion":"1e544c61533f","hasUnpublishedEdits":false,"latestRev":778,"createdAt":1582213613450,"updatedAt":1639401930816,"acceptedAt":0,"firstPublishedAt":1582311062616,"latestPublishedAt":1599864739593,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"We have recently pushed a new experimental feature to the ExoPlayer dev-v2 branch as part of an overall effort to improve the player’s…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*B98pyBHvgTOUSqZdp6D7eQ.png","filter":"","backgroundSize":"","originalWidth":360,"originalHeight":720,"strategy":"resample","height":0,"width":0,"focusPercentX":50,"focusPercentY":49},"wordCount":1223,"imageCount":1,"readingTime":4.815094339622641,"subtitle":"We have recently pushed a new experimental feature to the ExoPlayer dev-v2 branch as part of an overall effort to improve the player’s…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":42,"isBookmarked":false,"tags":[{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"60fps","name":"60fps","postCount":53,"metadata":{"postCount":53,"coverImage":{"id":"1*-f_geXgFxX8EwRmzfQv0vA.jpeg","originalWidth":4935,"originalHeight":3295,"isFeatured":true,"alt":"Image by \x3ca href=”https://www.freepik.com/free-photo/close-up-camera-lens-memory-cards-laptop_3716836.htm#query=Swift%20and%20Camera&position=5&from_view=search&track=ais\"\x3eFreepik\x3c/a\x3e"}},"type":"Tag"},{"slug":"4k-video","name":"4k Video","postCount":180,"metadata":{"postCount":180,"coverImage":{"id":"0*AP5e4FAnGbK9kjHr.jpg","originalWidth":1500,"originalHeight":1318,"isFeatured":true,"externalSrc":"https://m.media-amazon.com/images/I/81bJcCz5AWL._AC_SL1500_.jpg","alt":"Rexing V1PGW-4K 2.4 LCD 2160p Front + 1080p Rear W/Built-in GPS, Wi-Fi 170° Wide Angle Dual Channel Dashboard Camera Recorder Car Dash Cam with Rear Cam,G-Sensor,WDR,Loop Recording,Mobile App (2022)"}},"type":"Tag"},{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":3,"links":{"entries":[{"url":"https://github.com/google/ExoPlayer/blob/r2.11.3/demos/main/src/main/java/com/google/android/exoplayer2/demo/DemoApplication.java#L96-L97","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/43bbc172a4ef52e7cb6a60edc9ec6404af72297e/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/43bbc172a4ef52e7cb6a60edc9ec6404af72297e/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java#L200-L203","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.11.3/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java#L862","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/MediaCodec#queueInputBuffer%28int,%20int,%20int,%20long,%20int%29","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/MediaCodec#queueSecureInputBuffer%28int,%20int,%20android.media.MediaCodec.CryptoInfo,%20long,%20int%29","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.11.3/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java#L718","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/r2.11.3/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java#L719","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/MediaCodec#asynchronous-processing-using-buffers","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/MediaCodec#data-processing","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/MediaCodec","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1599864740826},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":143,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"improved-rendering-performance-operating-mediacodec-in-asynchronous-mode-and-asynchronous-buffer","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"improved-rendering-performance-operating-mediacodec-in-asynchronous-mode-and-asynchronous-buffer-3026207850b2","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*B98pyBHvgTOUSqZdp6D7eQ.png","originalWidth":360,"originalHeight":720,"isFeatured":true,"focusPercentX":50,"focusPercentY":49}},{"name":"3c57","type":3,"text":"Improving ExoPlayer rendering performance","markups":[],"alignment":1},{"name":"767f","type":1,"text":"We have recently pushed a new experimental feature to the ExoPlayer dev-v2 branch as…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"We have recently pushed a new experimental feature to the ExoPlayer dev-v2 branch as part of an overall effort to improve the player’s…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":4,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1582310885647,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"3c57","type":3,"text":"Improving ExoPlayer rendering performance","markups":[]},{"name":"767f","type":1,"text":"We have recently pushed a new experimental feature to the ExoPlayer dev-v2 branch as part of an overall effort to improve the player’s rendering performance, i.e., reduce dropped frames and audio underruns. The feature is changing ExoPlayer in two ways:","markups":[]},{"name":"7fb9","type":10,"text":"The player operates MediaCodec in asynchronous mode.","markups":[{"type":3,"start":34,"end":51,"href":"https://developer.android.com/reference/android/media/MediaCodec#asynchronous-processing-using-buffers","title":"","rel":"","anchorType":0}]},{"name":"9182","type":10,"text":"The player submits…","markups":[]}],"sections":[{"name":"71e0","startIndex":0}]},"isFullContent":false,"subtitle":"We have recently pushed a new experimental feature to the ExoPlayer dev-v2 branch as part of an overall effort to improve the player’s…"},"cardType":0,"isDistributionAlertDismissed":true,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"e0e0701e4b6c":{"id":"e0e0701e4b6c","versionId":"ed8d8940dd48","creatorId":"7d401664dcde","homeCollectionId":"8be3f5be7065","title":"ExoPlayer 2.11 - What’s new","detectedLanguage":"en","latestVersion":"ed8d8940dd48","latestPublishedVersion":"ed8d8940dd48","hasUnpublishedEdits":false,"latestRev":460,"createdAt":1575898450876,"updatedAt":1639348992147,"acceptedAt":0,"firstPublishedAt":1576082506637,"latestPublishedAt":1576082506637,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.11 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":1202,"imageCount":0,"readingTime":4.535849056603774,"subtitle":"ExoPlayer 2.11 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":85,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48171,"metadata":{"postCount":48171,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":6,"links":{"entries":[{"url":"https://android-developers.googleblog.com/2019/07/capturing-audio-in-android-q.html","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9","alts":[{"type":3,"url":"medium://p/a7cb19bedef9"},{"type":2,"url":"medium://p/a7cb19bedef9"}],"httpStatus":200},{"url":"https://developer.android.com/reference/android/media/MediaCodecInfo.html","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues/4133","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/easy-audio-focus-with-exoplayer-a2dcbbe4640e","alts":[{"type":2,"url":"medium://p/a2dcbbe4640e"},{"type":3,"url":"medium://p/a2dcbbe4640e"}],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues/5619","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues/4721","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues/6334","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media-apps/volume-and-earphones#becoming-noisy","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/media-apps/audio-focus","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues/4825","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1576082510485},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":326,"sectionCount":3,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"exoplayer-2-11-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"exoplayer-2-11-whats-new-e0e0701e4b6c","previewContent":{"bodyModel":{"paragraphs":[{"name":"f4a1","type":3,"text":"ExoPlayer 2.11 - What’s new","markups":[],"alignment":1},{"name":"3900","type":1,"text":"ExoPlayer 2.11 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":180,"end":198,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","title":"","rel":"","anchorType":0}],"alignment":1},{"name":"5ee4","type":3,"text":"Android 10","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.11 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"f4a1","type":3,"text":"ExoPlayer 2.11 - What’s new","markups":[]},{"name":"3900","type":1,"text":"ExoPlayer 2.11 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As always, we recommend also taking a look at the full release notes.","markups":[{"type":3,"start":180,"end":198,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","title":"","rel":"","anchorType":0}]},{"name":"5ee4","type":3,"text":"Android 10","markups":[]},{"name":"44f0","type":1,"text":"ExoPlayer 2.11 is our first release that targets Android 10 (compileSdkVersion = 29) and exposes support for Android…","markups":[{"type":10,"start":61,"end":83}]}],"sections":[{"name":"c5a8","startIndex":0},{"name":"4453","startIndex":2}]},"isFullContent":false,"subtitle":"ExoPlayer 2.11 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. As…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"a7cb19bedef9":{"id":"a7cb19bedef9","versionId":"25a54238c1f4","creatorId":"34e28d98371","homeCollectionId":"8be3f5be7065","title":"Playing AV1 videos with ExoPlayer","detectedLanguage":"en","latestVersion":"25a54238c1f4","latestPublishedVersion":"25a54238c1f4","hasUnpublishedEdits":false,"latestRev":76,"createdAt":1570701138780,"updatedAt":1639287370799,"acceptedAt":0,"firstPublishedAt":1570730354633,"latestPublishedAt":1570730354633,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"AV1 is a new video codec that aims to provide improved compression efficiency compared to VP9 and H.265/HEVC. Over the past year, we’ve…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":224,"imageCount":0,"readingTime":0.8452830188679246,"subtitle":"AV1 is a new video codec that aims to provide improved compression efficiency compared to VP9 and H.265/HEVC. Over the past year, we’ve…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":31,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"av1","name":"Av1","postCount":83,"metadata":{"postCount":83,"coverImage":{"id":"0*Mi9DYUae38I7Ir6D","originalWidth":5428,"originalHeight":3648,"isFeatured":true,"alt":"A video editor open on a Mac","unsplashPhotoId":"8-iudQ2otb8"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":3,"links":{"entries":[{"url":"https://en.wikipedia.org/wiki/AV1","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/demo-application.html#enabling-extension-decoders","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/dev-v2/extensions/av1/README.md","alts":[],"httpStatus":200},{"url":"https://chromium.googlesource.com/codecs/libgav1","alts":[],"httpStatus":200},{"url":"https://developer.android.com/about/versions/10/highlights#new_audio_and_video_codecs","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/dev-v2/extensions/av1","alts":[],"httpStatus":200},{"url":"https://aomedia.org/news/av1-test-results/","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1570730355762},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":283,"sectionCount":3,"readingList":0,"topics":[]},"coverless":true,"slug":"playing-av1-videos-with-exoplayer","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"playing-av1-videos-with-exoplayer-a7cb19bedef9","previewContent":{"bodyModel":{"paragraphs":[{"name":"c6ee","type":3,"text":"Playing AV1 videos with ExoPlayer","markups":[],"alignment":1},{"name":"993b","type":1,"text":"AV1 is a new video codec that aims to provide improved compression efficiency compared to VP9 and HEVC. Over the past year, we’ve seen considerable interest in supporting AV1 playback in ExoPlayer. As part of keeping pace with the latest developments in video coding…","markups":[{"type":3,"start":0,"end":3,"href":"https://en.wikipedia.org/wiki/AV1","title":"","rel":"","anchorType":0},{"type":3,"start":46,"end":77,"href":"https://aomedia.org/news/av1-test-results/","title":"","rel":"","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"AV1 is a new video codec that aims to provide improved compression efficiency compared to VP9 and H.265/HEVC. Over the past year, we’ve…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"c6ee","type":3,"text":"Playing AV1 videos with ExoPlayer","markups":[]},{"name":"993b","type":1,"text":"AV1 is a new video codec that aims to provide improved compression efficiency compared to VP9 and HEVC. Over the past year, we’ve seen considerable interest in supporting AV1 playback in ExoPlayer. As part of keeping pace with the latest developments in video coding, we’re pleased to announce that we’ve…","markups":[{"type":3,"start":0,"end":3,"href":"https://en.wikipedia.org/wiki/AV1","title":"","rel":"","anchorType":0},{"type":3,"start":46,"end":77,"href":"https://aomedia.org/news/av1-test-results/","title":"","rel":"","anchorType":0},{"type":3,"start":347,"end":365,"href":"https://github.com/google/ExoPlayer/blob/dev-v2/extensions/av1","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"d24c","startIndex":0}]},"isFullContent":false,"subtitle":"AV1 is a new video codec that aims to provide improved compression efficiency compared to VP9 and H.265/HEVC. Over the past year, we’ve…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"15d344eaa8b9":{"id":"15d344eaa8b9","versionId":"f1e47ef72f26","creatorId":"7d401664dcde","homeCollectionId":"8be3f5be7065","title":"ExoPlayer 2.10 — What’s new","detectedLanguage":"en","latestVersion":"f1e47ef72f26","latestPublishedVersion":"f1e47ef72f26","hasUnpublishedEdits":false,"latestRev":926,"createdAt":1557077813250,"updatedAt":1639069879728,"acceptedAt":0,"firstPublishedAt":1557174660257,"latestPublishedAt":1557174660257,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"ExoPlayer 2.10 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. Take a…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":495,"imageCount":0,"readingTime":1.8679245283018868,"subtitle":"ExoPlayer 2.10 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. Take a…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":45,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48171,"metadata":{"postCount":48171,"coverImage":{"id":"1*XeP3JED3Ubhmccah7E6hYg.jpeg","originalWidth":1376,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"android-apps","name":"Android Apps","postCount":6069,"metadata":{"postCount":6069,"coverImage":{"id":"1*StlIIib5iZsJObaekEfnFA.jpeg","originalWidth":1778,"originalHeight":999,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer","name":"Exoplayer","postCount":227,"metadata":{"postCount":227,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"},{"slug":"exoplayer2","name":"Exoplayer2","postCount":94,"metadata":{"postCount":94,"coverImage":{"id":"1*Wz3iRd7gcPbsgTwNihpM3Q.jpeg","originalWidth":555,"originalHeight":381,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":3,"links":{"entries":[{"url":"https://exoplayer.dev/","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/downloading-media.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Format.html#roleFlags","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Format.html#metadata","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/DefaultTimeBar.html","alts":[],"httpStatus":200},{"url":"https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/SimpleExoPlayer.html#addMetadataOutput-com.google.android.exoplayer2.metadata.MetadataOutput-","alts":[],"httpStatus":200},{"url":"https://medium.com/google-exoplayer/improved-decoder-reuse-in-exoplayer-ef4c6d99591d","alts":[{"type":2,"url":"medium://p/ef4c6d99591d"},{"type":3,"url":"medium://p/ef4c6d99591d"}],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","alts":[],"httpStatus":200},{"url":"https://github.com/google/ExoPlayer/issues","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1557174660794},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":282,"sectionCount":3,"readingList":0,"topics":[]},"coverless":true,"slug":"exoplayer-2-10-whats-new","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"exoplayer-2-10-whats-new-15d344eaa8b9","previewContent":{"bodyModel":{"paragraphs":[{"name":"a8be","type":3,"text":"ExoPlayer 2.10 — What’s new","markups":[],"alignment":1},{"name":"ee05","type":1,"text":"ExoPlayer 2.10 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. Take a look at the full release notes for a more comprehensive list, and our new and improved developer site for more information about using…","markups":[{"type":3,"start":149,"end":167,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","title":"","rel":"nofollow noopener","anchorType":0},{"type":3,"start":207,"end":238,"href":"https://exoplayer.dev/","title":"","rel":"","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"ExoPlayer 2.10 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. Take a…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"8be3f5be7065","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"a8be","type":3,"text":"ExoPlayer 2.10 — What’s new","markups":[]},{"name":"ee05","type":1,"text":"ExoPlayer 2.10 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. Take a look at the full release notes for a more comprehensive list, and our new and improved developer site for more information about using ExoPlayer.","markups":[{"type":3,"start":149,"end":167,"href":"https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md","title":"","rel":"nofollow noopener","anchorType":0},{"type":3,"start":207,"end":238,"href":"https://exoplayer.dev/","title":"","rel":"","anchorType":0}]},{"name":"e50f","type":3,"text":"Better support for downloading media","markups":[]},{"name":"75cb","type":1,"text":"Support for downloading media has…","markups":[]}],"sections":[{"name":"10c1","startIndex":0},{"name":"c8f9","startIndex":2}]},"isFullContent":false,"subtitle":"ExoPlayer 2.10 contains many new features, improvements and bug fixes. This post highlights some of the most significant changes. Take a…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}}},"paging":{"path":"/_/api/collections/8be3f5be7065/stream","next":{"to":"1557174660257","ignoredIds":[],"page":2}},"collection":{"id":"8be3f5be7065","name":"AndroidX Media3","slug":"google-exoplayer","tags":[],"creatorId":"d994f3760649","description":"The Media3 developer blog","shortDescription":"The Media3 developer blog","image":{"imageId":"1*T6Iewm9z1-b78nwfzQDnBg.png","filter":"","backgroundSize":"","originalWidth":60,"originalHeight":60,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":4168,"activeAt":1721926761620},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"collectionMastheadId":"f8d403048c5b","sections":[{"type":2,"collectionHeaderMetadata":{"title":"google-exoplayer","backgroundImage":{},"logoImage":{},"alignment":2,"layout":4}},{"type":1,"postListMetadata":{"source":1,"layout":6,"number":25,"postIds":["ba1c9c17ee1a","d6957f4b077d","668b4e4c2f97","82c6d2490f8d","27d9dba9f5ed","2367a712f112","ec83d30db17a","cf9ef8e62be1","785afe47ef95","a7b7e8d167fe","4239c693ea8e","b7a8ab04f8d1","2a9c70068752","ea2d76b01b61","bc0d35d96b48","8552d5841060","8dd2b7144ccc","d6b7d89b9063","abe0a24edb55","7598fee12cf4","e43ef8ff72e7","3026207850b2","e0e0701e4b6c","a7cb19bedef9","15d344eaa8b9"]}}],"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF1A8917","point":0},{"color":"#FF11800E","point":0.1},{"color":"#FF0F730C","point":0.2},{"color":"#FF095407","point":1}],"backgroundColor":"#FFFFFFFF"},"highlightSpectrum":{"colorPoints":[{"color":"#FFFFFFFF","point":0},{"color":"#FFE8F3E8","point":0.1},{"color":"#FFE8F3E8","point":0.2},{"color":"#FFD1E7D1","point":0.6},{"color":"#FFA3D0A2","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF095407","point":0},{"color":"#FF0F730C","point":0.1},{"color":"#FF11800E","point":0.2},{"color":"#FF1A8917","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":5,"title":"Archive","url":"https://medium.com/google-exoplayer/archive"}],"colorBehavior":1,"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"google-exoplayer","backgroundImage":{},"logoImage":{},"alignment":2,"layout":4},"subscriberCount":4168,"tagline":"The ExoPlayer developer blog","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092962196,"type":"Collection"},"header":{"title":"google-exoplayer","backgroundImage":{},"logoImage":{},"alignment":2,"layout":4},"streamItems":[{"createdAt":1732695697280,"randomId":"fab6ed3b38a2","section":{"items":[{"post":{"postId":"ba1c9c17ee1a"},"itemType":"post"},{"post":{"postId":"d6957f4b077d"},"itemType":"post"},{"post":{"postId":"668b4e4c2f97"},"itemType":"post"},{"post":{"postId":"82c6d2490f8d"},"itemType":"post"},{"post":{"postId":"27d9dba9f5ed"},"itemType":"post"},{"post":{"postId":"2367a712f112"},"itemType":"post"},{"post":{"postId":"ec83d30db17a"},"itemType":"post"},{"post":{"postId":"cf9ef8e62be1"},"itemType":"post"},{"post":{"postId":"785afe47ef95"},"itemType":"post"},{"post":{"postId":"a7b7e8d167fe"},"itemType":"post"},{"post":{"postId":"4239c693ea8e"},"itemType":"post"},{"post":{"postId":"b7a8ab04f8d1"},"itemType":"post"},{"post":{"postId":"2a9c70068752"},"itemType":"post"},{"post":{"postId":"ea2d76b01b61"},"itemType":"post"},{"post":{"postId":"bc0d35d96b48"},"itemType":"post"},{"post":{"postId":"8552d5841060"},"itemType":"post"},{"post":{"postId":"8dd2b7144ccc"},"itemType":"post"},{"post":{"postId":"d6b7d89b9063"},"itemType":"post"},{"post":{"postId":"abe0a24edb55"},"itemType":"post"},{"post":{"postId":"7598fee12cf4"},"itemType":"post"},{"post":{"postId":"e43ef8ff72e7"},"itemType":"post"},{"post":{"postId":"3026207850b2"},"itemType":"post"},{"post":{"postId":"e0e0701e4b6c"},"itemType":"post"},{"post":{"postId":"a7cb19bedef9"},"itemType":"post"},{"post":{"postId":"15d344eaa8b9"},"itemType":"post"}],"layout":6},"itemType":"section","type":"StreamItem"}]}) // ]]></script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8e90b4aaabb48202',t:'MTczMjY5NTY5Ny4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>

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