PageSourceSearch

https://www.vdocipher.com/docs/assets/js/2d5f54c8.1b574683.js

js vdocipher.com collected 2026-09-24 17:17:34 UTC 43,670 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[5650],{28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>o});var l=i(96540);const d={},s=l.createContext(d);function r(e){const n=l.useContext(s);return l.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:r(e.components),l.createElement(s.Provider,{value:n},e.children)}},31059:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>a});var l=i(74848),d=i(28453);const s={id:"changelog",title:"Changelog",sidebar_label:"Changelog"},r=void 0,o={id:"mobile/android/changelog",title:"Changelog",description:"1.29.9",source:"@site/docs/mobile/android/changelog.md",sourceDirName:"mobile/android",slug:"/mobile/android/changelog",permalink:"/docs/mobile/android/changelog",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"changelog",title:"Changelog",sidebar_label:"Changelog"},sidebar:"mobile",previous:{title:"Error codes",permalink:"/docs/mobile/android/error-codes"},next:{title:"Playlists",permalink:"/docs/mobile/android/examples/playlist"}},c={},a=[{value:"1.29.9",id:"1299",level:3},{value:"1.29.8",id:"1298",level:3},{value:"1.29.7",id:"1297",level:3},{value:"1.29.6",id:"1296",level:3},{value:"1.29.5",id:"1295",level:3},{value:"1.29.4",id:"1294",level:3},{value:"1.28.15",id:"12815",level:3},{value:"1.29.3",id:"1293",level:3},{value:"1.29.2",id:"1292",level:3},{value:"1.29.1",id:"1291",level:3},{value:"1.28.13",id:"12813",level:3},{value:"1.28.10",id:"12810",level:3},{value:"1.28.9",id:"1289",level:3},{value:"1.28.8",id:"1288",level:3},{value:"1.28.7",id:"1287",level:3},{value:"1.28.6",id:"1286",level:3},{value:"1.28.4",id:"1284",level:3},{value:"1.27.1",id:"1271",level:3},{value:"1.26.9",id:"1269",level:3},{value:"1.26.8",id:"1268",level:3},{value:"1.26.7",id:"1267",level:3},{value:"1.26.6",id:"1266",level:3},{value:"1.26.5",id:"1265",level:3},{value:"1.26.4",id:"1264",level:3},{value:"1.26.3",id:"1263",level:3},{value:"1.26.1",id:"1261",level:3},{value:"1.26.0",id:"1260",level:3},{value:"1.25.1",id:"1251",level:3},{value:"1.24.1",id:"1241",level:3},{value:"1.24.0",id:"1240",level:3},{value:"1.23.5",id:"1235",level:3},{value:"1.23.4",id:"1234",level:3},{value:"1.23.3",id:"1233",level:3},{value:"1.23.2",id:"1232",level:3},{value:"1.23.1",id:"1231",level:3},{value:"1.23.0",id:"1230",level:3},{value:"1.22.5",id:"1225",level:3},{value:"1.22.4",id:"1224",level:3},{value:"1.22.3",id:"1223",level:3},{value:"1.22.2",id:"1222",level:3},{value:"1.22.0",id:"1220",level:3},{value:"1.21.2",id:"1212",level:3},{value:"1.21.1",id:"1211",level:3},{value:"1.21.0",id:"1210",level:3},{value:"1.19.7",id:"1197",level:3},{value:"1.19.6",id:"1196",level:3},{value:"1.19.4",id:"1194",level:3},{value:"1.19.2",id:"1192",level:3},{value:"1.19.1",id:"1191",level:3},{value:"1.19.0",id:"1190",level:3},{value:"1.18.2",id:"1182",level:3},{value:"1.18.1",id:"1181",level:3},{value:"1.17.0",id:"1170",level:3},{value:"1.16.0",id:"1160",level:3},{value:"1.15.1",id:"1151",level:3},{value:"1.15.0",id:"1150",level:3},{value:"1.14.2",id:"1142",level:3},{value:"1.14.1",id:"1141",level:3},{value:"1.14.0",id:"1140",level:3},{value:"1.13.1",id:"1131",level:3},{value:"1.13.0",id:"1130",level:3},{value:"1.12.1",id:"1121",level:3},{value:"1.12.0",id:"1120",level:3},{value:"1.11.0",id:"1110",level:3},{value:"1.10.1",id:"1101",level:3},{value:"1.10.0",id:"1100",level:3},{value:"1.9.0",id:"190",level:3},{value:"1.8.1",id:"181",level:3},{value:"1.7.3",id:"173",level:3},{value:"1.7.2",id:"172",level:3},{value:"1.7.1",id:"171",level:3},{value:"1.6.0",id:"160",level:3},{value:"1.5.0",id:"150",level:3},{value:"1.4.0",id:"140",level:3},{value:"1.3.1",id:"131",level:3},{value:"1.2.0",id:"120",level:3},{value:"1.1.0",id:"110",level:3},{value:"1.0.1",id:"101",level:3},{value:"1.0.0-beta5",id:"100-beta5",level:3},{value:"1.0.0-beta4",id:"100-beta4",level:3},{value:"1.0.0-beta1",id:"100-beta1",level:3}];function t(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,d.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.h3,{id:"1299",children:"1.29.9"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Improved playback reliability by recovering from decoder/renderer errors (6120, 6122)."}),"\n",(0,l.jsx)(n.li,{children:"Bug fixes."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1298",children:"1.29.8"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Bug Fixes","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed error 6101 that occurred while playing downloaded media due to NPE."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1297",children:"1.29.7"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Fixed WorkManager ",(0,l.jsx)(n.code,{children:"ClassNotFoundException"})," with R8 full mode."]}),"\n",(0,l.jsx)(n.li,{children:"Fixed Android 13 Parcelable NPE framework issue."}),"\n",(0,l.jsxs)(n.li,{children:["Improved ",(0,l.jsx)(n.code,{children:"PlaybackException"})," handling and related crash fixes."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.admonition,{title:"Known issue",type:"info",children:(0,l.jsxs)(n.p,{children:["Error 6101 may occur while playing downloaded media due to a ",(0,l.jsx)(n.code,{children:"java.lang.NullPointerException"}),". Upgrade to v1.29.8 or higher for the fix."]})}),"\n",(0,l.jsx)(n.h3,{id:"1296",children:"1.29.6"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added supp
1ort for concurrent playback blocking."}),"\n",(0,l.jsx)(n.li,{children:"Improved error handling."}),"\n",(0,l.jsx)(n.li,{children:"Bug fixes and performance improvements."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1295",children:"1.29.5"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added fix for player config option enableDoubleTapSkip."}),"\n",(0,l.jsx)(n.li,{children:"Fixed precaching with default cookie manager."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1294",children:"1.29.4"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Downgraded OkHttp3 from version v5.1.0 to v4.12.0."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"12815",children:"1.28.15"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Back-ported release of v1.29.3, built with AGP v8.5.1 and dependency versions aligned with SDK v1.28.14."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1293",children:"1.29.3"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"ProGuard issue has been fixed while releasing the app."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1292",children:"1.29.2"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Updated internal dependencies to resolve conflicts with ",(0,l.jsx)(n.code,{children:"firebase-firestore"}),"."]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1291",children:"1.29.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added support for 16KB page sizes for device compatibility."}),"\n",(0,l.jsx)(n.li,{children:"Security updates."}),"\n",(0,l.jsx)(n.li,{children:"Updated to latest media3 version 1.8.0."}),"\n",(0,l.jsx)(n.li,{children:"SDK now support Android version from minSdkVersion 24 to targetSdkVersion 36."}),"\n",(0,l.jsx)(n.li,{children:"Fixed caption search result issue."}),"\n",(0,l.jsx)(n.li,{children:"Bug fixes and performance improvements."}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:(0,l.jsx)(n.em,{children:"Note"})}),": Ensure that the build configuration for the project is updated to Android Gradle Plugin (AGP) version 8.9.1 or above, and Gradle version 8.13 or above."]}),"\n",(0,l.jsx)(n.h3,{id:"12813",children:"1.28.13"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Enhanced clipping UI."}),"\n",(0,l.jsx)(n.li,{children:"Made clear save offline setting configurable using custom player."}),"\n",(0,l.jsx)(n.li,{children:"Exception Handling."}),"\n",(0,l.jsx)(n.li,{children:"Bug Fix - Fixed chromecast button visible even when chromecast is false in custom player."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"12810",children:"1.28.10"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"The caption style now adapts to the user's selected caption preferences in the Accessibility settings."}
1),"\n",(0,l.jsxs)(n.li,{children:["Added support for changing the color of the clipping marker ",(0,l.jsx)(n.code,{children:"VdoInitParam.Builder().setClips(startTime, endTime, false, markerColor)"}),"."]}),"\n",(0,l.jsx)(n.li,{children:"Changed the default quality label to KBPS and MB."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1289",children:"1.28.9"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Changed media track quality labels with inbuilt UI."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1288",children:"1.28.8"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Security updates."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1287",children:"1.28.7"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Security updates."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1286",children:"1.28.6"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Added ",(0,l.jsx)(n.code,{children:"creationTimestamp"})," in ",(0,l.jsx)(n.code,{children:"DownloadStatus"})," which represents the start time of a download."]}),"\n",(0,l.jsxs)(n.li,{children:["Changed the implementation of ",(0,l.jsx)(n.code,{children:"PlayerView"})," used in scrubbing preview to resolve media3 vs exoplayer2 version issues."]}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed subtitles not displaying during audio-only playback."}),"\n",(0,l.jsx)(n.li,{children:"Fixed the loading icon remaining visible when returning from the home screen."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.admonition,{title:"Known issue fixed",type:"info",children:(0,l.jsx)(n.p,{children:"Error 5154, related to a key request failure during video playback with SDK version 1.28.4, has been fixed."})}),"\n",(0,l.jsx)(n.h3,{id:"1284",children:"1.28.4"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"New Features -"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Video Clipping"})," : ",(0,l.jsx)(n.code,{children:"VdoInitParams"})," class includes the new ",(0,l.jsx)(n.code,{children:"setClips()"})," method, allowing playback of a specific video segment. This feature is ideal for previews, demonstrations, or highlighting content, using ",(0,l.jsx)(n.code,{children:"startTime(in ms)"}),", ",(0,l.jsx)(n.code,{children:"endTime(in ms)"}),", and ",(0,l.jsx)(n.code,{children:"showClipping"})," parameters to define the segment."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Cross-Source Streaming"})," : Also ",(0,l.jsx)(n.code,{children:"VdoInitParams"})," class able to supports playing cross-source video URLs in addition to VdoCipher-based videos. The new ",(0,l.jsx)(n.code,{children:"configureMediaSource()"})," method enables playback of external DRM videos, non-DRM videos, local media files, and live streaming URLs."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Build & Version Changes"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Updated media3 version to 1.4.1 from 1.4.0."}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Breaking Changes -"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Added a new callback in ",(0,l.jsx)(n.code,{children:"VdoPlayer.PlaybackEventListener()"})," to expose ",(0,l.jsx)(n.code,{children:"onTimelineChanged"})," to users. This requires code changes for those using ",(0,l.jsx)(n.code,{children:"VdoPlayer.PlaybackEventListener()"}),"."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Bug Fixes -"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Improved handling of 61xx errors during playback"}),"\n",(0,l.jsx)(n.li,{children:"Enhanced handling of consecutive seeks for smoother playback"}),"\n",(0,l.jsx)(n.li,{children:"Backup rules can now be added by the user"}),"\n",(0,l.jsx)(n.li,{children:"Fixed bug related to null audio focus"}),"\n",(0,l.jsx)(n.li,{children:"BottomSheetDialog is set to be narrower and centered in landscape mode."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:(0,l.jsx)(n.em,{children:"Note"})}),": Ensure that the build configuration for the project is updated to Android Gradle Plugin (AGP) version 8.2.2 or above, and Gradle version 8.4 or above."]}),"\n",(0,l.jsx)(n.h3,{id:"1271",children:"1.27.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"New Features -"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Scrubbing Preview"}),": Introduced a new feature that allows users to preview video content while scrubbing through it. This feature provides a visual preview of different sections of the video, enhancing navigation and user experience."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Multi-language Support"}
1),": Added support for multiple languages, including player text elements and error messages."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:(0,l.jsx)(n.a,{href:"/docs/mobile/android/background-playback",children:"Background Playback"})}),": Improved user experience with seamless media playback across app navigation and multitasking scenarios. ",(0,l.jsx)(n.code,{children:"VdoPlaybackMode"})," options include:","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"DEFAULT"}),": Stops playback when the player screen is closed."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"CONTINUE_PLAYBACK_ON_BACK_PRESS"}),": Continues playback when the app is minimized, stops when fully closed."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"CONTINUE_PLAYBACK_ON_APP_EXIT"}),": Keeps playback running even after the app is closed."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Build Changes"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Update SDK to AGP to 8.2.2, Gradle to 8.4"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"API Changes -"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"VdoPlayerSetting.Builder()"}),": Introduced a new API to globally set ",(0,l.jsx)(n.code,{children:"VdoPlaybackMode"})," and ",(0,l.jsx)(n.code,{children:"maxBufferMs"})," on application start for consistent playback and download settings."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"VdoMediaMetadata"}),": Added a new field in ",(0,l.jsx)(n.code,{children:"VdoInitParams"})," to allow setting the media title, description, and poster."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Breaking Changes -"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Added a new callback in ",(0,l.jsx)(n.code,{children:"VdoPlayer.PlaybackEventListener()"})," to expose player options to users once prepared. This requires code changes for those using ",(0,l.jsx)(n.code,{children:"VdoPlayer.PlaybackEventListener()"}),"."]}),"\n",(0,l.jsxs)(n.li,{children:["Introduced a new callback in ",(0,l.jsx)(n.code,{children:"PlayerHost.InitializationListener()"})," to handle player view disconnection events when background playback starts."]}),"\n",(0,l.jsxs)(n.li,{children:["The ",(0,l.jsx)(n.code,{children:"setBufferingGoalMs()"})," method has been removed from ",(0,l.jsx)(n.code,{children:"VdoInitParams.Builder()"}),". You can now set this using the ",(0,l.jsx)(n.code,{children:"setMaxBufferMs()"})," method in ",(0,l.jsx)(n.code,{children:"VdoPlayerSetting.Builder()"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1269",children:"1.26.9"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Handling action bar with VdoPlayerUIFragment."}),"\n",(0,l.jsx)(n.li,{children:"Added a fix for 1250 during offline playback."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1268",children:"1.26.8"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Upgraded media3 version to 1.3.1."}),"\n",(0,l.jsxs)(n.li,{children:["Added a new error code ",(0,l.jsx)(n.code,{children:"5135"})," for invalid video parameters."]}),"\n",(0,l.jsx)(n.li,{children:"Removed unsupported tracks from Downloads."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Resolved NullPointerExceptions."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1267",children:"1.26.7"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Resolved NullPointerException on background threads."}),"\n",(0,l.jsx)(n.li,{children:"Potential reduction of 6122 errors."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1266",children:"1.26.6"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Security updates."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1265",children:"1.26.5"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Updated the implementation of FOREGROUND_SERVICE_DATA_SYNC, requiring permission to be provided on the app side."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed a crash occurring when a translucent primaryColor was set for the app theme."}),"\n",(0,l.jsx)(n.li,{children:"Fixed the caption search button visibility issue."}),"\n",(0,l.jsx)(n.li,{children:"Resolved the cast context leak."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:(0,l.jsx)(n.em,{children:"Note"})}),": Ensure android.permission.FOREGROUND_SERVICE_DATA_SYNC is declared in the manifest for download to work when target SDK ver
1sion is set as 34 and higher."]}),"\n",(0,l.jsx)(n.h3,{id:"1264",children:"1.26.4"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added Throwable for methods that can throw exceptions."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed RemoteServiceException coming while downloading videos."}),"\n",(0,l.jsx)(n.li,{children:"Fixed few NullPointer exceptions."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1263",children:"1.26.3"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Upgraded Play Integrity request from Classic to Standard."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Fixed ",(0,l.jsx)(n.code,{children:"SecurityException"})," with media downloads when ",(0,l.jsx)(n.code,{children:"targetSdkVersion"})," is set to 34."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1261",children:"1.26.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Exception handling when player not ready."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed NullPointerExceptions related to data initialization and background process."}),"\n",(0,l.jsx)(n.li,{children:"Added offline data synchronization."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1260",children:"1.26.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added support for token(alternative of otp)."}),"\n",(0,l.jsx)(n.li,{children:"Updated minSdkVersion to 21 and compileSdk to 34."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed caption search visible at multiple places issue."}),"\n",(0,l.jsx)(n.li,{children:"Fixed a NullPointerException and an ANR related to MediaDRM."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1251",children:"1.25.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added an API, DownloadStatus.isExpired(Context), to check if downloaded media has expired."}),"\n",(0,l.jsx)(n.li,{children:"Displaying error code 6187 when attempting to play an expired downloaded file."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed a NullPointerException related to onDrmSessionAcquired."}),"\n",(0,l.jsx)(n.li,{children:'Addressed an "Application Not Responding" (ANR) error.'}),"\n",(0,l.jsx)(n.li,{children:"Resolved a crash in the Bottom Sheet: occurred when pressing the home button while the Bottom Sheet was open."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1241",children:"1.24.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed auto resume not working properly for offline downloads."}),"\n",(0,l.jsx)(n.li,{children:"Fixed waiting text coming on player after video load."}),"\n",(0,l.jsx)(n.li,{children:"Fixed additional status bar space coming in Flutter."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1240",children:"1.24.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Removed support for safetynet. Use Play integrity instead."}),"\n",(0,l.jsx)(n.li,{children:"Upgraded minSdkVersion to 19."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed download failing due to download being requested in the background."}),"\n",(0,l.jsx)(n.li,{children:"Fixed NullPointerException related to onDrmSessionAcquired."}),"\n",(0,l.jsx)(n.li,{children:"Exception Handling"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1235",children:"1.23.5"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added play integrity support for media download."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1234",children:"1.23.4"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Bug Fix - Added PlatformSchedulerService for media3"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1233",children:"1.23.3"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Adding cross platform resume."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1232",children:"1.23.2"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Bug Fix - Conflict of media3 PlayerView with exoplayer."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1231",children:"1.23.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Bug Fix - Fixed the Exoplayer version mismatch error (Error 1203) coming while loading a player in release apk."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1230",children:"1.23.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Updated ",(0,l.jsx)(n.code,{children:"DownloadStatus"})," object to include displayable title and description provided while downloading a video."]}),"\n",(0,l.jsx)(n.li,{children:"Added default player controls in case an error occurs while loading controls"}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed an issue where the download query filter by status was not functioning correctly."}),"\n",(0,l.jsx)(n.li,{children:"Resolved the problem of native controls not being displayed for certain videos."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1225",children:"1.22.5"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Error message upon transitioning from idle to playing state has been eliminated."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1224",children:"1.22.4"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Migrated to AndroidX Media3 from ExoPlayer."}),"\n",(0,l.jsx)(n.li,{children:"Displaying video tracks according to device capabilities."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1223",children:"1.22.3"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Showing media title with download progress notification."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fix - ",(0,l.jsx)(n.code,{children:"NoSuchMethodError"})," for ",(0,l.jsx)(n.code,{children:"WindowInsets.getDisplayCutout()"}),"."]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1222",children:"1.22.2"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Removed usage of non-sdk API onApplyWindowInsets."}),"\n",(0,l.jsx)(n.li,{children:"Handling NullPointerException with DlServiceSpec.fromJSONString()."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1220",children:"1.22.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Added option to get description from ",(0,l.jsx)(n.code,{children:"DownloadStatus"}),"."]}),"\n",(0,l.jsx)(n.li,{children:"Resolved the problem where the player UI control's transparent background was not visible."}),"\n",(0,l.jsx)(n.li,{children:"Resolved the problem where the video was started from beginning after an error occurs."}),"\n",(0,l.jsx)(n.li,{children:"Incorporated 5114 as retryable error code."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1212",children:"1.21.2"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Backport version with exoplayer dependency v2.19.1"}),"\n",(0,l.jsx)(n.li,{children:"Latest changes and fixes picked from version 1.22.5 excluding Media3."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1211",children:"1.21.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Instead of invoking pack-up, we now pause the player to avoid reloading of the player."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed download notification causing crash when started in background."}),"\n",(0,l.jsx)(n.li,{children:"Fixed NullPointer exception when updating speed"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1210",children:"1.21.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Added supp
1ort for ",(0,l.jsx)(n.code,{children:"windowLayoutInDisplayCutoutMode"})," with inbuilt player UI."]}),"\n",(0,l.jsx)(n.li,{children:"Improved feedback of double tap to skip forward and backward."}),"\n",(0,l.jsx)(n.li,{children:"Implemented fullscreen behavior with video in portrait and landscape mode."}),"\n",(0,l.jsxs)(n.li,{children:["Fullscreen Changes for Player UI:","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed auto rotate lock while going into fullscreen mode."}),"\n",(0,l.jsxs)(n.li,{children:["Implemented fullscreen behavior based on aspect ratio:","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Vertical videos will go fullscreen in portrait mode."}),"\n",(0,l.jsx)(n.li,{children:"Horizontal videos will go fullscreen in landscape mode."}),"\n",(0,l.jsxs)(n.li,{children:["Added APIs ",(0,l.jsx)(n.code,{children:"enterFullScreen"})," and ",(0,l.jsx)(n.code,{children:"exitFullScreen"})," to enter or exit fullscreen in ",(0,l.jsx)(n.code,{children:"VdoPlayerUIFragment"}),"."]}),"\n",(0,l.jsxs)(n.li,{children:["Added ",(0,l.jsx)(n.code,{children:"FullScreenActionListener"})," to monitor when video enters or exits fullscreen. The listener can be set using the method ",(0,l.jsx)(n.code,{children:"setFullscreenActionListener"})," of ",(0,l.jsx)(n.code,{children:"VdoPlayerUIFragment"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Added API to expose ",(0,l.jsx)(n.code,{children:"playerOption"}),"."]}),"\n",(0,l.jsx)(n.li,{children:"Added support for handling fullscreen for custom back press implementation"}),"\n",(0,l.jsxs)(n.li,{children:["The import path for ",(0,l.jsx)(n.code,{children:"VdoParamsGenerator"})," has been modified."]}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.strong,{children:(0,l.jsx)(n.em,{children:"Note"})}),": ",(0,l.jsxs)(n.em,{children:["If the ",(0,l.jsx)(n.code,{children:"enterFullScreen"})," or ",(0,l.jsx)(n.code,{children:"exitFullScreen"})," method is called from ",(0,l.jsx)(n.code,{children:"onConfigurationChanged"}),", the video goes into fullscreen but the orientation needs to be handled manually."]})]}),"\n",(0,l.jsx)(n.h3,{id:"1197",children:"1.19.7"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added support for play integrity."}),"\n",(0,l.jsx)(n.li,{children:"Fixed concurrency issue with offline download."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1196",children:"1.19.6"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added support to conserve player config across session."}),"\n",(0,l.jsx)(n.li,{children:"Reduce watermark text size proportionately for a smaller screen."}),"\n",(0,l.jsxs)(n.li,{children:["Bug Fixes -","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Releasing media session when player stops."}),"\n",(0,l.jsx)(n.li,{children:'Showing "Tap to retry" only when error message is retry-able with the built-in player ui.'}
1),"\n",(0,l.jsx)(n.li,{children:"Going to PiP closes the bottom sheet and dialogs with the built-in player ui."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1194",children:"1.19.4"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Upgraded exoplayer dependency to 2.18.5"}),"\n",(0,l.jsx)(n.li,{children:"Added view overlay for fullscreen and picture in picture."}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1192",children:"1.19.2"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Bug Fix - Incorrect ",(0,l.jsx)(n.code,{children:"MediaInfo.duration"})," with ",(0,l.jsx)(n.code,{children:"DownloadStatus"}),"."]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1191",children:"1.19.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Changed exoplayer data source configurations."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1190",children:"1.19.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"VdoPlayerUIFragment now has an option to disable default controls."}),"\n",(0,l.jsx)(n.li,{children:"Pinch to zoom is now supported with VdoPlayerUIFragment default controls."}),"\n",(0,l.jsx)(n.li,{children:"The player resize mode can now be modified."}),"\n",(0,l.jsx)(n.li,{children:"Added support for downloading media without audio."}),"\n",(0,l.jsx)(n.li,{children:"Upgraded exoplayer dependency to 2.18.2"}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1182",children:"1.18.2"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Minor Improvements"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1181",children:"1.18.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added support for Chromecast."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1170",children:"1.17.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added support for picture in picture mode."}),"\n",(0,l.jsx)(n.li,{children:"Added callback for persistent OTP with save offline."}),"\n",(0,l.jsx)(n.li,{children:"Updated CompileSdkVersion from API level 31 to 33."}),"\n",(0,l.jsx)(n.li,{children:"Updated TargetSdkVersion from API level 30 to 32."}),"\n",(0,l.jsx)(n.li,{children:"Vdocipher cast module moved into core module. Cast module dependency no longer needs to be specified separately."}),"\n",(0,l.jsx)(n.li,{children:"Removed jcenter due to deprecation."}),"\n",(0,l.jsx)(n.li,{children:"Fixed memory leaks."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1160",children:"1.16.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Fixed audio issues with offline playback."}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Changed signature of ",(0,l.jsx)(n.code,{children:"OptionsDownloader"}),". Context is now required for the instantiation of ",(0,l.jsx)(n.code,{children:"OptionDownloader"}),"."]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-java",children:" OptionsDownloader optionsDownloader = new OptionsDownloader(context); //Pass context here.\n"})}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Fixed ",(0,l.jsx)(n.code,{children:"VdoDlService"})," memory leak."]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1151",children:"1.15.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Code optimisation and refactoring"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1150",children:"1.15.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsx)(n.p,{children:"Bug fixes related to HLS playback"}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["First call to ",(0,l.jsx)(n.code,{children:"onBackPressed()"})," is handled by ",(0,l.jsx)(n.code,{children:"VdoPlayerUIFragment"})," to manage player orientation and state then subsequent calls are passed to attached activity."]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Option to disable initital handling of ",(0,l.jsx)(n.code,{children:"onBackPressed()"})," in ",(0,l.jsx)(n.code,{children:"VdoPlayerUIFragment"})," by setting ",(0,l.jsx)(n.code,{children:'app:handleBackPress="false"'}),". This can be used to handle all back press action in activity."]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-java",children:'<fragment\n     android:name="
1com.vdocipher.aegis.ui.view.VdoPlayerUIFragment"\n     ....\n     app:handleBackPress="false" //by default it\'s true\n />\n'})}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1142",children:"1.14.2"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Added support for TV applications in ",(0,l.jsx)(n.code,{children:"VdoPlayerUIFragment"})]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1141",children:"1.14.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed issue with caption selection"}),"\n",(0,l.jsxs)(n.li,{children:["Increased gesture area for double tap in ",(0,l.jsx)(n.code,{children:"VdoPlayerUIFragment"})]}),"\n",(0,l.jsx)(n.li,{children:"Added migrations for database changes across SDK"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1140",children:"1.14.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Player UI enhancements"}),"\n",(0,l.jsxs)(n.li,{children:["Fixed issue with clear storage option in ",(0,l.jsx)(n.code,{children:"VdoPlayerUIFragment"})]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1131",children:"1.13.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Player UI enhancements"}),"\n",(0,l.jsx)(n.li,{children:"Multiple download issue fixed"}),"\n",(0,l.jsx)(n.li,{children:"Upgraded exoplayer dependency to 2.18.1"}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1130",children:"1.13.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["New ",(0,l.jsx)(n.code,{children:"VdoPlayerUIFragment"})," with built-in player controls","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Option to enable or disable player controls"}),"\n",(0,l.jsx)(n.li,{children:"Media can be saved and streamed locally"}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1121",children:"1.12.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Adaptive playback bug fix"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1120",children:"1.12.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Upgraded exoplayer dependency to 2.18.0"}),"\n",(0,l.jsx)(n.li,{children:"Added caption support for offline playback"}),"\n",(0,l.jsx)(n.li,{children:"Added option in VdoInitParams to resume video from last playback position"}),"\n",(0,l.jsx)(n.li,{children:"Added callback to provide an event to resume from saved seek position"}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1110",children:"1.11.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Upgraded exoplayer dependency to 2.17.1"}),"\n",(0,l.jsxs)(n.li,{children:["Implemented offline downloads using exoplayer","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added feature to download content in external storage"}),"\n",(0,l.jsxs)(n.li,{children:["Use ",(0,l.jsx)(n.code,{children:"VdoDownloadManager.getInstance(@NonNull Context context, @Nullable String downloadLocation)"})," with ",(0,l.jsx)(n.code,{children:"DownloadRequest.Builder(@NonNull DownloadSelections selections)"})," and ",(0,l.jsx)(n.code,{children:"vdoDownloadManager.enqueueV2(@NonNull DownloadRequest downloadRequest)"})," to use new download implementation"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.li,{children:"Provided option for customising download notification helper"}),"\n",(0,l.jsx)(n.li,{children:"Added feature to search using selected caption"}),"\n",(0,l.jsx)(n.li,{children:"Added feature to set default caption"}),"\n",(0,l.jsx)(n.li,{children:"Enhanced watermark feature"}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n"]}),"\n",(0,l.jsx)(n.p,{children:"Note - - If video download is paused and download location is changed, the half downloaded content needs to be removed manually from device storage and download should be restarted. - In case of re-downloading a video, existing file is removed and downloaded again with new selected tracks"}),"\n",(0,l.jsx)(n.h3,{id:"1101",children:"1.10.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Fix ",(0,l.jsx)(n.code,{children:"Track"})," class ",(0,l.jsx)(n.code,{children:"equals()"})," and ",(0,l.jsx)(n.code,{children:"hashCode()"})]}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"1100",children:"1.10.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Update minSdkVersion to 18. Apps depending on this version will need to set a minSdkVersion of 18 or above"}),"\n",(0,l.jsx)(n.li,{children:"Fix PlaybackEventListener#onBufferUpdate callback not being called"}),"\n",(0,l.jsx)(n.li,{children:"Move VdoInitParams, PlayerHost and related classes to top level classes"}),"\n",(0,l.jsxs)(n.li,{children:["Class name changes are:","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"VdoPlayer.PlayerHost"})," --\x3e ",(0,l.jsx)(n.code,{children:"PlayerHost"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"VdoPlayer.InitializationListener"})," --\x3e ",(0,l.jsx)(n.code,{children:"PlayerHost.InitializationListener"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"VdoPlayer.PlayerHostNotReadyException"})," --\x3e ",(0,l.jsx)(n.code,{children:"PlayerHost.PlayerHostNotReadyException"})]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"VdoPlayer.VdoInitParams"})," --\x3e ",(0,l.jsx)(n.code,{children:"VdoInitParams"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"190",children:"1.9.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Upgrade exoplayer dependency to 2.14.2"}),"\n",(0,l.jsx)(n.li,{children:"Restore track selections on player restore"}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"181",children:"1.8.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Option to block devices with ABD debugging on"}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"173",children:"1.7.3"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Upgrade exoplayer dependency to 2.12.3"}),"\n",(0,l.jsx)(n.li,{children:"Regular security and bug fix updates"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"172",children:"1.7.2"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Upgrade exoplayer dependency to 2.11.8"}),"\n",(0,l.jsx)(n.li,{children:"Add api to get device's analytics ID on vdocipher logs for error handling"}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"171",children:"1.7.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Add option in VdoInitParams to turn off playback analytics collection."}),"\n",(0,l.jsx)(n.li,{children:"Disable auto backup of downloaded offline video index."}),"\n",(0,l.jsx)(n.li,{children:"Add error code for the case when a requested offline video is not found on the device."}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"160",children:"1.6.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"SafetyNet Implementation for security enhancements"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"150",children:"1.5.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Offline Download Video Watermark addition"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"140",children:"1.4.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n",(0,l.jsx)(n.li,{children:"Added Cast plugin dependencies"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"131",children:"1.3.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Further classify generic errors so they are easier to debug."}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"120",children:"1.2.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Implemented Watermark Skip Behaviour"}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"110",children:"1.1.0"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Some generic error codes have been replaced with more informative specific ones."}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"101",children:"1.0.1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"New sdk available for Google Cast support; integration instructions and demo provided in sample app on github"}
1),"\n",(0,l.jsx)(n.li,{children:"Added support to specify resume time and autoplay behavior in VdoInitParams"}),"\n",(0,l.jsx)(n.li,{children:"Added support-library based player fragment"}),"\n",(0,l.jsx)(n.li,{children:"Improved offline playback compatibility"}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"100-beta5",children:"1.0.0-beta5"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Fixed delayed query results for offline downloads."}),"\n",(0,l.jsx)(n.li,{children:"Fixed unreliable deletion for offline downloads."}),"\n",(0,l.jsx)(n.li,{children:"Updated to new gradle dependency configurations."}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"100-beta4",children:"1.0.0-beta4"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added api to specify start and end time for playback in VdoInitParams."}),"\n",(0,l.jsx)(n.li,{children:"Additional error information, when applicable, is available in DownloadStatus#reasonDescription, which can be parsed as a json to obtain details."}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes."}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"100-beta1",children:"1.0.0-beta1"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Added api to easily set and query adaptive mode."}),"\n",(0,l.jsx)(n.li,{children:"Finer permission denial error codes and messages."}),"\n",(0,l.jsx)(n.li,{children:"Bug Fixes."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(t,{...e})}):t(e)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.