{"owner":"yuliskov","repo":"SmartTube","hasSkills":true,"totalSkillsCount":15,"totalTokensCount":7222,"categories":["plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["exoplayer-amzn-2.10.6/extensions/flac/README.md","exoplayer-amzn-2.10.6/extensions/gvr/README.md","exoplayer-amzn-2.10.6/extensions/ffmpeg/README.md","exoplayer-amzn-2.10.6/extensions/cast/README.md","exoplayer-amzn-2.10.6/extensions/leanback/README.md","exoplayer-amzn-2.10.6/extensions/jobdispatcher/README.md","exoplayer-amzn-2.10.6/extensions/mediasession/README.md","exoplayer-amzn-2.10.6/extensions/ima/README.md","exoplayer-amzn-2.10.6/extensions/okhttp/README.md","exoplayer-amzn-2.10.6/extensions/README.md","exoplayer-amzn-2.10.6/extensions/cronet/README.md","exoplayer-amzn-2.10.6/extensions/opus/README.md","exoplayer-amzn-2.10.6/extensions/rtmp/README.md","exoplayer-amzn-2.10.6/extensions/vp9/README.md","exoplayer-amzn-2.10.6/extensions/workmanager/README.md"],"skills":{"exoplayer-amzn-2.10.6/extensions/flac/README.md":"# ExoPlayer Flac extension #\n\nThe Flac extension provides `FlacExtractor` and `LibflacAudioRenderer`, which\nuse libFLAC (the Flac decoding library) to extract and decode FLAC audio.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nEXOPLAYER_ROOT=\"$(pwd)\"\nFLAC_EXT_PATH=\"${EXOPLAYER_ROOT}/extensions/flac/src/main\"\n```\n\n* Download the [Android NDK][] (version <= 17c) and set its location in an\n  environment variable:\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Download and extract flac-1.3.2 as \"${FLAC_EXT_PATH}/jni/flac\" folder:\n\n```\ncd \"${FLAC_EXT_PATH}/jni\" && \\\ncurl https://ftp.osuosl.org/pub/xiph/releases/flac/flac-1.3.2.tar.xz | tar xJ && \\\nmv flac-1.3.2 flac\n```\n\n* Build the JNI native libraries from the command line:\n\n```\ncd \"${FLAC_EXT_PATH}\"/jni && \\\n${NDK_PATH}/ndk-build APP_ABI=all -j4\n```\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use the extractor and/or\nrenderer.\n\n### Using `FlacExtractor` ###\n\n`FlacExtractor` is used via `ExtractorMediaSource`. If you're using\n`DefaultExtractorsFactory`, `FlacExtractor` will automatically be used to read\n`.flac` files. If you're not using `DefaultExtractorsFactory`, return a\n`FlacExtractor` from your `ExtractorsFactory.createExtractors` implementation.\n\n### Using `LibflacAudioRenderer` ###\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `LibflacAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `LibflacAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add a `LibflacAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return a\n  `LibflacAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass a `LibflacAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `LibflacAudioRenderer` to the\nplayer, then implement your own logic to use the renderer for a given track.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.flac.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/gvr/README.md":"# ExoPlayer GVR extension #\n\nThe GVR extension wraps the [Google VR SDK for Android][]. It provides a\nGvrAudioProcessor, which uses [GvrAudioSurround][] to provide binaural rendering\nof surround sound and ambisonic soundfields.\n\n[Google VR SDK for Android]: https://developers.google.com/vr/android/\n[GvrAudioSurround]: https://developers.google.com/vr/android/reference/com/google/vr/sdk/audio/GvrAudioSurround\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-gvr:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n## Using the extension ##\n\n* If using `DefaultRenderersFactory`, override\n  `DefaultRenderersFactory.buildAudioProcessors` to return a\n  `GvrAudioProcessor`.\n* If constructing renderers directly, pass a `GvrAudioProcessor` to\n  `MediaCodecAudioRenderer`'s constructor.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.gvr.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/ffmpeg/README.md":"# ExoPlayer FFmpeg extension #\n\nThe FFmpeg extension provides `FfmpegAudioRenderer`, which uses FFmpeg for\ndecoding and can render audio encoded in a variety of formats.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][]. The extension is not provided via JCenter (see [#2781][]\nfor more information).\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nFFMPEG_EXT_PATH=\"$(pwd)/extensions/ffmpeg/src/main/jni\"\n```\n\n* Download the [Android NDK][] and set its location in an environment variable.\n  Only versions up to NDK 15c are supported currently.\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Set up host platform (\"darwin-x86_64\" for Mac OS X):\n\n```\nHOST_PLATFORM=\"linux-x86_64\"\n```\n\n* Fetch and build FFmpeg. The configuration flags determine which formats will\n  be supported. See the [Supported formats][] page for more details of the\n  available flags.\n\nFor example, to fetch and build FFmpeg release 4.0 for armeabi-v7a,\n  arm64-v8a and x86 on Linux x86_64:\n\n```\nCOMMON_OPTIONS=\"\\\n    --target-os=android \\\n    --disable-static \\\n    --enable-shared \\\n    --disable-doc \\\n    --disable-programs \\\n    --disable-everything \\\n    --disable-avdevice \\\n    --disable-avformat \\\n    --disable-swscale \\\n    --disable-postproc \\\n    --disable-avfilter \\\n    --disable-symver \\\n    --disable-swresample \\\n    --enable-avresample \\\n    --enable-decoder=vorbis \\\n    --enable-decoder=opus \\\n    --enable-decoder=flac \\\n    \" && \\\ncd \"${FFMPEG_EXT_PATH}\" && \\\n(git -C ffmpeg pull || git clone git://source.ffmpeg.org/ffmpeg ffmpeg) && \\\ncd ffmpeg && git checkout release/4.0 && \\\n./configure \\\n    --libdir=android-libs/armeabi-v7a \\\n    --arch=arm \\\n    --cpu=armv7-a \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/arm-linux-androideabi-4.9/prebuilt/${HOST_PLATFORM}/bin/arm-linux-androideabi-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-9/arch-arm/\" \\\n    --extra-cflags=\"-march=armv7-a -mfloat-abi=softfp\" \\\n    --extra-ldflags=\"-Wl,--fix-cortex-a8\" \\\n    --extra-ldexeflags=-pie \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean && ./configure \\\n    --libdir=android-libs/arm64-v8a \\\n    --arch=aarch64 \\\n    --cpu=armv8-a \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/aarch64-linux-android-4.9/prebuilt/${HOST_PLATFORM}/bin/aarch64-linux-android-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-21/arch-arm64/\" \\\n    --extra-ldexeflags=-pie \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean && ./configure \\\n    --libdir=android-libs/x86 \\\n    --arch=x86 \\\n    --cpu=i686 \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/x86-4.9/prebuilt/${HOST_PLATFORM}/bin/i686-linux-android-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-9/arch-x86/\" \\\n    --extra-ldexeflags=-pie \\\n    --disable-asm \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean\n```\n\n* Build the JNI native libraries, setting `APP_ABI` to include the architectures\n  built in the previous step. For example:\n\n```\ncd \"${FFMPEG_EXT_PATH}\" && \\\n${NDK_PATH}/ndk-build APP_ABI=\"armeabi-v7a arm64-v8a x86\" -j4\n```\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use `FfmpegAudioRenderer`.\nHow you do this depends on which player API you're using:\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `FfmpegAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `FfmpegAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add an `FfmpegAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return an\n  `FfmpegAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass an `FfmpegAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `FfmpegAudioRenderer` to the player,\nthen implement your own logic to use the renderer for a given track.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n[#2781]: https://github.com/google/ExoPlayer/issues/2781\n[Supported formats]: https://exoplayer.dev/supported-formats.html#ffmpeg-extension\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.ffmpeg.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/cast/README.md":"# ExoPlayer Cast extension #\n\n## Description ##\n\nThe cast extension is a [Player][] implementation that controls playback on a\nCast receiver app.\n\n[Player]: https://exoplayer.dev/doc/reference/index.html?com/google/android/exoplayer2/Player.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-cast:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nCreate a `CastPlayer` and use it to integrate Cast into your app using\nExoPlayer's common `Player` interface.\n","exoplayer-amzn-2.10.6/extensions/leanback/README.md":"# ExoPlayer Leanback extension #\n\nThis [Leanback][] Extension provides a [PlayerAdapter][] implementation for\nExoPlayer.\n\n[PlayerAdapter]: https://developer.android.com/reference/android/support/v17/leanback/media/PlayerAdapter.html\n[Leanback]: https://developer.android.com/reference/android/support/v17/leanback/package-summary.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-leanback:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.leanback.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/jobdispatcher/README.md":"# ExoPlayer Firebase JobDispatcher extension #\n\n**DEPRECATED - Please use [WorkManager extension][] or [PlatformScheduler][] instead.**\n\nThis extension provides a Scheduler implementation which uses [Firebase JobDispatcher][].\n\n[WorkManager extension]: https://github.com/google/ExoPlayer/blob/release-v2/extensions/workmanager/README.md\n[PlatformScheduler]: https://github.com/google/ExoPlayer/blob/release-v2/library/core/src/main/java/com/google/android/exoplayer2/scheduler/PlatformScheduler.java\n[Firebase JobDispatcher]: https://github.com/firebase/firebase-jobdispatcher-android\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-jobdispatcher:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n","exoplayer-amzn-2.10.6/extensions/mediasession/README.md":"# ExoPlayer MediaSession extension #\n\nThe MediaSession extension mediates between a Player (or ExoPlayer) instance\nand a [MediaSession][]. It automatically retrieves and implements playback\nactions and syncs the player state with the state of the media session. The\nbehaviour can be extended to support other playback and custom actions.\n\n[MediaSession]: https://developer.android.com/reference/android/support/v4/media/session/MediaSessionCompat.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-mediasession:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching\n  `com.google.android.exoplayer2.ext.mediasession.*` belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/ima/README.md":"# ExoPlayer IMA extension #\n\nThe IMA extension is an [AdsLoader][] implementation wrapping the\n[Interactive Media Ads SDK for Android][IMA]. You can use it to insert ads\nalongside content.\n\n[IMA]: https://developers.google.com/interactive-media-ads/docs/sdks/android/\n[AdsLoader]: https://exoplayer.dev/doc/reference/index.html?com/google/android/exoplayer2/source/ads/AdsLoader.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-ima:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nTo play ads alongside a single-window content `MediaSource`, prepare the player\nwith an `AdsMediaSource` constructed using an `ImaAdsLoader`, the content\n`MediaSource` and an overlay `ViewGroup` on top of the player. Pass an ad tag\nURI from your ad campaign when creating the `ImaAdsLoader`. The IMA\ndocumentation includes some [sample ad tags][] for testing. Note that the IMA\nextension only supports players which are accessed on the application's main\nthread.\n\nResuming the player after entering the background requires some special handling\nwhen playing ads. The player and its media source are released on entering the\nbackground, and are recreated when the player returns to the foreground. When\nplaying ads it is necessary to persist ad playback state while in the background\nby keeping a reference to the `ImaAdsLoader`. Reuse it when resuming playback of\nthe same content/ads by passing it in when constructing the new\n`AdsMediaSource`. It is also important to persist the player position when\nentering the background by storing the value of `player.getContentPosition()`.\nOn returning to the foreground, seek to that position before preparing the new\nplayer instance. Finally, it is important to call `ImaAdsLoader.release()` when\nplayback of the content/ads has finished and will not be resumed.\n\nYou can try the IMA extension in the ExoPlayer demo app. To do this you must\nselect and build one of the `withExtensions` build variants of the demo app in\nAndroid Studio. You can find IMA test content in the \"IMA sample ad tags\"\nsection of the app. The demo app's `PlayerActivity` also shows how to persist\nthe `ImaAdsLoader` instance and the player position when backgrounded during ad\nplayback.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[sample ad tags]: https://developers.google.com/interactive-media-ads/docs/sdks/android/tags\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.ima.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/okhttp/README.md":"# ExoPlayer OkHttp extension #\n\nThe OkHttp extension is an [HttpDataSource][] implementation using Square's\n[OkHttp][].\n\n[HttpDataSource]: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/upstream/HttpDataSource.html\n[OkHttp]: https://square.github.io/okhttp/\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension requires depending on OkHttp, which is\nlicensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-okhttp:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nExoPlayer requests data through `DataSource` instances. These instances are\neither instantiated and injected from application code, or obtained from\ninstances of `DataSource.Factory` that are instantiated and injected from\napplication code.\n\nIf your application only needs to play http(s) content, using the OkHttp\nextension is as simple as updating any `DataSource`s and `DataSource.Factory`\ninstantiations in your application code to use `OkHttpDataSource` and\n`OkHttpDataSourceFactory` respectively. If your application also needs to play\nnon-http(s) content such as local files, use\n```\nnew DefaultDataSource(\n    ...\n    new OkHttpDataSource(...) /* baseDataSource argument */);\n```\nand\n```\nnew DefaultDataSourceFactory(\n    ...\n    new OkHttpDataSourceFactory(...) /* baseDataSourceFactory argument */);\n```\nrespectively.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.okhttp.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/README.md":"# ExoPlayer extensions #\n\nExoPlayer extensions are modules that depend on external libraries to provide\nadditional functionality. Browse the individual extensions and their READMEs to\nlearn more.\n","exoplayer-amzn-2.10.6/extensions/cronet/README.md":"# ExoPlayer Cronet extension #\n\nThe Cronet extension is an [HttpDataSource][] implementation using [Cronet][].\n\n[HttpDataSource]: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/upstream/HttpDataSource.html\n[Cronet]: https://chromium.googlesource.com/chromium/src/+/master/components/cronet?autodive=0%2F%2F\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-cronet:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nExoPlayer requests data through `DataSource` instances. These instances are\neither instantiated and injected from application code, or obtained from\ninstances of `DataSource.Factory` that are instantiated and injected from\napplication code.\n\nIf your application only needs to play http(s) content, using the Cronet\nextension is as simple as updating any `DataSource`s and `DataSource.Factory`\ninstantiations in your application code to use `CronetDataSource` and\n`CronetDataSourceFactory` respectively. If your application also needs to play\nnon-http(s) content such as local files, use\n```\nnew DefaultDataSource(\n    ...\n    new CronetDataSource(...) /* baseDataSource argument */);\n```\nand\n```\nnew DefaultDataSourceFactory(\n    ...\n    new CronetDataSourceFactory(...) /* baseDataSourceFactory argument */);\n```\nrespectively.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.cronet.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/opus/README.md":"# ExoPlayer Opus extension #\n\nThe Opus extension provides `LibopusAudioRenderer`, which uses libopus (the Opus\ndecoding library) to decode Opus audio.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nEXOPLAYER_ROOT=\"$(pwd)\"\nOPUS_EXT_PATH=\"${EXOPLAYER_ROOT}/extensions/opus/src/main\"\n```\n\n* Download the [Android NDK][] and set its location in an environment variable:\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Fetch libopus:\n\n```\ncd \"${OPUS_EXT_PATH}/jni\" && \\\ngit clone https://git.xiph.org/opus.git libopus\n```\n\n* Run the script to convert arm assembly to NDK compatible format:\n\n```\ncd ${OPUS_EXT_PATH}/jni && ./convert_android_asm.sh\n```\n\n* Build the JNI native libraries from the command line:\n\n```\ncd \"${OPUS_EXT_PATH}\"/jni && \\\n${NDK_PATH}/ndk-build APP_ABI=all -j4\n```\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n\n## Notes ##\n\n* Every time there is a change to the libopus checkout:\n  * Arm assembly should be converted by running `convert_android_asm.sh`\n  * Clean and re-build the project.\n* If you want to use your own version of libopus, place it in\n  `${OPUS_EXT_PATH}/jni/libopus`.\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use `LibopusAudioRenderer`.\nHow you do this depends on which player API you're using:\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `LibopusAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `LibopusAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add a `LibopusAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return a\n  `LibopusAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass a `LibopusAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `LibopusAudioRenderer` to the\nplayer, then implement your own logic to use the renderer for a given track.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.opus.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/rtmp/README.md":"# rtmp Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/rtmp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/rtmp/README.md)","exoplayer-amzn-2.10.6/extensions/vp9/README.md":"# vp9 Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/vp9/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/vp9/README.md)","exoplayer-amzn-2.10.6/extensions/workmanager/README.md":"# workmanager Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/workmanager/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/workmanager/README.md)"},"files":{"exoplayer-amzn-2.10.6/extensions/flac/README.md":"# ExoPlayer Flac extension #\n\nThe Flac extension provides `FlacExtractor` and `LibflacAudioRenderer`, which\nuse libFLAC (the Flac decoding library) to extract and decode FLAC audio.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nEXOPLAYER_ROOT=\"$(pwd)\"\nFLAC_EXT_PATH=\"${EXOPLAYER_ROOT}/extensions/flac/src/main\"\n```\n\n* Download the [Android NDK][] (version <= 17c) and set its location in an\n  environment variable:\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Download and extract flac-1.3.2 as \"${FLAC_EXT_PATH}/jni/flac\" folder:\n\n```\ncd \"${FLAC_EXT_PATH}/jni\" && \\\ncurl https://ftp.osuosl.org/pub/xiph/releases/flac/flac-1.3.2.tar.xz | tar xJ && \\\nmv flac-1.3.2 flac\n```\n\n* Build the JNI native libraries from the command line:\n\n```\ncd \"${FLAC_EXT_PATH}\"/jni && \\\n${NDK_PATH}/ndk-build APP_ABI=all -j4\n```\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use the extractor and/or\nrenderer.\n\n### Using `FlacExtractor` ###\n\n`FlacExtractor` is used via `ExtractorMediaSource`. If you're using\n`DefaultExtractorsFactory`, `FlacExtractor` will automatically be used to read\n`.flac` files. If you're not using `DefaultExtractorsFactory`, return a\n`FlacExtractor` from your `ExtractorsFactory.createExtractors` implementation.\n\n### Using `LibflacAudioRenderer` ###\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `LibflacAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `LibflacAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add a `LibflacAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return a\n  `LibflacAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass a `LibflacAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `LibflacAudioRenderer` to the\nplayer, then implement your own logic to use the renderer for a given track.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.flac.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/gvr/README.md":"# ExoPlayer GVR extension #\n\nThe GVR extension wraps the [Google VR SDK for Android][]. It provides a\nGvrAudioProcessor, which uses [GvrAudioSurround][] to provide binaural rendering\nof surround sound and ambisonic soundfields.\n\n[Google VR SDK for Android]: https://developers.google.com/vr/android/\n[GvrAudioSurround]: https://developers.google.com/vr/android/reference/com/google/vr/sdk/audio/GvrAudioSurround\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-gvr:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n## Using the extension ##\n\n* If using `DefaultRenderersFactory`, override\n  `DefaultRenderersFactory.buildAudioProcessors` to return a\n  `GvrAudioProcessor`.\n* If constructing renderers directly, pass a `GvrAudioProcessor` to\n  `MediaCodecAudioRenderer`'s constructor.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.gvr.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/ffmpeg/README.md":"# ExoPlayer FFmpeg extension #\n\nThe FFmpeg extension provides `FfmpegAudioRenderer`, which uses FFmpeg for\ndecoding and can render audio encoded in a variety of formats.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][]. The extension is not provided via JCenter (see [#2781][]\nfor more information).\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nFFMPEG_EXT_PATH=\"$(pwd)/extensions/ffmpeg/src/main/jni\"\n```\n\n* Download the [Android NDK][] and set its location in an environment variable.\n  Only versions up to NDK 15c are supported currently.\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Set up host platform (\"darwin-x86_64\" for Mac OS X):\n\n```\nHOST_PLATFORM=\"linux-x86_64\"\n```\n\n* Fetch and build FFmpeg. The configuration flags determine which formats will\n  be supported. See the [Supported formats][] page for more details of the\n  available flags.\n\nFor example, to fetch and build FFmpeg release 4.0 for armeabi-v7a,\n  arm64-v8a and x86 on Linux x86_64:\n\n```\nCOMMON_OPTIONS=\"\\\n    --target-os=android \\\n    --disable-static \\\n    --enable-shared \\\n    --disable-doc \\\n    --disable-programs \\\n    --disable-everything \\\n    --disable-avdevice \\\n    --disable-avformat \\\n    --disable-swscale \\\n    --disable-postproc \\\n    --disable-avfilter \\\n    --disable-symver \\\n    --disable-swresample \\\n    --enable-avresample \\\n    --enable-decoder=vorbis \\\n    --enable-decoder=opus \\\n    --enable-decoder=flac \\\n    \" && \\\ncd \"${FFMPEG_EXT_PATH}\" && \\\n(git -C ffmpeg pull || git clone git://source.ffmpeg.org/ffmpeg ffmpeg) && \\\ncd ffmpeg && git checkout release/4.0 && \\\n./configure \\\n    --libdir=android-libs/armeabi-v7a \\\n    --arch=arm \\\n    --cpu=armv7-a \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/arm-linux-androideabi-4.9/prebuilt/${HOST_PLATFORM}/bin/arm-linux-androideabi-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-9/arch-arm/\" \\\n    --extra-cflags=\"-march=armv7-a -mfloat-abi=softfp\" \\\n    --extra-ldflags=\"-Wl,--fix-cortex-a8\" \\\n    --extra-ldexeflags=-pie \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean && ./configure \\\n    --libdir=android-libs/arm64-v8a \\\n    --arch=aarch64 \\\n    --cpu=armv8-a \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/aarch64-linux-android-4.9/prebuilt/${HOST_PLATFORM}/bin/aarch64-linux-android-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-21/arch-arm64/\" \\\n    --extra-ldexeflags=-pie \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean && ./configure \\\n    --libdir=android-libs/x86 \\\n    --arch=x86 \\\n    --cpu=i686 \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/x86-4.9/prebuilt/${HOST_PLATFORM}/bin/i686-linux-android-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-9/arch-x86/\" \\\n    --extra-ldexeflags=-pie \\\n    --disable-asm \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean\n```\n\n* Build the JNI native libraries, setting `APP_ABI` to include the architectures\n  built in the previous step. For example:\n\n```\ncd \"${FFMPEG_EXT_PATH}\" && \\\n${NDK_PATH}/ndk-build APP_ABI=\"armeabi-v7a arm64-v8a x86\" -j4\n```\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use `FfmpegAudioRenderer`.\nHow you do this depends on which player API you're using:\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `FfmpegAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `FfmpegAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add an `FfmpegAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return an\n  `FfmpegAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass an `FfmpegAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `FfmpegAudioRenderer` to the player,\nthen implement your own logic to use the renderer for a given track.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n[#2781]: https://github.com/google/ExoPlayer/issues/2781\n[Supported formats]: https://exoplayer.dev/supported-formats.html#ffmpeg-extension\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.ffmpeg.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/cast/README.md":"# ExoPlayer Cast extension #\n\n## Description ##\n\nThe cast extension is a [Player][] implementation that controls playback on a\nCast receiver app.\n\n[Player]: https://exoplayer.dev/doc/reference/index.html?com/google/android/exoplayer2/Player.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-cast:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nCreate a `CastPlayer` and use it to integrate Cast into your app using\nExoPlayer's common `Player` interface.\n","exoplayer-amzn-2.10.6/extensions/leanback/README.md":"# ExoPlayer Leanback extension #\n\nThis [Leanback][] Extension provides a [PlayerAdapter][] implementation for\nExoPlayer.\n\n[PlayerAdapter]: https://developer.android.com/reference/android/support/v17/leanback/media/PlayerAdapter.html\n[Leanback]: https://developer.android.com/reference/android/support/v17/leanback/package-summary.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-leanback:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.leanback.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/jobdispatcher/README.md":"# ExoPlayer Firebase JobDispatcher extension #\n\n**DEPRECATED - Please use [WorkManager extension][] or [PlatformScheduler][] instead.**\n\nThis extension provides a Scheduler implementation which uses [Firebase JobDispatcher][].\n\n[WorkManager extension]: https://github.com/google/ExoPlayer/blob/release-v2/extensions/workmanager/README.md\n[PlatformScheduler]: https://github.com/google/ExoPlayer/blob/release-v2/library/core/src/main/java/com/google/android/exoplayer2/scheduler/PlatformScheduler.java\n[Firebase JobDispatcher]: https://github.com/firebase/firebase-jobdispatcher-android\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-jobdispatcher:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n","exoplayer-amzn-2.10.6/extensions/mediasession/README.md":"# ExoPlayer MediaSession extension #\n\nThe MediaSession extension mediates between a Player (or ExoPlayer) instance\nand a [MediaSession][]. It automatically retrieves and implements playback\nactions and syncs the player state with the state of the media session. The\nbehaviour can be extended to support other playback and custom actions.\n\n[MediaSession]: https://developer.android.com/reference/android/support/v4/media/session/MediaSessionCompat.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-mediasession:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching\n  `com.google.android.exoplayer2.ext.mediasession.*` belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/ima/README.md":"# ExoPlayer IMA extension #\n\nThe IMA extension is an [AdsLoader][] implementation wrapping the\n[Interactive Media Ads SDK for Android][IMA]. You can use it to insert ads\nalongside content.\n\n[IMA]: https://developers.google.com/interactive-media-ads/docs/sdks/android/\n[AdsLoader]: https://exoplayer.dev/doc/reference/index.html?com/google/android/exoplayer2/source/ads/AdsLoader.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-ima:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nTo play ads alongside a single-window content `MediaSource`, prepare the player\nwith an `AdsMediaSource` constructed using an `ImaAdsLoader`, the content\n`MediaSource` and an overlay `ViewGroup` on top of the player. Pass an ad tag\nURI from your ad campaign when creating the `ImaAdsLoader`. The IMA\ndocumentation includes some [sample ad tags][] for testing. Note that the IMA\nextension only supports players which are accessed on the application's main\nthread.\n\nResuming the player after entering the background requires some special handling\nwhen playing ads. The player and its media source are released on entering the\nbackground, and are recreated when the player returns to the foreground. When\nplaying ads it is necessary to persist ad playback state while in the background\nby keeping a reference to the `ImaAdsLoader`. Reuse it when resuming playback of\nthe same content/ads by passing it in when constructing the new\n`AdsMediaSource`. It is also important to persist the player position when\nentering the background by storing the value of `player.getContentPosition()`.\nOn returning to the foreground, seek to that position before preparing the new\nplayer instance. Finally, it is important to call `ImaAdsLoader.release()` when\nplayback of the content/ads has finished and will not be resumed.\n\nYou can try the IMA extension in the ExoPlayer demo app. To do this you must\nselect and build one of the `withExtensions` build variants of the demo app in\nAndroid Studio. You can find IMA test content in the \"IMA sample ad tags\"\nsection of the app. The demo app's `PlayerActivity` also shows how to persist\nthe `ImaAdsLoader` instance and the player position when backgrounded during ad\nplayback.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[sample ad tags]: https://developers.google.com/interactive-media-ads/docs/sdks/android/tags\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.ima.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/okhttp/README.md":"# ExoPlayer OkHttp extension #\n\nThe OkHttp extension is an [HttpDataSource][] implementation using Square's\n[OkHttp][].\n\n[HttpDataSource]: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/upstream/HttpDataSource.html\n[OkHttp]: https://square.github.io/okhttp/\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension requires depending on OkHttp, which is\nlicensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-okhttp:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nExoPlayer requests data through `DataSource` instances. These instances are\neither instantiated and injected from application code, or obtained from\ninstances of `DataSource.Factory` that are instantiated and injected from\napplication code.\n\nIf your application only needs to play http(s) content, using the OkHttp\nextension is as simple as updating any `DataSource`s and `DataSource.Factory`\ninstantiations in your application code to use `OkHttpDataSource` and\n`OkHttpDataSourceFactory` respectively. If your application also needs to play\nnon-http(s) content such as local files, use\n```\nnew DefaultDataSource(\n    ...\n    new OkHttpDataSource(...) /* baseDataSource argument */);\n```\nand\n```\nnew DefaultDataSourceFactory(\n    ...\n    new OkHttpDataSourceFactory(...) /* baseDataSourceFactory argument */);\n```\nrespectively.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.okhttp.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/README.md":"# ExoPlayer extensions #\n\nExoPlayer extensions are modules that depend on external libraries to provide\nadditional functionality. Browse the individual extensions and their READMEs to\nlearn more.\n","exoplayer-amzn-2.10.6/extensions/cronet/README.md":"# ExoPlayer Cronet extension #\n\nThe Cronet extension is an [HttpDataSource][] implementation using [Cronet][].\n\n[HttpDataSource]: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/upstream/HttpDataSource.html\n[Cronet]: https://chromium.googlesource.com/chromium/src/+/master/components/cronet?autodive=0%2F%2F\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-cronet:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nExoPlayer requests data through `DataSource` instances. These instances are\neither instantiated and injected from application code, or obtained from\ninstances of `DataSource.Factory` that are instantiated and injected from\napplication code.\n\nIf your application only needs to play http(s) content, using the Cronet\nextension is as simple as updating any `DataSource`s and `DataSource.Factory`\ninstantiations in your application code to use `CronetDataSource` and\n`CronetDataSourceFactory` respectively. If your application also needs to play\nnon-http(s) content such as local files, use\n```\nnew DefaultDataSource(\n    ...\n    new CronetDataSource(...) /* baseDataSource argument */);\n```\nand\n```\nnew DefaultDataSourceFactory(\n    ...\n    new CronetDataSourceFactory(...) /* baseDataSourceFactory argument */);\n```\nrespectively.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.cronet.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/opus/README.md":"# ExoPlayer Opus extension #\n\nThe Opus extension provides `LibopusAudioRenderer`, which uses libopus (the Opus\ndecoding library) to decode Opus audio.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nEXOPLAYER_ROOT=\"$(pwd)\"\nOPUS_EXT_PATH=\"${EXOPLAYER_ROOT}/extensions/opus/src/main\"\n```\n\n* Download the [Android NDK][] and set its location in an environment variable:\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Fetch libopus:\n\n```\ncd \"${OPUS_EXT_PATH}/jni\" && \\\ngit clone https://git.xiph.org/opus.git libopus\n```\n\n* Run the script to convert arm assembly to NDK compatible format:\n\n```\ncd ${OPUS_EXT_PATH}/jni && ./convert_android_asm.sh\n```\n\n* Build the JNI native libraries from the command line:\n\n```\ncd \"${OPUS_EXT_PATH}\"/jni && \\\n${NDK_PATH}/ndk-build APP_ABI=all -j4\n```\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n\n## Notes ##\n\n* Every time there is a change to the libopus checkout:\n  * Arm assembly should be converted by running `convert_android_asm.sh`\n  * Clean and re-build the project.\n* If you want to use your own version of libopus, place it in\n  `${OPUS_EXT_PATH}/jni/libopus`.\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use `LibopusAudioRenderer`.\nHow you do this depends on which player API you're using:\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `LibopusAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `LibopusAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add a `LibopusAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return a\n  `LibopusAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass a `LibopusAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `LibopusAudioRenderer` to the\nplayer, then implement your own logic to use the renderer for a given track.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.opus.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","exoplayer-amzn-2.10.6/extensions/rtmp/README.md":"# rtmp Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/rtmp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/rtmp/README.md)","exoplayer-amzn-2.10.6/extensions/vp9/README.md":"# vp9 Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/vp9/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/vp9/README.md)","exoplayer-amzn-2.10.6/extensions/workmanager/README.md":"# workmanager Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/workmanager/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/workmanager/README.md)"},"items":[{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/cast/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/cast/README.md","title":"cast Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer Cast extension #\n\n## Description ##\n\nThe cast extension is a [Player][] implementation that controls playback on a\nCast receiver app.\n\n[Player]: https://exoplayer.dev/doc/reference/index.html?com/google/android/exoplayer2/Player.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-cast:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nCreate a `CastPlayer` and use it to integrate Cast into your app using\nExoPlayer's common `Player` interface.\n","isInternal":false,"tokens":214,"sizeBytes":917},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/cronet/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/cronet/README.md","title":"cronet Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer Cronet extension #\n\nThe Cronet extension is an [HttpDataSource][] implementation using [Cronet][].\n\n[HttpDataSource]: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/upstream/HttpDataSource.html\n[Cronet]: https://chromium.googlesource.com/chromium/src/+/master/components/cronet?autodive=0%2F%2F\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-cronet:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nExoPlayer requests data through `DataSource` instances. These instances are\neither instantiated and injected from application code, or obtained from\ninstances of `DataSource.Factory` that are instantiated and injected from\napplication code.\n\nIf your application only needs to play http(s) content, using the Cronet\nextension is as simple as updating any `DataSource`s and `DataSource.Factory`\ninstantiations in your application code to use `CronetDataSource` and\n`CronetDataSourceFactory` respectively. If your application also needs to play\nnon-http(s) content such as local files, use\n```\nnew DefaultDataSource(\n    ...\n    new CronetDataSource(...) /* baseDataSource argument */);\n```\nand\n```\nnew DefaultDataSourceFactory(\n    ...\n    new CronetDataSourceFactory(...) /* baseDataSourceFactory argument */);\n```\nrespectively.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.cronet.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","isInternal":false,"tokens":437,"sizeBytes":1892},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/ffmpeg/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/ffmpeg/README.md","title":"ffmpeg Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer FFmpeg extension #\n\nThe FFmpeg extension provides `FfmpegAudioRenderer`, which uses FFmpeg for\ndecoding and can render audio encoded in a variety of formats.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][]. The extension is not provided via JCenter (see [#2781][]\nfor more information).\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nFFMPEG_EXT_PATH=\"$(pwd)/extensions/ffmpeg/src/main/jni\"\n```\n\n* Download the [Android NDK][] and set its location in an environment variable.\n  Only versions up to NDK 15c are supported currently.\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Set up host platform (\"darwin-x86_64\" for Mac OS X):\n\n```\nHOST_PLATFORM=\"linux-x86_64\"\n```\n\n* Fetch and build FFmpeg. The configuration flags determine which formats will\n  be supported. See the [Supported formats][] page for more details of the\n  available flags.\n\nFor example, to fetch and build FFmpeg release 4.0 for armeabi-v7a,\n  arm64-v8a and x86 on Linux x86_64:\n\n```\nCOMMON_OPTIONS=\"\\\n    --target-os=android \\\n    --disable-static \\\n    --enable-shared \\\n    --disable-doc \\\n    --disable-programs \\\n    --disable-everything \\\n    --disable-avdevice \\\n    --disable-avformat \\\n    --disable-swscale \\\n    --disable-postproc \\\n    --disable-avfilter \\\n    --disable-symver \\\n    --disable-swresample \\\n    --enable-avresample \\\n    --enable-decoder=vorbis \\\n    --enable-decoder=opus \\\n    --enable-decoder=flac \\\n    \" && \\\ncd \"${FFMPEG_EXT_PATH}\" && \\\n(git -C ffmpeg pull || git clone git://source.ffmpeg.org/ffmpeg ffmpeg) && \\\ncd ffmpeg && git checkout release/4.0 && \\\n./configure \\\n    --libdir=android-libs/armeabi-v7a \\\n    --arch=arm \\\n    --cpu=armv7-a \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/arm-linux-androideabi-4.9/prebuilt/${HOST_PLATFORM}/bin/arm-linux-androideabi-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-9/arch-arm/\" \\\n    --extra-cflags=\"-march=armv7-a -mfloat-abi=softfp\" \\\n    --extra-ldflags=\"-Wl,--fix-cortex-a8\" \\\n    --extra-ldexeflags=-pie \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean && ./configure \\\n    --libdir=android-libs/arm64-v8a \\\n    --arch=aarch64 \\\n    --cpu=armv8-a \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/aarch64-linux-android-4.9/prebuilt/${HOST_PLATFORM}/bin/aarch64-linux-android-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-21/arch-arm64/\" \\\n    --extra-ldexeflags=-pie \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean && ./configure \\\n    --libdir=android-libs/x86 \\\n    --arch=x86 \\\n    --cpu=i686 \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/x86-4.9/prebuilt/${HOST_PLATFORM}/bin/i686-linux-android-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-9/arch-x86/\" \\\n    --extra-ldexeflags=-pie \\\n    --disable-asm \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean\n```\n\n* Build the JNI native libraries, setting `APP_ABI` to include the architectures\n  built in the previous step. For example:\n\n```\ncd \"${FFMPEG_EXT_PATH}\" && \\\n${NDK_PATH}/ndk-build APP_ABI=\"armeabi-v7a arm64-v8a x86\" -j4\n```\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use `FfmpegAudioRenderer`.\nHow you do this depends on which player API you're using:\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `FfmpegAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `FfmpegAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add an `FfmpegAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return an\n  `FfmpegAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass an `FfmpegAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `FfmpegAudioRenderer` to the player,\nthen implement your own logic to use the renderer for a given track.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n[#2781]: https://github.com/google/ExoPlayer/issues/2781\n[Supported formats]: https://exoplayer.dev/supported-formats.html#ffmpeg-extension\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.ffmpeg.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","isInternal":false,"tokens":1532,"sizeBytes":5803},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/flac/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/flac/README.md","title":"flac Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer Flac extension #\n\nThe Flac extension provides `FlacExtractor` and `LibflacAudioRenderer`, which\nuse libFLAC (the Flac decoding library) to extract and decode FLAC audio.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nEXOPLAYER_ROOT=\"$(pwd)\"\nFLAC_EXT_PATH=\"${EXOPLAYER_ROOT}/extensions/flac/src/main\"\n```\n\n* Download the [Android NDK][] (version <= 17c) and set its location in an\n  environment variable:\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Download and extract flac-1.3.2 as \"${FLAC_EXT_PATH}/jni/flac\" folder:\n\n```\ncd \"${FLAC_EXT_PATH}/jni\" && \\\ncurl https://ftp.osuosl.org/pub/xiph/releases/flac/flac-1.3.2.tar.xz | tar xJ && \\\nmv flac-1.3.2 flac\n```\n\n* Build the JNI native libraries from the command line:\n\n```\ncd \"${FLAC_EXT_PATH}\"/jni && \\\n${NDK_PATH}/ndk-build APP_ABI=all -j4\n```\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use the extractor and/or\nrenderer.\n\n### Using `FlacExtractor` ###\n\n`FlacExtractor` is used via `ExtractorMediaSource`. If you're using\n`DefaultExtractorsFactory`, `FlacExtractor` will automatically be used to read\n`.flac` files. If you're not using `DefaultExtractorsFactory`, return a\n`FlacExtractor` from your `ExtractorsFactory.createExtractors` implementation.\n\n### Using `LibflacAudioRenderer` ###\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `LibflacAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `LibflacAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add a `LibflacAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return a\n  `LibflacAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass a `LibflacAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `LibflacAudioRenderer` to the\nplayer, then implement your own logic to use the renderer for a given track.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.flac.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","isInternal":false,"tokens":949,"sizeBytes":3786},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/gvr/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/gvr/README.md","title":"gvr Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer GVR extension #\n\nThe GVR extension wraps the [Google VR SDK for Android][]. It provides a\nGvrAudioProcessor, which uses [GvrAudioSurround][] to provide binaural rendering\nof surround sound and ambisonic soundfields.\n\n[Google VR SDK for Android]: https://developers.google.com/vr/android/\n[GvrAudioSurround]: https://developers.google.com/vr/android/reference/com/google/vr/sdk/audio/GvrAudioSurround\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-gvr:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n## Using the extension ##\n\n* If using `DefaultRenderersFactory`, override\n  `DefaultRenderersFactory.buildAudioProcessors` to return a\n  `GvrAudioProcessor`.\n* If constructing renderers directly, pass a `GvrAudioProcessor` to\n  `MediaCodecAudioRenderer`'s constructor.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.gvr.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","isInternal":false,"tokens":338,"sizeBytes":1386},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/ima/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/ima/README.md","title":"ima Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer IMA extension #\n\nThe IMA extension is an [AdsLoader][] implementation wrapping the\n[Interactive Media Ads SDK for Android][IMA]. You can use it to insert ads\nalongside content.\n\n[IMA]: https://developers.google.com/interactive-media-ads/docs/sdks/android/\n[AdsLoader]: https://exoplayer.dev/doc/reference/index.html?com/google/android/exoplayer2/source/ads/AdsLoader.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-ima:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nTo play ads alongside a single-window content `MediaSource`, prepare the player\nwith an `AdsMediaSource` constructed using an `ImaAdsLoader`, the content\n`MediaSource` and an overlay `ViewGroup` on top of the player. Pass an ad tag\nURI from your ad campaign when creating the `ImaAdsLoader`. The IMA\ndocumentation includes some [sample ad tags][] for testing. Note that the IMA\nextension only supports players which are accessed on the application's main\nthread.\n\nResuming the player after entering the background requires some special handling\nwhen playing ads. The player and its media source are released on entering the\nbackground, and are recreated when the player returns to the foreground. When\nplaying ads it is necessary to persist ad playback state while in the background\nby keeping a reference to the `ImaAdsLoader`. Reuse it when resuming playback of\nthe same content/ads by passing it in when constructing the new\n`AdsMediaSource`. It is also important to persist the player position when\nentering the background by storing the value of `player.getContentPosition()`.\nOn returning to the foreground, seek to that position before preparing the new\nplayer instance. Finally, it is important to call `ImaAdsLoader.release()` when\nplayback of the content/ads has finished and will not be resumed.\n\nYou can try the IMA extension in the ExoPlayer demo app. To do this you must\nselect and build one of the `withExtensions` build variants of the demo app in\nAndroid Studio. You can find IMA test content in the \"IMA sample ad tags\"\nsection of the app. The demo app's `PlayerActivity` also shows how to persist\nthe `ImaAdsLoader` instance and the player position when backgrounded during ad\nplayback.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[sample ad tags]: https://developers.google.com/interactive-media-ads/docs/sdks/android/tags\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.ima.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","isInternal":false,"tokens":689,"sizeBytes":2998},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/jobdispatcher/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/jobdispatcher/README.md","title":"jobdispatcher Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer Firebase JobDispatcher extension #\n\n**DEPRECATED - Please use [WorkManager extension][] or [PlatformScheduler][] instead.**\n\nThis extension provides a Scheduler implementation which uses [Firebase JobDispatcher][].\n\n[WorkManager extension]: https://github.com/google/ExoPlayer/blob/release-v2/extensions/workmanager/README.md\n[PlatformScheduler]: https://github.com/google/ExoPlayer/blob/release-v2/library/core/src/main/java/com/google/android/exoplayer2/scheduler/PlatformScheduler.java\n[Firebase JobDispatcher]: https://github.com/firebase/firebase-jobdispatcher-android\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-jobdispatcher:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n","isInternal":false,"tokens":245,"sizeBytes":1128},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/leanback/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/leanback/README.md","title":"leanback Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer Leanback extension #\n\nThis [Leanback][] Extension provides a [PlayerAdapter][] implementation for\nExoPlayer.\n\n[PlayerAdapter]: https://developer.android.com/reference/android/support/v17/leanback/media/PlayerAdapter.html\n[Leanback]: https://developer.android.com/reference/android/support/v17/leanback/package-summary.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-leanback:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.leanback.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","isInternal":false,"tokens":244,"sizeBytes":1049},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/mediasession/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/mediasession/README.md","title":"mediasession Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer MediaSession extension #\n\nThe MediaSession extension mediates between a Player (or ExoPlayer) instance\nand a [MediaSession][]. It automatically retrieves and implements playback\nactions and syncs the player state with the state of the media session. The\nbehaviour can be extended to support other playback and custom actions.\n\n[MediaSession]: https://developer.android.com/reference/android/support/v4/media/session/MediaSessionCompat.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-mediasession:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching\n  `com.google.android.exoplayer2.ext.mediasession.*` belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","isInternal":false,"tokens":265,"sizeBytes":1174},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/okhttp/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/okhttp/README.md","title":"okhttp Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer OkHttp extension #\n\nThe OkHttp extension is an [HttpDataSource][] implementation using Square's\n[OkHttp][].\n\n[HttpDataSource]: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/upstream/HttpDataSource.html\n[OkHttp]: https://square.github.io/okhttp/\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension requires depending on OkHttp, which is\nlicensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-okhttp:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nExoPlayer requests data through `DataSource` instances. These instances are\neither instantiated and injected from application code, or obtained from\ninstances of `DataSource.Factory` that are instantiated and injected from\napplication code.\n\nIf your application only needs to play http(s) content, using the OkHttp\nextension is as simple as updating any `DataSource`s and `DataSource.Factory`\ninstantiations in your application code to use `OkHttpDataSource` and\n`OkHttpDataSourceFactory` respectively. If your application also needs to play\nnon-http(s) content such as local files, use\n```\nnew DefaultDataSource(\n    ...\n    new OkHttpDataSource(...) /* baseDataSource argument */);\n```\nand\n```\nnew DefaultDataSourceFactory(\n    ...\n    new OkHttpDataSourceFactory(...) /* baseDataSourceFactory argument */);\n```\nrespectively.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.okhttp.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","isInternal":false,"tokens":475,"sizeBytes":2106},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/opus/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/opus/README.md","title":"opus Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer Opus extension #\n\nThe Opus extension provides `LibopusAudioRenderer`, which uses libopus (the Opus\ndecoding library) to decode Opus audio.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nEXOPLAYER_ROOT=\"$(pwd)\"\nOPUS_EXT_PATH=\"${EXOPLAYER_ROOT}/extensions/opus/src/main\"\n```\n\n* Download the [Android NDK][] and set its location in an environment variable:\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Fetch libopus:\n\n```\ncd \"${OPUS_EXT_PATH}/jni\" && \\\ngit clone https://git.xiph.org/opus.git libopus\n```\n\n* Run the script to convert arm assembly to NDK compatible format:\n\n```\ncd ${OPUS_EXT_PATH}/jni && ./convert_android_asm.sh\n```\n\n* Build the JNI native libraries from the command line:\n\n```\ncd \"${OPUS_EXT_PATH}\"/jni && \\\n${NDK_PATH}/ndk-build APP_ABI=all -j4\n```\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n\n## Notes ##\n\n* Every time there is a change to the libopus checkout:\n  * Arm assembly should be converted by running `convert_android_asm.sh`\n  * Clean and re-build the project.\n* If you want to use your own version of libopus, place it in\n  `${OPUS_EXT_PATH}/jni/libopus`.\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use `LibopusAudioRenderer`.\nHow you do this depends on which player API you're using:\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `LibopusAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `LibopusAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add a `LibopusAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return a\n  `LibopusAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass a `LibopusAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `LibopusAudioRenderer` to the\nplayer, then implement your own logic to use the renderer for a given track.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.opus.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n","isInternal":false,"tokens":898,"sizeBytes":3713},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/README.md","title":"extensions Documentation","category":"plugin-manifest","format":"markdown","content":"# ExoPlayer extensions #\n\nExoPlayer extensions are modules that depend on external libraries to provide\nadditional functionality. Browse the individual extensions and their READMEs to\nlearn more.\n","isInternal":false,"tokens":36,"sizeBytes":196},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/rtmp/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/rtmp/README.md","title":"rtmp Documentation","category":"plugin-manifest","format":"markdown","content":"# rtmp Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/rtmp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/rtmp/README.md)","tokens":300,"sizeBytes":214},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/vp9/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/vp9/README.md","title":"vp9 Documentation","category":"plugin-manifest","format":"markdown","content":"# vp9 Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/vp9/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/vp9/README.md)","tokens":300,"sizeBytes":211},{"name":"README.md","path":"exoplayer-amzn-2.10.6/extensions/workmanager/README.md","rawUrl":"https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/workmanager/README.md","title":"workmanager Documentation","category":"plugin-manifest","format":"markdown","content":"# workmanager Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/workmanager/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/workmanager/README.md)","tokens":300,"sizeBytes":235}],"systemPromptSnippet":"<yakaai_skills repo=\"yuliskov/SmartTube\">\n<!-- File: exoplayer-amzn-2.10.6/extensions/cast/README.md (Tokens: ~214 | Category: plugin-manifest) -->\n# ExoPlayer Cast extension #\n\n## Description ##\n\nThe cast extension is a [Player][] implementation that controls playback on a\nCast receiver app.\n\n[Player]: https://exoplayer.dev/doc/reference/index.html?com/google/android/exoplayer2/Player.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-cast:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nCreate a `CastPlayer` and use it to integrate Cast into your app using\nExoPlayer's common `Player` interface.\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/cronet/README.md (Tokens: ~437 | Category: plugin-manifest) -->\n# ExoPlayer Cronet extension #\n\nThe Cronet extension is an [HttpDataSource][] implementation using [Cronet][].\n\n[HttpDataSource]: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/upstream/HttpDataSource.html\n[Cronet]: https://chromium.googlesource.com/chromium/src/+/master/components/cronet?autodive=0%2F%2F\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-cronet:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nExoPlayer requests data through `DataSource` instances. These instances are\neither instantiated and injected from application code, or obtained from\ninstances of `DataSource.Factory` that are instantiated and injected from\napplication code.\n\nIf your application only needs to play http(s) content, using the Cronet\nextension is as simple as updating any `DataSource`s and `DataSource.Factory`\ninstantiations in your application code to use `CronetDataSource` and\n`CronetDataSourceFactory` respectively. If your application also needs to play\nnon-http(s) content such as local files, use\n```\nnew DefaultDataSource(\n    ...\n    new CronetDataSource(...) /* baseDataSource argument */);\n```\nand\n```\nnew DefaultDataSourceFactory(\n    ...\n    new CronetDataSourceFactory(...) /* baseDataSourceFactory argument */);\n```\nrespectively.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.cronet.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/ffmpeg/README.md (Tokens: ~1532 | Category: plugin-manifest) -->\n# ExoPlayer FFmpeg extension #\n\nThe FFmpeg extension provides `FfmpegAudioRenderer`, which uses FFmpeg for\ndecoding and can render audio encoded in a variety of formats.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][]. The extension is not provided via JCenter (see [#2781][]\nfor more information).\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nFFMPEG_EXT_PATH=\"$(pwd)/extensions/ffmpeg/src/main/jni\"\n```\n\n* Download the [Android NDK][] and set its location in an environment variable.\n  Only versions up to NDK 15c are supported currently.\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Set up host platform (\"darwin-x86_64\" for Mac OS X):\n\n```\nHOST_PLATFORM=\"linux-x86_64\"\n```\n\n* Fetch and build FFmpeg. The configuration flags determine which formats will\n  be supported. See the [Supported formats][] page for more details of the\n  available flags.\n\nFor example, to fetch and build FFmpeg release 4.0 for armeabi-v7a,\n  arm64-v8a and x86 on Linux x86_64:\n\n```\nCOMMON_OPTIONS=\"\\\n    --target-os=android \\\n    --disable-static \\\n    --enable-shared \\\n    --disable-doc \\\n    --disable-programs \\\n    --disable-everything \\\n    --disable-avdevice \\\n    --disable-avformat \\\n    --disable-swscale \\\n    --disable-postproc \\\n    --disable-avfilter \\\n    --disable-symver \\\n    --disable-swresample \\\n    --enable-avresample \\\n    --enable-decoder=vorbis \\\n    --enable-decoder=opus \\\n    --enable-decoder=flac \\\n    \" && \\\ncd \"${FFMPEG_EXT_PATH}\" && \\\n(git -C ffmpeg pull || git clone git://source.ffmpeg.org/ffmpeg ffmpeg) && \\\ncd ffmpeg && git checkout release/4.0 && \\\n./configure \\\n    --libdir=android-libs/armeabi-v7a \\\n    --arch=arm \\\n    --cpu=armv7-a \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/arm-linux-androideabi-4.9/prebuilt/${HOST_PLATFORM}/bin/arm-linux-androideabi-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-9/arch-arm/\" \\\n    --extra-cflags=\"-march=armv7-a -mfloat-abi=softfp\" \\\n    --extra-ldflags=\"-Wl,--fix-cortex-a8\" \\\n    --extra-ldexeflags=-pie \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean && ./configure \\\n    --libdir=android-libs/arm64-v8a \\\n    --arch=aarch64 \\\n    --cpu=armv8-a \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/aarch64-linux-android-4.9/prebuilt/${HOST_PLATFORM}/bin/aarch64-linux-android-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-21/arch-arm64/\" \\\n    --extra-ldexeflags=-pie \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean && ./configure \\\n    --libdir=android-libs/x86 \\\n    --arch=x86 \\\n    --cpu=i686 \\\n    --cross-prefix=\"${NDK_PATH}/toolchains/x86-4.9/prebuilt/${HOST_PLATFORM}/bin/i686-linux-android-\" \\\n    --sysroot=\"${NDK_PATH}/platforms/android-9/arch-x86/\" \\\n    --extra-ldexeflags=-pie \\\n    --disable-asm \\\n    ${COMMON_OPTIONS} \\\n    && \\\nmake -j4 && make install-libs && \\\nmake clean\n```\n\n* Build the JNI native libraries, setting `APP_ABI` to include the architectures\n  built in the previous step. For example:\n\n```\ncd \"${FFMPEG_EXT_PATH}\" && \\\n${NDK_PATH}/ndk-build APP_ABI=\"armeabi-v7a arm64-v8a x86\" -j4\n```\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use `FfmpegAudioRenderer`.\nHow you do this depends on which player API you're using:\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `FfmpegAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `FfmpegAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add an `FfmpegAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return an\n  `FfmpegAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass an `FfmpegAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `FfmpegAudioRenderer` to the player,\nthen implement your own logic to use the renderer for a given track.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n[#2781]: https://github.com/google/ExoPlayer/issues/2781\n[Supported formats]: https://exoplayer.dev/supported-formats.html#ffmpeg-extension\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.ffmpeg.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/flac/README.md (Tokens: ~949 | Category: plugin-manifest) -->\n# ExoPlayer Flac extension #\n\nThe Flac extension provides `FlacExtractor` and `LibflacAudioRenderer`, which\nuse libFLAC (the Flac decoding library) to extract and decode FLAC audio.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nEXOPLAYER_ROOT=\"$(pwd)\"\nFLAC_EXT_PATH=\"${EXOPLAYER_ROOT}/extensions/flac/src/main\"\n```\n\n* Download the [Android NDK][] (version <= 17c) and set its location in an\n  environment variable:\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Download and extract flac-1.3.2 as \"${FLAC_EXT_PATH}/jni/flac\" folder:\n\n```\ncd \"${FLAC_EXT_PATH}/jni\" && \\\ncurl https://ftp.osuosl.org/pub/xiph/releases/flac/flac-1.3.2.tar.xz | tar xJ && \\\nmv flac-1.3.2 flac\n```\n\n* Build the JNI native libraries from the command line:\n\n```\ncd \"${FLAC_EXT_PATH}\"/jni && \\\n${NDK_PATH}/ndk-build APP_ABI=all -j4\n```\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use the extractor and/or\nrenderer.\n\n### Using `FlacExtractor` ###\n\n`FlacExtractor` is used via `ExtractorMediaSource`. If you're using\n`DefaultExtractorsFactory`, `FlacExtractor` will automatically be used to read\n`.flac` files. If you're not using `DefaultExtractorsFactory`, return a\n`FlacExtractor` from your `ExtractorsFactory.createExtractors` implementation.\n\n### Using `LibflacAudioRenderer` ###\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `LibflacAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `LibflacAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add a `LibflacAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return a\n  `LibflacAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass a `LibflacAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `LibflacAudioRenderer` to the\nplayer, then implement your own logic to use the renderer for a given track.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.flac.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/gvr/README.md (Tokens: ~338 | Category: plugin-manifest) -->\n# ExoPlayer GVR extension #\n\nThe GVR extension wraps the [Google VR SDK for Android][]. It provides a\nGvrAudioProcessor, which uses [GvrAudioSurround][] to provide binaural rendering\nof surround sound and ambisonic soundfields.\n\n[Google VR SDK for Android]: https://developers.google.com/vr/android/\n[GvrAudioSurround]: https://developers.google.com/vr/android/reference/com/google/vr/sdk/audio/GvrAudioSurround\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-gvr:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n## Using the extension ##\n\n* If using `DefaultRenderersFactory`, override\n  `DefaultRenderersFactory.buildAudioProcessors` to return a\n  `GvrAudioProcessor`.\n* If constructing renderers directly, pass a `GvrAudioProcessor` to\n  `MediaCodecAudioRenderer`'s constructor.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.gvr.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/ima/README.md (Tokens: ~689 | Category: plugin-manifest) -->\n# ExoPlayer IMA extension #\n\nThe IMA extension is an [AdsLoader][] implementation wrapping the\n[Interactive Media Ads SDK for Android][IMA]. You can use it to insert ads\nalongside content.\n\n[IMA]: https://developers.google.com/interactive-media-ads/docs/sdks/android/\n[AdsLoader]: https://exoplayer.dev/doc/reference/index.html?com/google/android/exoplayer2/source/ads/AdsLoader.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-ima:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nTo play ads alongside a single-window content `MediaSource`, prepare the player\nwith an `AdsMediaSource` constructed using an `ImaAdsLoader`, the content\n`MediaSource` and an overlay `ViewGroup` on top of the player. Pass an ad tag\nURI from your ad campaign when creating the `ImaAdsLoader`. The IMA\ndocumentation includes some [sample ad tags][] for testing. Note that the IMA\nextension only supports players which are accessed on the application's main\nthread.\n\nResuming the player after entering the background requires some special handling\nwhen playing ads. The player and its media source are released on entering the\nbackground, and are recreated when the player returns to the foreground. When\nplaying ads it is necessary to persist ad playback state while in the background\nby keeping a reference to the `ImaAdsLoader`. Reuse it when resuming playback of\nthe same content/ads by passing it in when constructing the new\n`AdsMediaSource`. It is also important to persist the player position when\nentering the background by storing the value of `player.getContentPosition()`.\nOn returning to the foreground, seek to that position before preparing the new\nplayer instance. Finally, it is important to call `ImaAdsLoader.release()` when\nplayback of the content/ads has finished and will not be resumed.\n\nYou can try the IMA extension in the ExoPlayer demo app. To do this you must\nselect and build one of the `withExtensions` build variants of the demo app in\nAndroid Studio. You can find IMA test content in the \"IMA sample ad tags\"\nsection of the app. The demo app's `PlayerActivity` also shows how to persist\nthe `ImaAdsLoader` instance and the player position when backgrounded during ad\nplayback.\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[sample ad tags]: https://developers.google.com/interactive-media-ads/docs/sdks/android/tags\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.ima.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/jobdispatcher/README.md (Tokens: ~245 | Category: plugin-manifest) -->\n# ExoPlayer Firebase JobDispatcher extension #\n\n**DEPRECATED - Please use [WorkManager extension][] or [PlatformScheduler][] instead.**\n\nThis extension provides a Scheduler implementation which uses [Firebase JobDispatcher][].\n\n[WorkManager extension]: https://github.com/google/ExoPlayer/blob/release-v2/extensions/workmanager/README.md\n[PlatformScheduler]: https://github.com/google/ExoPlayer/blob/release-v2/library/core/src/main/java/com/google/android/exoplayer2/scheduler/PlatformScheduler.java\n[Firebase JobDispatcher]: https://github.com/firebase/firebase-jobdispatcher-android\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-jobdispatcher:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/leanback/README.md (Tokens: ~244 | Category: plugin-manifest) -->\n# ExoPlayer Leanback extension #\n\nThis [Leanback][] Extension provides a [PlayerAdapter][] implementation for\nExoPlayer.\n\n[PlayerAdapter]: https://developer.android.com/reference/android/support/v17/leanback/media/PlayerAdapter.html\n[Leanback]: https://developer.android.com/reference/android/support/v17/leanback/package-summary.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-leanback:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.leanback.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/mediasession/README.md (Tokens: ~265 | Category: plugin-manifest) -->\n# ExoPlayer MediaSession extension #\n\nThe MediaSession extension mediates between a Player (or ExoPlayer) instance\nand a [MediaSession][]. It automatically retrieves and implements playback\nactions and syncs the player state with the state of the media session. The\nbehaviour can be extended to support other playback and custom actions.\n\n[MediaSession]: https://developer.android.com/reference/android/support/v4/media/session/MediaSessionCompat.html\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-mediasession:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Links ##\n\n* [Javadoc][]: Classes matching\n  `com.google.android.exoplayer2.ext.mediasession.*` belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/okhttp/README.md (Tokens: ~475 | Category: plugin-manifest) -->\n# ExoPlayer OkHttp extension #\n\nThe OkHttp extension is an [HttpDataSource][] implementation using Square's\n[OkHttp][].\n\n[HttpDataSource]: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/upstream/HttpDataSource.html\n[OkHttp]: https://square.github.io/okhttp/\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension requires depending on OkHttp, which is\nlicensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Getting the extension ##\n\nThe easiest way to use the extension is to add it as a gradle dependency:\n\n```gradle\nimplementation 'com.google.android.exoplayer:extension-okhttp:2.X.X'\n```\n\nwhere `2.X.X` is the version, which must match the version of the ExoPlayer\nlibrary being used.\n\nAlternatively, you can clone the ExoPlayer repository and depend on the module\nlocally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n\n## Using the extension ##\n\nExoPlayer requests data through `DataSource` instances. These instances are\neither instantiated and injected from application code, or obtained from\ninstances of `DataSource.Factory` that are instantiated and injected from\napplication code.\n\nIf your application only needs to play http(s) content, using the OkHttp\nextension is as simple as updating any `DataSource`s and `DataSource.Factory`\ninstantiations in your application code to use `OkHttpDataSource` and\n`OkHttpDataSourceFactory` respectively. If your application also needs to play\nnon-http(s) content such as local files, use\n```\nnew DefaultDataSource(\n    ...\n    new OkHttpDataSource(...) /* baseDataSource argument */);\n```\nand\n```\nnew DefaultDataSourceFactory(\n    ...\n    new OkHttpDataSourceFactory(...) /* baseDataSourceFactory argument */);\n```\nrespectively.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.okhttp.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/opus/README.md (Tokens: ~898 | Category: plugin-manifest) -->\n# ExoPlayer Opus extension #\n\nThe Opus extension provides `LibopusAudioRenderer`, which uses libopus (the Opus\ndecoding library) to decode Opus audio.\n\n## License note ##\n\nPlease note that whilst the code in this repository is licensed under\n[Apache 2.0][], using this extension also requires building and including one or\nmore external libraries as described below. These are licensed separately.\n\n[Apache 2.0]: https://github.com/google/ExoPlayer/blob/release-v2/LICENSE\n\n## Build instructions ##\n\nTo use this extension you need to clone the ExoPlayer repository and depend on\nits modules locally. Instructions for doing this can be found in ExoPlayer's\n[top level README][].\n\nIn addition, it's necessary to build the extension's native components as\nfollows:\n\n* Set the following environment variables:\n\n```\ncd \"<path to exoplayer checkout>\"\nEXOPLAYER_ROOT=\"$(pwd)\"\nOPUS_EXT_PATH=\"${EXOPLAYER_ROOT}/extensions/opus/src/main\"\n```\n\n* Download the [Android NDK][] and set its location in an environment variable:\n\n```\nNDK_PATH=\"<path to Android NDK>\"\n```\n\n* Fetch libopus:\n\n```\ncd \"${OPUS_EXT_PATH}/jni\" && \\\ngit clone https://git.xiph.org/opus.git libopus\n```\n\n* Run the script to convert arm assembly to NDK compatible format:\n\n```\ncd ${OPUS_EXT_PATH}/jni && ./convert_android_asm.sh\n```\n\n* Build the JNI native libraries from the command line:\n\n```\ncd \"${OPUS_EXT_PATH}\"/jni && \\\n${NDK_PATH}/ndk-build APP_ABI=all -j4\n```\n\n[top level README]: https://github.com/google/ExoPlayer/blob/release-v2/README.md\n[Android NDK]: https://developer.android.com/tools/sdk/ndk/index.html\n\n## Notes ##\n\n* Every time there is a change to the libopus checkout:\n  * Arm assembly should be converted by running `convert_android_asm.sh`\n  * Clean and re-build the project.\n* If you want to use your own version of libopus, place it in\n  `${OPUS_EXT_PATH}/jni/libopus`.\n\n## Using the extension ##\n\nOnce you've followed the instructions above to check out, build and depend on\nthe extension, the next step is to tell ExoPlayer to use `LibopusAudioRenderer`.\nHow you do this depends on which player API you're using:\n\n* If you're passing a `DefaultRenderersFactory` to\n  `ExoPlayerFactory.newSimpleInstance`, you can enable using the extension by\n  setting the `extensionRendererMode` parameter of the `DefaultRenderersFactory`\n  constructor to `EXTENSION_RENDERER_MODE_ON`. This will use\n  `LibopusAudioRenderer` for playback if `MediaCodecAudioRenderer` doesn't\n  support the input format. Pass `EXTENSION_RENDERER_MODE_PREFER` to give\n  `LibopusAudioRenderer` priority over `MediaCodecAudioRenderer`.\n* If you've subclassed `DefaultRenderersFactory`, add a `LibopusAudioRenderer`\n  to the output list in `buildAudioRenderers`. ExoPlayer will use the first\n  `Renderer` in the list that supports the input media format.\n* If you've implemented your own `RenderersFactory`, return a\n  `LibopusAudioRenderer` instance from `createRenderers`. ExoPlayer will use the\n  first `Renderer` in the returned array that supports the input media format.\n* If you're using `ExoPlayerFactory.newInstance`, pass a `LibopusAudioRenderer`\n  in the array of `Renderer`s. ExoPlayer will use the first `Renderer` in the\n  list that supports the input media format.\n\nNote: These instructions assume you're using `DefaultTrackSelector`. If you have\na custom track selector the choice of `Renderer` is up to your implementation,\nso you need to make sure you are passing an `LibopusAudioRenderer` to the\nplayer, then implement your own logic to use the renderer for a given track.\n\n## Links ##\n\n* [Javadoc][]: Classes matching `com.google.android.exoplayer2.ext.opus.*`\n  belong to this module.\n\n[Javadoc]: https://exoplayer.dev/doc/reference/index.html\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/README.md (Tokens: ~36 | Category: plugin-manifest) -->\n# ExoPlayer extensions #\n\nExoPlayer extensions are modules that depend on external libraries to provide\nadditional functionality. Browse the individual extensions and their READMEs to\nlearn more.\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/rtmp/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# rtmp Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/rtmp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/rtmp/README.md)\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/vp9/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# vp9 Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/vp9/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/vp9/README.md)\n\n<!-- File: exoplayer-amzn-2.10.6/extensions/workmanager/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# workmanager Documentation\n\nPath: `exoplayer-amzn-2.10.6/extensions/workmanager/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/yuliskov/SmartTube/HEAD/exoplayer-amzn-2.10.6/extensions/workmanager/README.md)\n</yakaai_skills>"}