gitextract_ez39w3qr/ ├── .gitignore ├── LICENSE ├── README.md ├── README_cn.md ├── androidasync/ │ ├── .gitignore │ ├── androidasync.iml │ ├── build.gradle │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── jeffmony/ │ └── async/ │ ├── AsyncDatagramSocket.java │ ├── AsyncNetworkSocket.java │ ├── AsyncSSLException.java │ ├── AsyncSSLServerSocket.java │ ├── AsyncSSLSocket.java │ ├── AsyncSSLSocketWrapper.java │ ├── AsyncSemaphore.java │ ├── AsyncServer.java │ ├── AsyncServerSocket.java │ ├── AsyncSocket.java │ ├── BufferedDataSink.java │ ├── ByteBufferList.java │ ├── ChannelWrapper.java │ ├── DataEmitter.java │ ├── DataEmitterBase.java │ ├── DataEmitterReader.java │ ├── DataSink.java │ ├── DataTrackingEmitter.java │ ├── DatagramChannelWrapper.java │ ├── FileDataEmitter.java │ ├── FilteredDataEmitter.java │ ├── FilteredDataSink.java │ ├── HostnameResolutionException.java │ ├── LineEmitter.java │ ├── PushParser.java │ ├── SelectorWrapper.java │ ├── ServerSocketChannelWrapper.java │ ├── SocketChannelWrapper.java │ ├── TapCallback.java │ ├── ThreadQueue.java │ ├── Util.java │ ├── ZipDataSink.java │ ├── callback/ │ │ ├── CompletedCallback.java │ │ ├── ConnectCallback.java │ │ ├── ContinuationCallback.java │ │ ├── DataCallback.java │ │ ├── ListenCallback.java │ │ ├── ResultCallback.java │ │ ├── SocketCreateCallback.java │ │ ├── ValueCallback.java │ │ ├── ValueFunction.java │ │ └── WritableCallback.java │ ├── dns/ │ │ ├── Dns.java │ │ └── DnsResponse.java │ ├── future/ │ │ ├── Cancellable.java │ │ ├── Continuation.java │ │ ├── Converter.java │ │ ├── DependentCancellable.java │ │ ├── DependentFuture.java │ │ ├── DoneCallback.java │ │ ├── FailCallback.java │ │ ├── FailConvertCallback.java │ │ ├── FailRecoverCallback.java │ │ ├── Future.java │ │ ├── FutureCallback.java │ │ ├── FutureRunnable.java │ │ ├── FutureThread.java │ │ ├── Futures.java │ │ ├── HandlerFuture.java │ │ ├── MultiFuture.java │ │ ├── MultiTransformFuture.java │ │ ├── SimpleCancellable.java │ │ ├── SimpleFuture.java │ │ ├── SuccessCallback.java │ │ ├── ThenCallback.java │ │ ├── ThenFutureCallback.java │ │ ├── TransformFuture.java │ │ └── TypeConverter.java │ ├── http/ │ │ ├── AsyncHttpClient.java │ │ ├── AsyncHttpClientMiddleware.java │ │ ├── AsyncHttpDelete.java │ │ ├── AsyncHttpGet.java │ │ ├── AsyncHttpHead.java │ │ ├── AsyncHttpPost.java │ │ ├── AsyncHttpPut.java │ │ ├── AsyncHttpRequest.java │ │ ├── AsyncHttpResponse.java │ │ ├── AsyncHttpResponseImpl.java │ │ ├── AsyncSSLEngineConfigurator.java │ │ ├── AsyncSSLSocketMiddleware.java │ │ ├── AsyncSocketMiddleware.java │ │ ├── BasicNameValuePair.java │ │ ├── BodyDecoderException.java │ │ ├── ConnectionClosedException.java │ │ ├── ConnectionFailedException.java │ │ ├── Headers.java │ │ ├── HttpDate.java │ │ ├── HttpTransportMiddleware.java │ │ ├── HttpUtil.java │ │ ├── HybiParser.java │ │ ├── Multimap.java │ │ ├── NameValuePair.java │ │ ├── Protocol.java │ │ ├── ProtocolVersion.java │ │ ├── RedirectLimitExceededException.java │ │ ├── RequestLine.java │ │ ├── SSLEngineSNIConfigurator.java │ │ ├── SimpleMiddleware.java │ │ ├── TaggedList.java │ │ ├── WebSocket.java │ │ ├── WebSocketHandshakeException.java │ │ ├── WebSocketImpl.java │ │ ├── body/ │ │ │ ├── AsyncHttpRequestBody.java │ │ │ ├── ByteBufferListRequestBody.java │ │ │ ├── DocumentBody.java │ │ │ ├── FileBody.java │ │ │ ├── FilePart.java │ │ │ ├── JSONArrayBody.java │ │ │ ├── JSONObjectBody.java │ │ │ ├── MultipartFormDataBody.java │ │ │ ├── Part.java │ │ │ ├── StreamBody.java │ │ │ ├── StreamPart.java │ │ │ ├── StringBody.java │ │ │ ├── StringPart.java │ │ │ └── UrlEncodedFormBody.java │ │ ├── cache/ │ │ │ ├── HeaderParser.java │ │ │ ├── Objects.java │ │ │ ├── RawHeaders.java │ │ │ ├── RequestHeaders.java │ │ │ ├── ResponseCacheMiddleware.java │ │ │ ├── ResponseHeaders.java │ │ │ ├── ResponseSource.java │ │ │ └── StrictLineReader.java │ │ ├── callback/ │ │ │ ├── HttpConnectCallback.java │ │ │ └── RequestCallback.java │ │ ├── filter/ │ │ │ ├── ChunkedDataException.java │ │ │ ├── ChunkedInputFilter.java │ │ │ ├── ChunkedOutputFilter.java │ │ │ ├── ContentLengthFilter.java │ │ │ ├── DataRemainingException.java │ │ │ ├── GZIPInputFilter.java │ │ │ ├── InflaterInputFilter.java │ │ │ └── PrematureDataEndException.java │ │ └── server/ │ │ ├── AsyncHttpRequestBodyProvider.java │ │ ├── AsyncHttpServer.java │ │ ├── AsyncHttpServerRequest.java │ │ ├── AsyncHttpServerRequestImpl.java │ │ ├── AsyncHttpServerResponse.java │ │ ├── AsyncHttpServerResponseImpl.java │ │ ├── AsyncHttpServerRouter.java │ │ ├── AsyncProxyServer.java │ │ ├── BoundaryEmitter.java │ │ ├── HttpServerRequestCallback.java │ │ ├── MalformedRangeException.java │ │ ├── MimeEncodingException.java │ │ ├── RouteMatcher.java │ │ ├── StreamSkipException.java │ │ └── UnknownRequestBody.java │ ├── parser/ │ │ ├── AsyncParser.java │ │ ├── ByteBufferListParser.java │ │ ├── DocumentParser.java │ │ ├── JSONArrayParser.java │ │ ├── JSONObjectParser.java │ │ └── StringParser.java │ ├── stream/ │ │ ├── ByteBufferListInputStream.java │ │ ├── FileDataSink.java │ │ ├── InputStreamDataEmitter.java │ │ ├── OutputStreamDataCallback.java │ │ └── OutputStreamDataSink.java │ ├── util/ │ │ ├── Allocator.java │ │ ├── ArrayDeque.java │ │ ├── Charsets.java │ │ ├── Deque.java │ │ ├── FileCache.java │ │ ├── FileUtility.java │ │ ├── HashList.java │ │ ├── IdleTimeout.java │ │ ├── LruCache.java │ │ ├── StreamUtility.java │ │ ├── TaggedList.java │ │ ├── ThrottleTimeout.java │ │ ├── TimeoutBase.java │ │ └── UntypedHashtable.java │ └── wrapper/ │ ├── AsyncSocketWrapper.java │ └── DataEmitterWrapper.java ├── app/ │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── assets/ │ │ └── list.json │ ├── java/ │ │ └── com/ │ │ └── android/ │ │ └── media/ │ │ ├── DownloadBaseListActivity.java │ │ ├── DownloadFeatureActivity.java │ │ ├── DownloadOrcodeActivity.java │ │ ├── DownloadPlayActivity.java │ │ ├── DownloadSettingsActivity.java │ │ ├── MainActivity.java │ │ ├── MediaScannerActivity.java │ │ ├── MyApplication.java │ │ ├── PlayFeatureActivity.java │ │ ├── PlayerActivity.java │ │ └── VideoListAdapter.java │ └── res/ │ ├── drawable/ │ │ ├── border.xml │ │ └── ic_launcher_background.xml │ ├── drawable-v24/ │ │ └── ic_launcher_foreground.xml │ ├── layout/ │ │ ├── activity_download_feature.xml │ │ ├── activity_download_list.xml │ │ ├── activity_download_play.xml │ │ ├── activity_download_settings.xml │ │ ├── activity_main.xml │ │ ├── activity_orcode.xml │ │ ├── activity_play_func.xml │ │ ├── activity_player.xml │ │ ├── activity_scanner.xml │ │ ├── download_item.xml │ │ └── video_item.xml │ ├── mipmap-anydpi-v26/ │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ └── values/ │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── base/ │ ├── .gitignore │ ├── base.iml │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── android/ │ │ └── baselib/ │ │ ├── MediaSDKReceiver.java │ │ ├── NetworkCallbackImpl.java │ │ ├── NetworkListener.java │ │ ├── WeakHandler.java │ │ └── utils/ │ │ ├── LogUtils.java │ │ ├── NetworkUtils.java │ │ ├── ScreenUtils.java │ │ └── Utility.java │ └── res/ │ └── values/ │ └── strings.xml ├── build.gradle ├── constants.gradle ├── exoplayer/ │ ├── .gitignore │ ├── build.gradle │ ├── exoplayer.iml │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── google/ │ │ └── android/ │ │ └── exoplayer2/ │ │ ├── AudioBecomingNoisyManager.java │ │ ├── AudioFocusManager.java │ │ ├── BasePlayer.java │ │ ├── BaseRenderer.java │ │ ├── C.java │ │ ├── ControlDispatcher.java │ │ ├── DefaultControlDispatcher.java │ │ ├── DefaultLoadControl.java │ │ ├── DefaultMediaClock.java │ │ ├── DefaultRenderersFactory.java │ │ ├── ExoPlaybackException.java │ │ ├── ExoPlayer.java │ │ ├── ExoPlayerFactory.java │ │ ├── ExoPlayerImpl.java │ │ ├── ExoPlayerImplInternal.java │ │ ├── ExoPlayerLibraryInfo.java │ │ ├── Format.java │ │ ├── FormatHolder.java │ │ ├── IllegalSeekPositionException.java │ │ ├── LoadControl.java │ │ ├── MediaPeriodHolder.java │ │ ├── MediaPeriodInfo.java │ │ ├── MediaPeriodQueue.java │ │ ├── NoSampleRenderer.java │ │ ├── ParserException.java │ │ ├── PlaybackInfo.java │ │ ├── PlaybackParameters.java │ │ ├── PlaybackPreparer.java │ │ ├── Player.java │ │ ├── PlayerMessage.java │ │ ├── Renderer.java │ │ ├── RendererCapabilities.java │ │ ├── RendererConfiguration.java │ │ ├── RenderersFactory.java │ │ ├── SeekParameters.java │ │ ├── SimpleExoPlayer.java │ │ ├── Timeline.java │ │ ├── WakeLockManager.java │ │ ├── analytics/ │ │ │ ├── AnalyticsCollector.java │ │ │ ├── AnalyticsListener.java │ │ │ ├── DefaultAnalyticsListener.java │ │ │ ├── DefaultPlaybackSessionManager.java │ │ │ ├── PlaybackSessionManager.java │ │ │ ├── PlaybackStats.java │ │ │ ├── PlaybackStatsListener.java │ │ │ └── package-info.java │ │ ├── audio/ │ │ │ ├── Ac3Util.java │ │ │ ├── Ac4Util.java │ │ │ ├── AudioAttributes.java │ │ │ ├── AudioCapabilities.java │ │ │ ├── AudioCapabilitiesReceiver.java │ │ │ ├── AudioDecoderException.java │ │ │ ├── AudioListener.java │ │ │ ├── AudioProcessor.java │ │ │ ├── AudioRendererEventListener.java │ │ │ ├── AudioSink.java │ │ │ ├── AudioTimestampPoller.java │ │ │ ├── AudioTrackPositionTracker.java │ │ │ ├── AuxEffectInfo.java │ │ │ ├── BaseAudioProcessor.java │ │ │ ├── ChannelMappingAudioProcessor.java │ │ │ ├── DefaultAudioSink.java │ │ │ ├── DtsUtil.java │ │ │ ├── FloatResamplingAudioProcessor.java │ │ │ ├── MediaCodecAudioRenderer.java │ │ │ ├── ResamplingAudioProcessor.java │ │ │ ├── SilenceSkippingAudioProcessor.java │ │ │ ├── SimpleDecoderAudioRenderer.java │ │ │ ├── Sonic.java │ │ │ ├── SonicAudioProcessor.java │ │ │ ├── TeeAudioProcessor.java │ │ │ ├── TrimmingAudioProcessor.java │ │ │ ├── WavUtil.java │ │ │ └── package-info.java │ │ ├── database/ │ │ │ ├── DatabaseIOException.java │ │ │ ├── DatabaseProvider.java │ │ │ ├── DefaultDatabaseProvider.java │ │ │ ├── ExoDatabaseProvider.java │ │ │ ├── VersionTable.java │ │ │ └── package-info.java │ │ ├── decoder/ │ │ │ ├── Buffer.java │ │ │ ├── CryptoInfo.java │ │ │ ├── Decoder.java │ │ │ ├── DecoderCounters.java │ │ │ ├── DecoderInputBuffer.java │ │ │ ├── OutputBuffer.java │ │ │ ├── SimpleDecoder.java │ │ │ ├── SimpleOutputBuffer.java │ │ │ └── package-info.java │ │ ├── drm/ │ │ │ ├── ClearKeyUtil.java │ │ │ ├── DecryptionException.java │ │ │ ├── DefaultDrmSession.java │ │ │ ├── DefaultDrmSessionEventListener.java │ │ │ ├── DefaultDrmSessionManager.java │ │ │ ├── DrmInitData.java │ │ │ ├── DrmSession.java │ │ │ ├── DrmSessionManager.java │ │ │ ├── DummyExoMediaDrm.java │ │ │ ├── ErrorStateDrmSession.java │ │ │ ├── ExoMediaCrypto.java │ │ │ ├── ExoMediaDrm.java │ │ │ ├── FrameworkMediaCrypto.java │ │ │ ├── FrameworkMediaDrm.java │ │ │ ├── HttpMediaDrmCallback.java │ │ │ ├── KeysExpiredException.java │ │ │ ├── LocalMediaDrmCallback.java │ │ │ ├── MediaDrmCallback.java │ │ │ ├── OfflineLicenseHelper.java │ │ │ ├── UnsupportedDrmException.java │ │ │ ├── WidevineUtil.java │ │ │ └── package-info.java │ │ ├── extractor/ │ │ │ ├── BinarySearchSeeker.java │ │ │ ├── ChunkIndex.java │ │ │ ├── ConstantBitrateSeekMap.java │ │ │ ├── DefaultExtractorInput.java │ │ │ ├── DefaultExtractorsFactory.java │ │ │ ├── DummyExtractorOutput.java │ │ │ ├── DummyTrackOutput.java │ │ │ ├── Extractor.java │ │ │ ├── ExtractorInput.java │ │ │ ├── ExtractorOutput.java │ │ │ ├── ExtractorsFactory.java │ │ │ ├── GaplessInfoHolder.java │ │ │ ├── Id3Peeker.java │ │ │ ├── MpegAudioHeader.java │ │ │ ├── PositionHolder.java │ │ │ ├── SeekMap.java │ │ │ ├── SeekPoint.java │ │ │ ├── TrackOutput.java │ │ │ ├── amr/ │ │ │ │ └── AmrExtractor.java │ │ │ ├── flv/ │ │ │ │ ├── AudioTagPayloadReader.java │ │ │ │ ├── FlvExtractor.java │ │ │ │ ├── ScriptTagPayloadReader.java │ │ │ │ ├── TagPayloadReader.java │ │ │ │ └── VideoTagPayloadReader.java │ │ │ ├── mkv/ │ │ │ │ ├── DefaultEbmlReader.java │ │ │ │ ├── EbmlProcessor.java │ │ │ │ ├── EbmlReader.java │ │ │ │ ├── MatroskaExtractor.java │ │ │ │ ├── Sniffer.java │ │ │ │ └── VarintReader.java │ │ │ ├── mp3/ │ │ │ │ ├── ConstantBitrateSeeker.java │ │ │ │ ├── MlltSeeker.java │ │ │ │ ├── Mp3Extractor.java │ │ │ │ ├── Seeker.java │ │ │ │ ├── VbriSeeker.java │ │ │ │ └── XingSeeker.java │ │ │ ├── mp4/ │ │ │ │ ├── Atom.java │ │ │ │ ├── AtomParsers.java │ │ │ │ ├── DefaultSampleValues.java │ │ │ │ ├── FixedSampleSizeRechunker.java │ │ │ │ ├── FragmentedMp4Extractor.java │ │ │ │ ├── MdtaMetadataEntry.java │ │ │ │ ├── MetadataUtil.java │ │ │ │ ├── Mp4Extractor.java │ │ │ │ ├── PsshAtomUtil.java │ │ │ │ ├── Sniffer.java │ │ │ │ ├── Track.java │ │ │ │ ├── TrackEncryptionBox.java │ │ │ │ ├── TrackFragment.java │ │ │ │ └── TrackSampleTable.java │ │ │ ├── ogg/ │ │ │ │ ├── DefaultOggSeeker.java │ │ │ │ ├── FlacReader.java │ │ │ │ ├── OggExtractor.java │ │ │ │ ├── OggPacket.java │ │ │ │ ├── OggPageHeader.java │ │ │ │ ├── OggSeeker.java │ │ │ │ ├── OpusReader.java │ │ │ │ ├── StreamReader.java │ │ │ │ ├── VorbisBitArray.java │ │ │ │ ├── VorbisReader.java │ │ │ │ └── VorbisUtil.java │ │ │ ├── rawcc/ │ │ │ │ └── RawCcExtractor.java │ │ │ ├── ts/ │ │ │ │ ├── Ac3Extractor.java │ │ │ │ ├── Ac3Reader.java │ │ │ │ ├── Ac4Extractor.java │ │ │ │ ├── Ac4Reader.java │ │ │ │ ├── AdtsExtractor.java │ │ │ │ ├── AdtsReader.java │ │ │ │ ├── DefaultTsPayloadReaderFactory.java │ │ │ │ ├── DtsReader.java │ │ │ │ ├── DvbSubtitleReader.java │ │ │ │ ├── ElementaryStreamReader.java │ │ │ │ ├── H262Reader.java │ │ │ │ ├── H264Reader.java │ │ │ │ ├── H265Reader.java │ │ │ │ ├── Id3Reader.java │ │ │ │ ├── LatmReader.java │ │ │ │ ├── MpegAudioReader.java │ │ │ │ ├── NalUnitTargetBuffer.java │ │ │ │ ├── PesReader.java │ │ │ │ ├── PsBinarySearchSeeker.java │ │ │ │ ├── PsDurationReader.java │ │ │ │ ├── PsExtractor.java │ │ │ │ ├── SectionPayloadReader.java │ │ │ │ ├── SectionReader.java │ │ │ │ ├── SeiReader.java │ │ │ │ ├── SpliceInfoSectionReader.java │ │ │ │ ├── TsBinarySearchSeeker.java │ │ │ │ ├── TsDurationReader.java │ │ │ │ ├── TsExtractor.java │ │ │ │ ├── TsPayloadReader.java │ │ │ │ ├── TsUtil.java │ │ │ │ └── UserDataReader.java │ │ │ └── wav/ │ │ │ ├── WavExtractor.java │ │ │ ├── WavHeader.java │ │ │ └── WavHeaderReader.java │ │ ├── mediacodec/ │ │ │ ├── MediaCodecInfo.java │ │ │ ├── MediaCodecRenderer.java │ │ │ ├── MediaCodecSelector.java │ │ │ ├── MediaCodecUtil.java │ │ │ ├── MediaFormatUtil.java │ │ │ └── package-info.java │ │ ├── metadata/ │ │ │ ├── Metadata.java │ │ │ ├── MetadataDecoder.java │ │ │ ├── MetadataDecoderFactory.java │ │ │ ├── MetadataInputBuffer.java │ │ │ ├── MetadataOutput.java │ │ │ ├── MetadataRenderer.java │ │ │ ├── emsg/ │ │ │ │ ├── EventMessage.java │ │ │ │ ├── EventMessageDecoder.java │ │ │ │ ├── EventMessageEncoder.java │ │ │ │ └── package-info.java │ │ │ ├── flac/ │ │ │ │ ├── PictureFrame.java │ │ │ │ ├── VorbisComment.java │ │ │ │ └── package-info.java │ │ │ ├── icy/ │ │ │ │ ├── IcyDecoder.java │ │ │ │ ├── IcyHeaders.java │ │ │ │ ├── IcyInfo.java │ │ │ │ └── package-info.java │ │ │ ├── id3/ │ │ │ │ ├── ApicFrame.java │ │ │ │ ├── BinaryFrame.java │ │ │ │ ├── ChapterFrame.java │ │ │ │ ├── ChapterTocFrame.java │ │ │ │ ├── CommentFrame.java │ │ │ │ ├── GeobFrame.java │ │ │ │ ├── Id3Decoder.java │ │ │ │ ├── Id3Frame.java │ │ │ │ ├── InternalFrame.java │ │ │ │ ├── MlltFrame.java │ │ │ │ ├── PrivFrame.java │ │ │ │ ├── TextInformationFrame.java │ │ │ │ ├── UrlLinkFrame.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── scte35/ │ │ │ ├── PrivateCommand.java │ │ │ ├── SpliceCommand.java │ │ │ ├── SpliceInfoDecoder.java │ │ │ ├── SpliceInsertCommand.java │ │ │ ├── SpliceNullCommand.java │ │ │ ├── SpliceScheduleCommand.java │ │ │ ├── TimeSignalCommand.java │ │ │ └── package-info.java │ │ ├── offline/ │ │ │ ├── ActionFile.java │ │ │ ├── ActionFileUpgradeUtil.java │ │ │ ├── DefaultDownloadIndex.java │ │ │ ├── DefaultDownloaderFactory.java │ │ │ ├── Download.java │ │ │ ├── DownloadCursor.java │ │ │ ├── DownloadException.java │ │ │ ├── DownloadHelper.java │ │ │ ├── DownloadIndex.java │ │ │ ├── DownloadManager.java │ │ │ ├── DownloadProgress.java │ │ │ ├── DownloadRequest.java │ │ │ ├── DownloadService.java │ │ │ ├── Downloader.java │ │ │ ├── DownloaderConstructorHelper.java │ │ │ ├── DownloaderFactory.java │ │ │ ├── FilterableManifest.java │ │ │ ├── FilteringManifestParser.java │ │ │ ├── ProgressiveDownloader.java │ │ │ ├── SegmentDownloader.java │ │ │ ├── StreamKey.java │ │ │ ├── WritableDownloadIndex.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── scheduler/ │ │ │ ├── PlatformScheduler.java │ │ │ ├── Requirements.java │ │ │ ├── RequirementsWatcher.java │ │ │ ├── Scheduler.java │ │ │ └── package-info.java │ │ ├── source/ │ │ │ ├── AbstractConcatenatedTimeline.java │ │ │ ├── AdaptiveMediaSourceEventListener.java │ │ │ ├── BaseMediaSource.java │ │ │ ├── BehindLiveWindowException.java │ │ │ ├── ClippingMediaPeriod.java │ │ │ ├── ClippingMediaSource.java │ │ │ ├── CompositeMediaSource.java │ │ │ ├── CompositeSequenceableLoader.java │ │ │ ├── CompositeSequenceableLoaderFactory.java │ │ │ ├── ConcatenatingMediaSource.java │ │ │ ├── DefaultCompositeSequenceableLoaderFactory.java │ │ │ ├── DefaultMediaSourceEventListener.java │ │ │ ├── EmptySampleStream.java │ │ │ ├── ExtractorMediaSource.java │ │ │ ├── ForwardingTimeline.java │ │ │ ├── IcyDataSource.java │ │ │ ├── LoopingMediaSource.java │ │ │ ├── MaskingMediaPeriod.java │ │ │ ├── MaskingMediaSource.java │ │ │ ├── MediaPeriod.java │ │ │ ├── MediaSource.java │ │ │ ├── MediaSourceEventListener.java │ │ │ ├── MediaSourceFactory.java │ │ │ ├── MergingMediaPeriod.java │ │ │ ├── MergingMediaSource.java │ │ │ ├── ProgressiveMediaPeriod.java │ │ │ ├── ProgressiveMediaSource.java │ │ │ ├── SampleMetadataQueue.java │ │ │ ├── SampleQueue.java │ │ │ ├── SampleStream.java │ │ │ ├── SequenceableLoader.java │ │ │ ├── ShuffleOrder.java │ │ │ ├── SilenceMediaSource.java │ │ │ ├── SinglePeriodTimeline.java │ │ │ ├── SingleSampleMediaPeriod.java │ │ │ ├── SingleSampleMediaSource.java │ │ │ ├── TrackGroup.java │ │ │ ├── TrackGroupArray.java │ │ │ ├── UnrecognizedInputFormatException.java │ │ │ ├── ads/ │ │ │ │ ├── AdPlaybackState.java │ │ │ │ ├── AdsLoader.java │ │ │ │ ├── AdsMediaSource.java │ │ │ │ └── SinglePeriodAdTimeline.java │ │ │ ├── chunk/ │ │ │ │ ├── BaseMediaChunk.java │ │ │ │ ├── BaseMediaChunkIterator.java │ │ │ │ ├── BaseMediaChunkOutput.java │ │ │ │ ├── Chunk.java │ │ │ │ ├── ChunkExtractorWrapper.java │ │ │ │ ├── ChunkHolder.java │ │ │ │ ├── ChunkSampleStream.java │ │ │ │ ├── ChunkSource.java │ │ │ │ ├── ContainerMediaChunk.java │ │ │ │ ├── DataChunk.java │ │ │ │ ├── InitializationChunk.java │ │ │ │ ├── MediaChunk.java │ │ │ │ ├── MediaChunkIterator.java │ │ │ │ ├── MediaChunkListIterator.java │ │ │ │ └── SingleSampleMediaChunk.java │ │ │ ├── dash/ │ │ │ │ ├── DashChunkSource.java │ │ │ │ ├── DashManifestStaleException.java │ │ │ │ ├── DashMediaPeriod.java │ │ │ │ ├── DashMediaSource.java │ │ │ │ ├── DashSegmentIndex.java │ │ │ │ ├── DashUtil.java │ │ │ │ ├── DashWrappingSegmentIndex.java │ │ │ │ ├── DefaultDashChunkSource.java │ │ │ │ ├── EventSampleStream.java │ │ │ │ ├── PlayerEmsgHandler.java │ │ │ │ ├── manifest/ │ │ │ │ │ ├── AdaptationSet.java │ │ │ │ │ ├── DashManifest.java │ │ │ │ │ ├── DashManifestParser.java │ │ │ │ │ ├── Descriptor.java │ │ │ │ │ ├── EventStream.java │ │ │ │ │ ├── Period.java │ │ │ │ │ ├── ProgramInformation.java │ │ │ │ │ ├── RangedUri.java │ │ │ │ │ ├── Representation.java │ │ │ │ │ ├── SegmentBase.java │ │ │ │ │ ├── SingleSegmentIndex.java │ │ │ │ │ ├── UrlTemplate.java │ │ │ │ │ ├── UtcTimingElement.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── offline/ │ │ │ │ │ ├── DashDownloader.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── hls/ │ │ │ │ ├── Aes128DataSource.java │ │ │ │ ├── DefaultHlsDataSourceFactory.java │ │ │ │ ├── DefaultHlsExtractorFactory.java │ │ │ │ ├── FullSegmentEncryptionKeyCache.java │ │ │ │ ├── HlsChunkSource.java │ │ │ │ ├── HlsDataSourceFactory.java │ │ │ │ ├── HlsExtractorFactory.java │ │ │ │ ├── HlsManifest.java │ │ │ │ ├── HlsMediaChunk.java │ │ │ │ ├── HlsMediaPeriod.java │ │ │ │ ├── HlsMediaSource.java │ │ │ │ ├── HlsSampleStream.java │ │ │ │ ├── HlsSampleStreamWrapper.java │ │ │ │ ├── HlsTrackMetadataEntry.java │ │ │ │ ├── SampleQueueMappingException.java │ │ │ │ ├── TimestampAdjusterProvider.java │ │ │ │ ├── WebvttExtractor.java │ │ │ │ ├── offline/ │ │ │ │ │ ├── HlsDownloader.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ └── playlist/ │ │ │ │ ├── DefaultHlsPlaylistParserFactory.java │ │ │ │ ├── DefaultHlsPlaylistTracker.java │ │ │ │ ├── FilteringHlsPlaylistParserFactory.java │ │ │ │ ├── HlsMasterPlaylist.java │ │ │ │ ├── HlsMediaPlaylist.java │ │ │ │ ├── HlsPlaylist.java │ │ │ │ ├── HlsPlaylistParser.java │ │ │ │ ├── HlsPlaylistParserFactory.java │ │ │ │ ├── HlsPlaylistTracker.java │ │ │ │ └── package-info.java │ │ │ └── smoothstreaming/ │ │ │ ├── DefaultSsChunkSource.java │ │ │ ├── SsChunkSource.java │ │ │ ├── SsMediaPeriod.java │ │ │ ├── SsMediaSource.java │ │ │ ├── manifest/ │ │ │ │ ├── SsManifest.java │ │ │ │ ├── SsManifestParser.java │ │ │ │ ├── SsUtil.java │ │ │ │ └── package-info.java │ │ │ ├── offline/ │ │ │ │ ├── SsDownloader.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── text/ │ │ │ ├── CaptionStyleCompat.java │ │ │ ├── Cue.java │ │ │ ├── SimpleSubtitleDecoder.java │ │ │ ├── SimpleSubtitleOutputBuffer.java │ │ │ ├── Subtitle.java │ │ │ ├── SubtitleDecoder.java │ │ │ ├── SubtitleDecoderException.java │ │ │ ├── SubtitleDecoderFactory.java │ │ │ ├── SubtitleInputBuffer.java │ │ │ ├── SubtitleOutputBuffer.java │ │ │ ├── TextOutput.java │ │ │ ├── TextRenderer.java │ │ │ ├── cea/ │ │ │ │ ├── Cea608Decoder.java │ │ │ │ ├── Cea708Cue.java │ │ │ │ ├── Cea708Decoder.java │ │ │ │ ├── Cea708InitializationData.java │ │ │ │ ├── CeaDecoder.java │ │ │ │ ├── CeaSubtitle.java │ │ │ │ ├── CeaUtil.java │ │ │ │ └── package-info.java │ │ │ ├── dvb/ │ │ │ │ ├── DvbDecoder.java │ │ │ │ ├── DvbParser.java │ │ │ │ ├── DvbSubtitle.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── pgs/ │ │ │ │ ├── PgsDecoder.java │ │ │ │ ├── PgsSubtitle.java │ │ │ │ └── package-info.java │ │ │ ├── ssa/ │ │ │ │ ├── SsaDecoder.java │ │ │ │ ├── SsaDialogueFormat.java │ │ │ │ ├── SsaStyle.java │ │ │ │ ├── SsaSubtitle.java │ │ │ │ └── package-info.java │ │ │ ├── subrip/ │ │ │ │ ├── SubripDecoder.java │ │ │ │ ├── SubripSubtitle.java │ │ │ │ └── package-info.java │ │ │ ├── ttml/ │ │ │ │ ├── TtmlDecoder.java │ │ │ │ ├── TtmlNode.java │ │ │ │ ├── TtmlRegion.java │ │ │ │ ├── TtmlRenderUtil.java │ │ │ │ ├── TtmlStyle.java │ │ │ │ ├── TtmlSubtitle.java │ │ │ │ └── package-info.java │ │ │ ├── tx3g/ │ │ │ │ ├── Tx3gDecoder.java │ │ │ │ ├── Tx3gSubtitle.java │ │ │ │ └── package-info.java │ │ │ └── webvtt/ │ │ │ ├── CssParser.java │ │ │ ├── Mp4WebvttDecoder.java │ │ │ ├── Mp4WebvttSubtitle.java │ │ │ ├── WebvttCssStyle.java │ │ │ ├── WebvttCue.java │ │ │ ├── WebvttCueParser.java │ │ │ ├── WebvttDecoder.java │ │ │ ├── WebvttParserUtil.java │ │ │ ├── WebvttSubtitle.java │ │ │ └── package-info.java │ │ ├── trackselection/ │ │ │ ├── AdaptiveTrackSelection.java │ │ │ ├── BaseTrackSelection.java │ │ │ ├── BufferSizeAdaptationBuilder.java │ │ │ ├── DefaultTrackSelector.java │ │ │ ├── FixedTrackSelection.java │ │ │ ├── MappingTrackSelector.java │ │ │ ├── RandomTrackSelection.java │ │ │ ├── TrackSelection.java │ │ │ ├── TrackSelectionArray.java │ │ │ ├── TrackSelectionParameters.java │ │ │ ├── TrackSelectionUtil.java │ │ │ ├── TrackSelector.java │ │ │ ├── TrackSelectorResult.java │ │ │ └── package-info.java │ │ ├── upstream/ │ │ │ ├── Allocation.java │ │ │ ├── Allocator.java │ │ │ ├── AssetDataSource.java │ │ │ ├── BandwidthMeter.java │ │ │ ├── BaseDataSource.java │ │ │ ├── ByteArrayDataSink.java │ │ │ ├── ByteArrayDataSource.java │ │ │ ├── ContentDataSource.java │ │ │ ├── DataSchemeDataSource.java │ │ │ ├── DataSink.java │ │ │ ├── DataSource.java │ │ │ ├── DataSourceException.java │ │ │ ├── DataSourceInputStream.java │ │ │ ├── DataSpec.java │ │ │ ├── DefaultAllocator.java │ │ │ ├── DefaultBandwidthMeter.java │ │ │ ├── DefaultDataSource.java │ │ │ ├── DefaultDataSourceFactory.java │ │ │ ├── DefaultHttpDataSource.java │ │ │ ├── DefaultHttpDataSourceFactory.java │ │ │ ├── DefaultLoadErrorHandlingPolicy.java │ │ │ ├── DummyDataSource.java │ │ │ ├── FileDataSource.java │ │ │ ├── FileDataSourceFactory.java │ │ │ ├── HttpDataSource.java │ │ │ ├── LoadErrorHandlingPolicy.java │ │ │ ├── Loader.java │ │ │ ├── LoaderErrorThrower.java │ │ │ ├── ParsingLoadable.java │ │ │ ├── PriorityDataSource.java │ │ │ ├── PriorityDataSourceFactory.java │ │ │ ├── RawResourceDataSource.java │ │ │ ├── ResolvingDataSource.java │ │ │ ├── StatsDataSource.java │ │ │ ├── TeeDataSource.java │ │ │ ├── TransferListener.java │ │ │ ├── UdpDataSource.java │ │ │ ├── cache/ │ │ │ │ ├── Cache.java │ │ │ │ ├── CacheDataSink.java │ │ │ │ ├── CacheDataSinkFactory.java │ │ │ │ ├── CacheDataSource.java │ │ │ │ ├── CacheDataSourceFactory.java │ │ │ │ ├── CacheEvictor.java │ │ │ │ ├── CacheFileMetadata.java │ │ │ │ ├── CacheFileMetadataIndex.java │ │ │ │ ├── CacheKeyFactory.java │ │ │ │ ├── CacheSpan.java │ │ │ │ ├── CacheUtil.java │ │ │ │ ├── CachedContent.java │ │ │ │ ├── CachedContentIndex.java │ │ │ │ ├── CachedRegionTracker.java │ │ │ │ ├── ContentMetadata.java │ │ │ │ ├── ContentMetadataMutations.java │ │ │ │ ├── DefaultContentMetadata.java │ │ │ │ ├── LeastRecentlyUsedCacheEvictor.java │ │ │ │ ├── NoOpCacheEvictor.java │ │ │ │ ├── SimpleCache.java │ │ │ │ └── SimpleCacheSpan.java │ │ │ └── crypto/ │ │ │ ├── AesCipherDataSink.java │ │ │ ├── AesCipherDataSource.java │ │ │ ├── AesFlushingCipher.java │ │ │ └── CryptoUtil.java │ │ ├── util/ │ │ │ ├── Assertions.java │ │ │ ├── AtomicFile.java │ │ │ ├── Clock.java │ │ │ ├── CodecSpecificDataUtil.java │ │ │ ├── ColorParser.java │ │ │ ├── ConditionVariable.java │ │ │ ├── EGLSurfaceTexture.java │ │ │ ├── ErrorMessageProvider.java │ │ │ ├── EventDispatcher.java │ │ │ ├── EventLogger.java │ │ │ ├── FlacStreamMetadata.java │ │ │ ├── GlUtil.java │ │ │ ├── HandlerWrapper.java │ │ │ ├── LibraryLoader.java │ │ │ ├── Log.java │ │ │ ├── LongArray.java │ │ │ ├── MediaClock.java │ │ │ ├── MimeTypes.java │ │ │ ├── NalUnitUtil.java │ │ │ ├── NonNullApi.java │ │ │ ├── NotificationUtil.java │ │ │ ├── ParsableBitArray.java │ │ │ ├── ParsableByteArray.java │ │ │ ├── ParsableNalUnitBitArray.java │ │ │ ├── Predicate.java │ │ │ ├── PriorityTaskManager.java │ │ │ ├── RepeatModeUtil.java │ │ │ ├── ReusableBufferedOutputStream.java │ │ │ ├── SlidingPercentile.java │ │ │ ├── StandaloneMediaClock.java │ │ │ ├── SystemClock.java │ │ │ ├── SystemHandlerWrapper.java │ │ │ ├── TimedValueQueue.java │ │ │ ├── TimestampAdjuster.java │ │ │ ├── TraceUtil.java │ │ │ ├── UriUtil.java │ │ │ ├── Util.java │ │ │ ├── XmlPullParserUtil.java │ │ │ └── package-info.java │ │ └── video/ │ │ ├── AvcConfig.java │ │ ├── ColorInfo.java │ │ ├── DolbyVisionConfig.java │ │ ├── DummySurface.java │ │ ├── HevcConfig.java │ │ ├── MediaCodecVideoRenderer.java │ │ ├── SimpleDecoderVideoRenderer.java │ │ ├── VideoDecoderException.java │ │ ├── VideoDecoderGLSurfaceView.java │ │ ├── VideoDecoderInputBuffer.java │ │ ├── VideoDecoderOutputBuffer.java │ │ ├── VideoDecoderOutputBufferRenderer.java │ │ ├── VideoDecoderRenderer.java │ │ ├── VideoFrameMetadataListener.java │ │ ├── VideoFrameReleaseTimeHelper.java │ │ ├── VideoListener.java │ │ ├── VideoRendererEventListener.java │ │ ├── package-info.java │ │ └── spherical/ │ │ ├── CameraMotionListener.java │ │ ├── CameraMotionRenderer.java │ │ ├── FrameRotationQueue.java │ │ ├── Projection.java │ │ ├── ProjectionDecoder.java │ │ └── package-info.java │ └── res/ │ └── values/ │ └── strings.xml ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── ijkplayer/ │ ├── .gitignore │ ├── build.gradle │ ├── ijkplayer.iml │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── tv/ │ │ └── danmaku/ │ │ └── ijk/ │ │ └── media/ │ │ └── player/ │ │ ├── AbstractMediaPlayer.java │ │ ├── AndroidMediaPlayer.java │ │ ├── IMediaPlayer.java │ │ ├── ISurfaceTextureHolder.java │ │ ├── ISurfaceTextureHost.java │ │ ├── IjkLibLoader.java │ │ ├── IjkMediaCodecInfo.java │ │ ├── IjkMediaMeta.java │ │ ├── IjkMediaPlayer.java │ │ ├── IjkTimedText.java │ │ ├── MediaInfo.java │ │ ├── MediaPlayerProxy.java │ │ ├── TextureMediaPlayer.java │ │ ├── annotations/ │ │ │ ├── AccessedByNative.java │ │ │ └── CalledByNative.java │ │ ├── exceptions/ │ │ │ └── IjkMediaException.java │ │ ├── ffmpeg/ │ │ │ └── FFmpegApi.java │ │ ├── misc/ │ │ │ ├── AndroidMediaFormat.java │ │ │ ├── AndroidTrackInfo.java │ │ │ ├── IAndroidIO.java │ │ │ ├── IMediaDataSource.java │ │ │ ├── IMediaFormat.java │ │ │ ├── ITrackInfo.java │ │ │ ├── IjkMediaFormat.java │ │ │ └── IjkTrackInfo.java │ │ └── pragma/ │ │ ├── DebugLog.java │ │ └── Pragma.java │ └── res/ │ └── values/ │ └── strings.xml ├── mediaproxy/ │ ├── .gitignore │ ├── build.gradle │ ├── mediaproxy.iml │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── media/ │ │ └── cache/ │ │ ├── CacheManager.java │ │ ├── DownloadConstants.java │ │ ├── LocalProxyConfig.java │ │ ├── StorageManager.java │ │ ├── VideoCacheException.java │ │ ├── VideoDownloadManager.java │ │ ├── VideoDownloadQueue.java │ │ ├── VideoInfoParserManager.java │ │ ├── download/ │ │ │ ├── BaseVideoDownloadTask.java │ │ │ ├── M3U8VideoDownloadTask.java │ │ │ └── VideoDownloadTask.java │ │ ├── hls/ │ │ │ ├── M3U8.java │ │ │ ├── M3U8Constants.java │ │ │ ├── M3U8Ts.java │ │ │ └── M3U8Utils.java │ │ ├── http/ │ │ │ ├── ChunkedOutputStream.java │ │ │ ├── ContentType.java │ │ │ ├── HttpRequest.java │ │ │ ├── HttpResponse.java │ │ │ ├── IState.java │ │ │ ├── Method.java │ │ │ ├── ResponseState.java │ │ │ └── SocketProcessorTask.java │ │ ├── listener/ │ │ │ ├── IDownloadInfosCallback.java │ │ │ ├── IDownloadListener.java │ │ │ ├── IDownloadTaskListener.java │ │ │ ├── IVideoInfoCallback.java │ │ │ └── IVideoInfoParseCallback.java │ │ ├── model/ │ │ │ ├── Video.java │ │ │ ├── VideoCacheInfo.java │ │ │ ├── VideoTaskItem.java │ │ │ ├── VideoTaskMode.java │ │ │ └── VideoTaskState.java │ │ ├── proxy/ │ │ │ ├── AsyncProxyServer.java │ │ │ └── CustomProxyServer.java │ │ └── utils/ │ │ ├── DownloadExceptionUtils.java │ │ ├── HttpUtils.java │ │ ├── LocalProxyThreadUtils.java │ │ ├── LocalProxyUtils.java │ │ └── StorageUtils.java │ └── res/ │ └── values/ │ └── strings.xml ├── playersdk/ │ ├── .gitignore │ ├── build.gradle │ ├── playersdk.iml │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── android/ │ │ └── player/ │ │ ├── CommonPlayer.java │ │ ├── IPlayer.java │ │ ├── PlayerAttributes.java │ │ ├── PlayerType.java │ │ ├── impl/ │ │ │ ├── ExoPlayerImpl.java │ │ │ ├── IjkPlayerImpl.java │ │ │ ├── MediaPlayerImpl.java │ │ │ └── PlayerImpl.java │ │ └── proxy/ │ │ └── LocalProxyPlayerImpl.java │ └── res/ │ └── values/ │ └── strings.xml └── settings.gradle