├── .gitignore ├── .idea ├── codeStyles │ └── Project.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── VideoPalyer_Structure.jpg ├── VideoPlayer.mdj ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── ybj366533 │ │ └── yy_videoplayer │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── ybj366533 │ │ │ └── yy_videoplayer │ │ │ ├── AppApplication.java │ │ │ ├── adapter │ │ │ ├── RecycleViewAdapter.java │ │ │ ├── RecyclerBaseAdapter.java │ │ │ ├── RecyclerNormalAdapter.java │ │ │ └── VideoPlayerListAdapter.java │ │ │ ├── anim │ │ │ ├── AnimListener.kt │ │ │ ├── AnimSet.kt │ │ │ └── ValueAnim.kt │ │ │ ├── effect │ │ │ ├── BitmapEffect.java │ │ │ └── BitmapIconEffect.java │ │ │ ├── holder │ │ │ ├── RecyclerItemBaseHolder.java │ │ │ ├── RecyclerItemNormalHolder.java │ │ │ └── RecyclerItemViewHolder.java │ │ │ ├── listener │ │ │ ├── AppBarStateChangeListener.java │ │ │ └── OnTransitionListener.java │ │ │ ├── model │ │ │ ├── PlayerVideoModel.java │ │ │ ├── SwitchVideoModel.java │ │ │ └── VideoModel.java │ │ │ ├── ui │ │ │ ├── MainActivity.java │ │ │ ├── ScrollingActivity.java │ │ │ ├── VideoPlayerListActivity.java │ │ │ └── ViewPagerActivity.java │ │ │ ├── utils │ │ │ ├── ScrollCalculatorHelper.java │ │ │ ├── SmallVideoHelper.java │ │ │ ├── ViewPlageCalculatorHelper.java │ │ │ └── floatUtil │ │ │ │ ├── FloatActivity.java │ │ │ │ ├── FloatLifecycle.java │ │ │ │ ├── FloatPhone.java │ │ │ │ ├── FloatToast.java │ │ │ │ ├── FloatView.java │ │ │ │ ├── FloatWindow.java │ │ │ │ ├── IFloatWindow.java │ │ │ │ ├── IFloatWindowImpl.java │ │ │ │ ├── LifecycleListener.java │ │ │ │ ├── MoveType.java │ │ │ │ ├── PermissionListener.java │ │ │ │ ├── Screen.java │ │ │ │ └── Util.java │ │ │ ├── video │ │ │ ├── CustomRenderVideoPlayer.java │ │ │ ├── EmptyControlVideo.java │ │ │ ├── FloatingVideo.java │ │ │ ├── LandLayoutVideo.java │ │ │ ├── MListVideoPlayer.java │ │ │ ├── MultiSampleVideo.java │ │ │ ├── SampleControlVideo.java │ │ │ ├── SampleCoverVideo.java │ │ │ ├── SampleVideo.java │ │ │ ├── SmartPickVideo.java │ │ │ ├── listener │ │ │ │ └── MiGuVideoPlayerListener.java │ │ │ └── manager │ │ │ │ └── CustomManager.java │ │ │ └── view │ │ │ ├── CustomInputDialog.java │ │ │ ├── CustomRenderView.java │ │ │ ├── CustomTextureSurface.java │ │ │ ├── FloatPlayerView.java │ │ │ ├── LoadingDialog.java │ │ │ ├── ScrollWebView.java │ │ │ ├── SwitchVideoTypeDialog.java │ │ │ └── VideoSeekBar.java │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable-xhdpi │ │ ├── custom_enlarge.png │ │ └── custom_shrink.png │ │ ├── drawable │ │ ├── bg_wiht_shadow.xml │ │ ├── circle_big_red.xml │ │ ├── dialog_btn_bg.xml │ │ ├── ic_launcher_background.xml │ │ ├── play_arrow.xml │ │ ├── video_new_progress.xml │ │ ├── video_new_seekbar_progress.xml │ │ ├── video_new_seekbar_thumb.xml │ │ ├── video_new_volume_progress_bg.xml │ │ ├── video_seek_new_thumb_normal.xml │ │ └── video_seek_new_thumb_press.xml │ │ ├── layout │ │ ├── activity_details_player.xml │ │ ├── activity_pager.xml │ │ ├── activity_play.xml │ │ ├── activity_recycler_view.xml │ │ ├── activity_scrolling.xml │ │ ├── activity_video_player_list.xml │ │ ├── activity_view_pager_layout_manager.xml │ │ ├── content_scrolling.xml │ │ ├── empty_control_video.xml │ │ ├── fragment_page.xml │ │ ├── item_view_pager.xml │ │ ├── layout_child.xml │ │ ├── layout_custom_dialog.xml │ │ ├── layout_floating_play.xml │ │ ├── layout_floating_video.xml │ │ ├── layout_loading_dialog.xml │ │ ├── list_video_item.xml │ │ ├── list_video_item_ad.xml │ │ ├── list_video_item_mutli.xml │ │ ├── list_video_item_normal.xml │ │ ├── list_video_plsyer_item.xml │ │ ├── player_activity_main.xml │ │ ├── sample_control_video.xml │ │ ├── sample_video.xml │ │ ├── sample_video_land.xml │ │ ├── sample_video_normal.xml │ │ ├── sample_video_pick.xml │ │ ├── switch_video_dialog.xml │ │ ├── switch_video_dialog_item.xml │ │ ├── video_layout_cover.xml │ │ └── video_layout_preview.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── add_bg.png │ │ ├── add_icon.png │ │ ├── heart_icon.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_round.png │ │ ├── img_video_1.png │ │ ├── img_video_2.png │ │ ├── msg_icon.png │ │ ├── search_icon.png │ │ └── share_icon.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── raw │ │ ├── comments.xml │ │ ├── video_1.mp4 │ │ └── video_2.mp4 │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── id.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── ybj366533 │ └── yy_videoplayer │ └── ExampleUnitTest.kt ├── build.gradle ├── config.gradle ├── dependencies.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle ├── videoplayer-arm64 ├── .gitignore ├── build.gradle ├── gradle.properties ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── tv │ │ └── danmaku │ │ └── ijk │ │ └── media │ │ └── player_arm64 │ │ └── ApplicationTest.java │ └── main │ ├── .classpath │ ├── .project │ ├── .settings │ └── org.eclipse.jdt.core.prefs │ ├── AndroidManifest.xml │ ├── java │ └── tv │ │ └── danmaku │ │ └── ijk │ │ └── media │ │ └── player_arm64 │ │ └── Pragma.java │ ├── jni │ ├── Android.mk │ ├── Application.mk │ ├── ffmpeg │ │ └── Android.mk │ └── ijkmedia │ │ ├── Android.mk │ │ ├── ijkj4a │ │ ├── .gitignore │ │ ├── Android.mk │ │ ├── Makefile │ │ ├── j4a │ │ │ ├── class │ │ │ │ ├── android │ │ │ │ │ ├── media │ │ │ │ │ │ ├── AudioTrack.c │ │ │ │ │ │ ├── AudioTrack.h │ │ │ │ │ │ ├── AudioTrack.include.j4a │ │ │ │ │ │ ├── AudioTrack.loader.j4a │ │ │ │ │ │ ├── MediaCodec.c │ │ │ │ │ │ ├── MediaCodec.h │ │ │ │ │ │ ├── MediaCodec.include.j4a │ │ │ │ │ │ ├── MediaCodec.loader.j4a │ │ │ │ │ │ ├── MediaFormat.c │ │ │ │ │ │ ├── MediaFormat.h │ │ │ │ │ │ ├── MediaFormat.include.j4a │ │ │ │ │ │ ├── MediaFormat.loader.j4a │ │ │ │ │ │ ├── PlaybackParams.c │ │ │ │ │ │ ├── PlaybackParams.h │ │ │ │ │ │ ├── PlaybackParams.include.j4a │ │ │ │ │ │ └── PlaybackParams.loader.j4a │ │ │ │ │ └── os │ │ │ │ │ │ ├── Build.c │ │ │ │ │ │ ├── Build.h │ │ │ │ │ │ ├── Build.include.j4a │ │ │ │ │ │ ├── Build.loader.j4a │ │ │ │ │ │ ├── Bundle.c │ │ │ │ │ │ ├── Bundle.h │ │ │ │ │ │ ├── Bundle.include.j4a │ │ │ │ │ │ └── Bundle.loader.j4a │ │ │ │ ├── java │ │ │ │ │ ├── nio │ │ │ │ │ │ ├── Buffer.c │ │ │ │ │ │ ├── Buffer.h │ │ │ │ │ │ ├── Buffer.include.j4a │ │ │ │ │ │ ├── Buffer.loader.j4a │ │ │ │ │ │ ├── ByteBuffer.c │ │ │ │ │ │ ├── ByteBuffer.h │ │ │ │ │ │ ├── ByteBuffer.include.j4a │ │ │ │ │ │ └── ByteBuffer.loader.j4a │ │ │ │ │ └── util │ │ │ │ │ │ ├── ArrayList.c │ │ │ │ │ │ ├── ArrayList.h │ │ │ │ │ │ ├── ArrayList.include.j4a │ │ │ │ │ │ └── ArrayList.loader.j4a │ │ │ │ └── tv │ │ │ │ │ └── danmaku │ │ │ │ │ └── ijk │ │ │ │ │ └── media │ │ │ │ │ └── player │ │ │ │ │ ├── IjkMediaPlayer.c │ │ │ │ │ ├── IjkMediaPlayer.h │ │ │ │ │ ├── IjkMediaPlayer.include.j4a │ │ │ │ │ ├── IjkMediaPlayer.loader.j4a │ │ │ │ │ └── misc │ │ │ │ │ ├── IAndroidIO.c │ │ │ │ │ ├── IAndroidIO.h │ │ │ │ │ ├── IAndroidIO.include.j4a │ │ │ │ │ ├── IAndroidIO.loader.j4a │ │ │ │ │ ├── IMediaDataSource.c │ │ │ │ │ ├── IMediaDataSource.h │ │ │ │ │ ├── IMediaDataSource.include.j4a │ │ │ │ │ └── IMediaDataSource.loader.j4a │ │ │ ├── j4a_allclasses.c │ │ │ ├── j4a_allclasses.h │ │ │ ├── j4a_allclasses.include.h │ │ │ ├── j4a_allclasses.loader.h │ │ │ ├── j4a_base.c │ │ │ └── j4a_base.h │ │ ├── j4au │ │ │ └── class │ │ │ │ ├── android │ │ │ │ └── media │ │ │ │ │ ├── AudioTrack.util.c │ │ │ │ │ └── AudioTrack.util.h │ │ │ │ └── java │ │ │ │ └── nio │ │ │ │ ├── ByteBuffer.util.c │ │ │ │ └── ByteBuffer.util.h │ │ └── java │ │ │ ├── android │ │ │ ├── media │ │ │ │ ├── AudioTrack.java │ │ │ │ ├── MediaCodec.java │ │ │ │ ├── MediaCrypto.java │ │ │ │ ├── MediaFormat.java │ │ │ │ └── PlaybackParams.java │ │ │ └── os │ │ │ │ ├── Build.java │ │ │ │ └── Bundle.java │ │ │ ├── java │ │ │ ├── nio │ │ │ │ ├── Buffer.java │ │ │ │ └── ByteBuffer.java │ │ │ └── util │ │ │ │ └── ArrayList.java │ │ │ └── tv │ │ │ └── danmaku │ │ │ └── ijk │ │ │ └── media │ │ │ └── player │ │ │ ├── IjkMediaPlayer.java │ │ │ └── misc │ │ │ ├── IAndroidIO.java │ │ │ └── IMediaDataSource.java │ │ ├── ijkplayer │ │ ├── .gitignore │ │ ├── Android.mk │ │ ├── android │ │ │ ├── ffmpeg_api_jni.c │ │ │ ├── ffmpeg_api_jni.h │ │ │ ├── ijkplayer_android.c │ │ │ ├── ijkplayer_android.h │ │ │ ├── ijkplayer_android_def.h │ │ │ ├── ijkplayer_jni.c │ │ │ └── pipeline │ │ │ │ ├── ffpipeline_android.c │ │ │ │ ├── ffpipeline_android.h │ │ │ │ ├── ffpipenode_android_mediacodec_vdec.c │ │ │ │ ├── ffpipenode_android_mediacodec_vdec.h │ │ │ │ ├── h264_nal.h │ │ │ │ ├── hevc_nal.h │ │ │ │ └── mpeg4_esds.h │ │ ├── config.h │ │ ├── ff_cmdutils.c │ │ ├── ff_cmdutils.h │ │ ├── ff_fferror.h │ │ ├── ff_ffinc.h │ │ ├── ff_ffmsg.h │ │ ├── ff_ffmsg_queue.h │ │ ├── ff_ffpipeline.c │ │ ├── ff_ffpipeline.h │ │ ├── ff_ffpipenode.c │ │ ├── ff_ffpipenode.h │ │ ├── ff_ffplay.c │ │ ├── ff_ffplay.h │ │ ├── ff_ffplay_debug.h │ │ ├── ff_ffplay_def.h │ │ ├── ff_ffplay_options.h │ │ ├── ijkavformat │ │ │ ├── allformats.c │ │ │ ├── ijkasync.c │ │ │ ├── ijkavformat.h │ │ │ ├── ijkio.c │ │ │ ├── ijkioandroidio.c │ │ │ ├── ijkioapplication.c │ │ │ ├── ijkioapplication.h │ │ │ ├── ijkiocache.c │ │ │ ├── ijkioffio.c │ │ │ ├── ijkiomanager.c │ │ │ ├── ijkiomanager.h │ │ │ ├── ijkioprotocol.c │ │ │ ├── ijkioprotocol.h │ │ │ ├── ijkiourl.h │ │ │ ├── ijkiourlhook.c │ │ │ ├── ijklivehook.c │ │ │ ├── ijklongurl.c │ │ │ ├── ijkmediadatasource.c │ │ │ ├── ijksegment.c │ │ │ └── ijkurlhook.c │ │ ├── ijkavutil │ │ │ ├── ijkdict.c │ │ │ ├── ijkdict.h │ │ │ ├── ijkfifo.c │ │ │ ├── ijkfifo.h │ │ │ ├── ijkstl.cpp │ │ │ ├── ijkstl.h │ │ │ ├── ijkthreadpool.c │ │ │ ├── ijkthreadpool.h │ │ │ ├── ijktree.c │ │ │ ├── ijktree.h │ │ │ ├── ijkutils.c │ │ │ ├── ijkutils.h │ │ │ └── opt.h │ │ ├── ijkmeta.c │ │ ├── ijkmeta.h │ │ ├── ijkplayer.c │ │ ├── ijkplayer.h │ │ ├── ijkplayer_internal.h │ │ ├── pipeline │ │ │ ├── ffpipeline_ffplay.c │ │ │ ├── ffpipeline_ffplay.h │ │ │ ├── ffpipenode_ffplay_vdec.c │ │ │ └── ffpipenode_ffplay_vdec.h │ │ └── version.sh │ │ └── ijksdl │ │ ├── Android.mk │ │ ├── android │ │ ├── android_audiotrack.c │ │ ├── android_audiotrack.h │ │ ├── android_nativewindow.c │ │ ├── android_nativewindow.h │ │ ├── ijksdl_android.h │ │ ├── ijksdl_android_jni.c │ │ ├── ijksdl_android_jni.h │ │ ├── ijksdl_aout_android_audiotrack.c │ │ ├── ijksdl_aout_android_audiotrack.h │ │ ├── ijksdl_aout_android_opensles.c │ │ ├── ijksdl_aout_android_opensles.h │ │ ├── ijksdl_codec_android_mediacodec.c │ │ ├── ijksdl_codec_android_mediacodec.h │ │ ├── ijksdl_codec_android_mediacodec_dummy.c │ │ ├── ijksdl_codec_android_mediacodec_dummy.h │ │ ├── ijksdl_codec_android_mediacodec_internal.c │ │ ├── ijksdl_codec_android_mediacodec_internal.h │ │ ├── ijksdl_codec_android_mediacodec_java.c │ │ ├── ijksdl_codec_android_mediacodec_java.h │ │ ├── ijksdl_codec_android_mediadef.c │ │ ├── ijksdl_codec_android_mediadef.h │ │ ├── ijksdl_codec_android_mediaformat.c │ │ ├── ijksdl_codec_android_mediaformat.h │ │ ├── ijksdl_codec_android_mediaformat_internal.h │ │ ├── ijksdl_codec_android_mediaformat_java.c │ │ ├── ijksdl_codec_android_mediaformat_java.h │ │ ├── ijksdl_inc_internal_android.h │ │ ├── ijksdl_vout_android_nativewindow.c │ │ ├── ijksdl_vout_android_nativewindow.h │ │ ├── ijksdl_vout_android_surface.c │ │ ├── ijksdl_vout_android_surface.h │ │ ├── ijksdl_vout_overlay_android_mediacodec.c │ │ └── ijksdl_vout_overlay_android_mediacodec.h │ │ ├── dummy │ │ ├── ijksdl_dummy.h │ │ ├── ijksdl_vout_dummy.c │ │ └── ijksdl_vout_dummy.h │ │ ├── ffmpeg │ │ ├── abi_all │ │ │ └── image_convert.c │ │ ├── ijksdl_image_convert.h │ │ ├── ijksdl_inc_ffmpeg.h │ │ ├── ijksdl_vout_overlay_ffmpeg.c │ │ └── ijksdl_vout_overlay_ffmpeg.h │ │ ├── gles2 │ │ ├── color.c │ │ ├── common.c │ │ ├── fsh │ │ │ ├── rgb.fsh.c │ │ │ ├── yuv420p.fsh.c │ │ │ ├── yuv420sp.fsh.c │ │ │ └── yuv444p10le.fsh.c │ │ ├── internal.h │ │ ├── renderer.c │ │ ├── renderer_rgb.c │ │ ├── renderer_yuv420p.c │ │ ├── renderer_yuv420sp.c │ │ ├── renderer_yuv420sp_vtb.m │ │ ├── renderer_yuv444p10le.c │ │ ├── shader.c │ │ └── vsh │ │ │ └── mvp.vsh.c │ │ ├── ijksdl.h │ │ ├── ijksdl_aout.c │ │ ├── ijksdl_aout.h │ │ ├── ijksdl_aout_internal.h │ │ ├── ijksdl_audio.c │ │ ├── ijksdl_audio.h │ │ ├── ijksdl_class.h │ │ ├── ijksdl_container.h │ │ ├── ijksdl_egl.c │ │ ├── ijksdl_egl.h │ │ ├── ijksdl_endian.h │ │ ├── ijksdl_error.c │ │ ├── ijksdl_error.h │ │ ├── ijksdl_extra_log.c │ │ ├── ijksdl_extra_log.h │ │ ├── ijksdl_fourcc.h │ │ ├── ijksdl_gles2.h │ │ ├── ijksdl_inc_internal.h │ │ ├── ijksdl_log.h │ │ ├── ijksdl_misc.h │ │ ├── ijksdl_mutex.c │ │ ├── ijksdl_mutex.h │ │ ├── ijksdl_stdinc.c │ │ ├── ijksdl_stdinc.h │ │ ├── ijksdl_thread.c │ │ ├── ijksdl_thread.h │ │ ├── ijksdl_timer.c │ │ ├── ijksdl_timer.h │ │ ├── ijksdl_video.h │ │ ├── ijksdl_vout.c │ │ ├── ijksdl_vout.h │ │ └── ijksdl_vout_internal.h │ ├── project.properties │ └── res │ └── values │ └── strings.xml ├── videoplayer-armv7a ├── .gitignore ├── build.gradle ├── gradle.properties ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── tv │ │ └── danmaku │ │ └── ijk │ │ └── media │ │ └── player_armv7a │ │ └── ApplicationTest.java │ └── main │ ├── .classpath │ ├── .project │ ├── .settings │ └── org.eclipse.jdt.core.prefs │ ├── AndroidManifest.xml │ ├── java │ └── tv │ │ └── danmaku │ │ └── ijk │ │ └── media │ │ └── player_armv7a │ │ └── Pragma.java │ ├── jni │ ├── Android.mk │ ├── Application.mk │ ├── ffmpeg │ │ └── Android.mk │ └── ijkmedia │ │ ├── Android.mk │ │ ├── ijkj4a │ │ ├── .gitignore │ │ ├── Android.mk │ │ ├── Makefile │ │ ├── j4a │ │ │ ├── class │ │ │ │ ├── android │ │ │ │ │ ├── media │ │ │ │ │ │ ├── AudioTrack.c │ │ │ │ │ │ ├── AudioTrack.h │ │ │ │ │ │ ├── AudioTrack.include.j4a │ │ │ │ │ │ ├── AudioTrack.loader.j4a │ │ │ │ │ │ ├── MediaCodec.c │ │ │ │ │ │ ├── MediaCodec.h │ │ │ │ │ │ ├── MediaCodec.include.j4a │ │ │ │ │ │ ├── MediaCodec.loader.j4a │ │ │ │ │ │ ├── MediaFormat.c │ │ │ │ │ │ ├── MediaFormat.h │ │ │ │ │ │ ├── MediaFormat.include.j4a │ │ │ │ │ │ ├── MediaFormat.loader.j4a │ │ │ │ │ │ ├── PlaybackParams.c │ │ │ │ │ │ ├── PlaybackParams.h │ │ │ │ │ │ ├── PlaybackParams.include.j4a │ │ │ │ │ │ └── PlaybackParams.loader.j4a │ │ │ │ │ └── os │ │ │ │ │ │ ├── Build.c │ │ │ │ │ │ ├── Build.h │ │ │ │ │ │ ├── Build.include.j4a │ │ │ │ │ │ ├── Build.loader.j4a │ │ │ │ │ │ ├── Bundle.c │ │ │ │ │ │ ├── Bundle.h │ │ │ │ │ │ ├── Bundle.include.j4a │ │ │ │ │ │ └── Bundle.loader.j4a │ │ │ │ ├── java │ │ │ │ │ ├── nio │ │ │ │ │ │ ├── Buffer.c │ │ │ │ │ │ ├── Buffer.h │ │ │ │ │ │ ├── Buffer.include.j4a │ │ │ │ │ │ ├── Buffer.loader.j4a │ │ │ │ │ │ ├── ByteBuffer.c │ │ │ │ │ │ ├── ByteBuffer.h │ │ │ │ │ │ ├── ByteBuffer.include.j4a │ │ │ │ │ │ └── ByteBuffer.loader.j4a │ │ │ │ │ └── util │ │ │ │ │ │ ├── ArrayList.c │ │ │ │ │ │ ├── ArrayList.h │ │ │ │ │ │ ├── ArrayList.include.j4a │ │ │ │ │ │ └── ArrayList.loader.j4a │ │ │ │ └── tv │ │ │ │ │ └── danmaku │ │ │ │ │ └── ijk │ │ │ │ │ └── media │ │ │ │ │ └── player │ │ │ │ │ ├── IjkMediaPlayer.c │ │ │ │ │ ├── IjkMediaPlayer.h │ │ │ │ │ ├── IjkMediaPlayer.include.j4a │ │ │ │ │ ├── IjkMediaPlayer.loader.j4a │ │ │ │ │ └── misc │ │ │ │ │ ├── IAndroidIO.c │ │ │ │ │ ├── IAndroidIO.h │ │ │ │ │ ├── IAndroidIO.include.j4a │ │ │ │ │ ├── IAndroidIO.loader.j4a │ │ │ │ │ ├── IMediaDataSource.c │ │ │ │ │ ├── IMediaDataSource.h │ │ │ │ │ ├── IMediaDataSource.include.j4a │ │ │ │ │ └── IMediaDataSource.loader.j4a │ │ │ ├── j4a_allclasses.c │ │ │ ├── j4a_allclasses.h │ │ │ ├── j4a_allclasses.include.h │ │ │ ├── j4a_allclasses.loader.h │ │ │ ├── j4a_base.c │ │ │ └── j4a_base.h │ │ ├── j4au │ │ │ └── class │ │ │ │ ├── android │ │ │ │ └── media │ │ │ │ │ ├── AudioTrack.util.c │ │ │ │ │ └── AudioTrack.util.h │ │ │ │ └── java │ │ │ │ └── nio │ │ │ │ ├── ByteBuffer.util.c │ │ │ │ └── ByteBuffer.util.h │ │ └── java │ │ │ ├── android │ │ │ ├── media │ │ │ │ ├── AudioTrack.java │ │ │ │ ├── MediaCodec.java │ │ │ │ ├── MediaCrypto.java │ │ │ │ ├── MediaFormat.java │ │ │ │ └── PlaybackParams.java │ │ │ └── os │ │ │ │ ├── Build.java │ │ │ │ └── Bundle.java │ │ │ ├── java │ │ │ ├── nio │ │ │ │ ├── Buffer.java │ │ │ │ └── ByteBuffer.java │ │ │ └── util │ │ │ │ └── ArrayList.java │ │ │ └── tv │ │ │ └── danmaku │ │ │ └── ijk │ │ │ └── media │ │ │ └── player │ │ │ ├── IjkMediaPlayer.java │ │ │ └── misc │ │ │ ├── IAndroidIO.java │ │ │ └── IMediaDataSource.java │ │ ├── ijkplayer │ │ ├── .gitignore │ │ ├── Android.mk │ │ ├── android │ │ │ ├── ffmpeg_api_jni.c │ │ │ ├── ffmpeg_api_jni.h │ │ │ ├── ijkplayer_android.c │ │ │ ├── ijkplayer_android.h │ │ │ ├── ijkplayer_android_def.h │ │ │ ├── ijkplayer_jni.c │ │ │ └── pipeline │ │ │ │ ├── ffpipeline_android.c │ │ │ │ ├── ffpipeline_android.h │ │ │ │ ├── ffpipenode_android_mediacodec_vdec.c │ │ │ │ ├── ffpipenode_android_mediacodec_vdec.h │ │ │ │ ├── h264_nal.h │ │ │ │ ├── hevc_nal.h │ │ │ │ └── mpeg4_esds.h │ │ ├── config.h │ │ ├── ff_cmdutils.c │ │ ├── ff_cmdutils.h │ │ ├── ff_fferror.h │ │ ├── ff_ffinc.h │ │ ├── ff_ffmsg.h │ │ ├── ff_ffmsg_queue.h │ │ ├── ff_ffpipeline.c │ │ ├── ff_ffpipeline.h │ │ ├── ff_ffpipenode.c │ │ ├── ff_ffpipenode.h │ │ ├── ff_ffplay.c │ │ ├── ff_ffplay.h │ │ ├── ff_ffplay_debug.h │ │ ├── ff_ffplay_def.h │ │ ├── ff_ffplay_options.h │ │ ├── ijkavformat │ │ │ ├── allformats.c │ │ │ ├── ijkasync.c │ │ │ ├── ijkavformat.h │ │ │ ├── ijkio.c │ │ │ ├── ijkioandroidio.c │ │ │ ├── ijkioapplication.c │ │ │ ├── ijkioapplication.h │ │ │ ├── ijkiocache.c │ │ │ ├── ijkioffio.c │ │ │ ├── ijkiomanager.c │ │ │ ├── ijkiomanager.h │ │ │ ├── ijkioprotocol.c │ │ │ ├── ijkioprotocol.h │ │ │ ├── ijkiourl.h │ │ │ ├── ijkiourlhook.c │ │ │ ├── ijklivehook.c │ │ │ ├── ijklongurl.c │ │ │ ├── ijkmediadatasource.c │ │ │ ├── ijksegment.c │ │ │ └── ijkurlhook.c │ │ ├── ijkavutil │ │ │ ├── ijkdict.c │ │ │ ├── ijkdict.h │ │ │ ├── ijkfifo.c │ │ │ ├── ijkfifo.h │ │ │ ├── ijkstl.cpp │ │ │ ├── ijkstl.h │ │ │ ├── ijkthreadpool.c │ │ │ ├── ijkthreadpool.h │ │ │ ├── ijktree.c │ │ │ ├── ijktree.h │ │ │ ├── ijkutils.c │ │ │ ├── ijkutils.h │ │ │ └── opt.h │ │ ├── ijkmeta.c │ │ ├── ijkmeta.h │ │ ├── ijkplayer.c │ │ ├── ijkplayer.h │ │ ├── ijkplayer_internal.h │ │ ├── pipeline │ │ │ ├── ffpipeline_ffplay.c │ │ │ ├── ffpipeline_ffplay.h │ │ │ ├── ffpipenode_ffplay_vdec.c │ │ │ └── ffpipenode_ffplay_vdec.h │ │ └── version.sh │ │ └── ijksdl │ │ ├── Android.mk │ │ ├── android │ │ ├── android_audiotrack.c │ │ ├── android_audiotrack.h │ │ ├── android_nativewindow.c │ │ ├── android_nativewindow.h │ │ ├── ijksdl_android.h │ │ ├── ijksdl_android_jni.c │ │ ├── ijksdl_android_jni.h │ │ ├── ijksdl_aout_android_audiotrack.c │ │ ├── ijksdl_aout_android_audiotrack.h │ │ ├── ijksdl_aout_android_opensles.c │ │ ├── ijksdl_aout_android_opensles.h │ │ ├── ijksdl_codec_android_mediacodec.c │ │ ├── ijksdl_codec_android_mediacodec.h │ │ ├── ijksdl_codec_android_mediacodec_dummy.c │ │ ├── ijksdl_codec_android_mediacodec_dummy.h │ │ ├── ijksdl_codec_android_mediacodec_internal.c │ │ ├── ijksdl_codec_android_mediacodec_internal.h │ │ ├── ijksdl_codec_android_mediacodec_java.c │ │ ├── ijksdl_codec_android_mediacodec_java.h │ │ ├── ijksdl_codec_android_mediadef.c │ │ ├── ijksdl_codec_android_mediadef.h │ │ ├── ijksdl_codec_android_mediaformat.c │ │ ├── ijksdl_codec_android_mediaformat.h │ │ ├── ijksdl_codec_android_mediaformat_internal.h │ │ ├── ijksdl_codec_android_mediaformat_java.c │ │ ├── ijksdl_codec_android_mediaformat_java.h │ │ ├── ijksdl_inc_internal_android.h │ │ ├── ijksdl_vout_android_nativewindow.c │ │ ├── ijksdl_vout_android_nativewindow.h │ │ ├── ijksdl_vout_android_surface.c │ │ ├── ijksdl_vout_android_surface.h │ │ ├── ijksdl_vout_overlay_android_mediacodec.c │ │ └── ijksdl_vout_overlay_android_mediacodec.h │ │ ├── dummy │ │ ├── ijksdl_dummy.h │ │ ├── ijksdl_vout_dummy.c │ │ └── ijksdl_vout_dummy.h │ │ ├── ffmpeg │ │ ├── abi_all │ │ │ └── image_convert.c │ │ ├── ijksdl_image_convert.h │ │ ├── ijksdl_inc_ffmpeg.h │ │ ├── ijksdl_vout_overlay_ffmpeg.c │ │ └── ijksdl_vout_overlay_ffmpeg.h │ │ ├── gles2 │ │ ├── color.c │ │ ├── common.c │ │ ├── fsh │ │ │ ├── rgb.fsh.c │ │ │ ├── yuv420p.fsh.c │ │ │ ├── yuv420sp.fsh.c │ │ │ └── yuv444p10le.fsh.c │ │ ├── internal.h │ │ ├── renderer.c │ │ ├── renderer_rgb.c │ │ ├── renderer_yuv420p.c │ │ ├── renderer_yuv420sp.c │ │ ├── renderer_yuv420sp_vtb.m │ │ ├── renderer_yuv444p10le.c │ │ ├── shader.c │ │ └── vsh │ │ │ └── mvp.vsh.c │ │ ├── ijksdl.h │ │ ├── ijksdl_aout.c │ │ ├── ijksdl_aout.h │ │ ├── ijksdl_aout_internal.h │ │ ├── ijksdl_audio.c │ │ ├── ijksdl_audio.h │ │ ├── ijksdl_class.h │ │ ├── ijksdl_container.h │ │ ├── ijksdl_egl.c │ │ ├── ijksdl_egl.h │ │ ├── ijksdl_endian.h │ │ ├── ijksdl_error.c │ │ ├── ijksdl_error.h │ │ ├── ijksdl_extra_log.c │ │ ├── ijksdl_extra_log.h │ │ ├── ijksdl_fourcc.h │ │ ├── ijksdl_gles2.h │ │ ├── ijksdl_inc_internal.h │ │ ├── ijksdl_log.h │ │ ├── ijksdl_misc.h │ │ ├── ijksdl_mutex.c │ │ ├── ijksdl_mutex.h │ │ ├── ijksdl_stdinc.c │ │ ├── ijksdl_stdinc.h │ │ ├── ijksdl_thread.c │ │ ├── ijksdl_thread.h │ │ ├── ijksdl_timer.c │ │ ├── ijksdl_timer.h │ │ ├── ijksdl_video.h │ │ ├── ijksdl_vout.c │ │ ├── ijksdl_vout.h │ │ └── ijksdl_vout_internal.h │ ├── project.properties │ └── res │ └── values │ └── strings.xml ├── videoplayer-core ├── .idea │ ├── codeStyles │ │ └── Project.xml │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ ├── vcs.xml │ └── workspace.xml ├── README.md ├── build.gradle ├── buildout │ ├── generated │ │ └── source │ │ │ └── buildConfig │ │ │ ├── androidTest │ │ │ └── debug │ │ │ │ └── com │ │ │ │ └── google │ │ │ │ └── android │ │ │ │ └── exoplayer2 │ │ │ │ └── core │ │ │ │ └── test │ │ │ │ └── BuildConfig.java │ │ │ └── debug │ │ │ └── com │ │ │ └── google │ │ │ └── android │ │ │ └── exoplayer2 │ │ │ └── core │ │ │ └── BuildConfig.java │ ├── intermediates │ │ ├── aapt_friendly_merged_manifests │ │ │ └── debug │ │ │ │ └── aapt │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── output.json │ │ ├── library_manifest │ │ │ └── debug │ │ │ │ └── AndroidManifest.xml │ │ └── merged_manifests │ │ │ ├── debug │ │ │ └── output.json │ │ │ └── debugAndroidTest │ │ │ ├── AndroidManifest.xml │ │ │ └── output.json │ └── outputs │ │ └── logs │ │ └── manifest-merger-debug-report.txt ├── proguard-rules.txt └── src │ ├── androidTest │ ├── AndroidManifest.xml │ ├── assets │ │ ├── binary │ │ │ └── 1024_incrementing_bytes.mp3 │ │ ├── bitmap │ │ │ ├── image_256_256.png │ │ │ └── image_80_60.bmp │ │ └── mp4 │ │ │ ├── testvid_1022ms.mp4 │ │ │ ├── video000.png │ │ │ ├── video014.png │ │ │ ├── video015.png │ │ │ ├── video016.png │ │ │ └── video029.png │ └── java │ │ └── com │ │ └── google │ │ └── android │ │ └── exoplayer2 │ │ └── upstream │ │ └── ContentDataSourceTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── google │ │ │ └── android │ │ │ └── exoplayer2 │ │ │ ├── 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 │ │ │ ├── analytics │ │ │ ├── AnalyticsCollector.java │ │ │ ├── AnalyticsListener.java │ │ │ └── DefaultAnalyticsListener.java │ │ │ ├── audio │ │ │ ├── Ac3Util.java │ │ │ ├── Ac4Util.java │ │ │ ├── AudioAttributes.java │ │ │ ├── AudioCapabilities.java │ │ │ ├── AudioCapabilitiesReceiver.java │ │ │ ├── AudioDecoderException.java │ │ │ ├── AudioFocusManager.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 │ │ │ ├── database │ │ │ ├── DatabaseIOException.java │ │ │ ├── DatabaseProvider.java │ │ │ ├── DefaultDatabaseProvider.java │ │ │ ├── ExoDatabaseProvider.java │ │ │ └── VersionTable.java │ │ │ ├── decoder │ │ │ ├── Buffer.java │ │ │ ├── CryptoInfo.java │ │ │ ├── Decoder.java │ │ │ ├── DecoderCounters.java │ │ │ ├── DecoderInputBuffer.java │ │ │ ├── OutputBuffer.java │ │ │ ├── SimpleDecoder.java │ │ │ └── SimpleOutputBuffer.java │ │ │ ├── drm │ │ │ ├── ClearKeyUtil.java │ │ │ ├── DecryptionException.java │ │ │ ├── DecryptionResource.java │ │ │ ├── DefaultDrmSession.java │ │ │ ├── DefaultDrmSessionEventListener.java │ │ │ ├── DefaultDrmSessionManager.java │ │ │ ├── DrmInitData.java │ │ │ ├── DrmSession.java │ │ │ ├── DrmSessionManager.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 │ │ │ ├── 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 │ │ │ │ ├── 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 │ │ │ ├── metadata │ │ │ ├── Metadata.java │ │ │ ├── MetadataDecoder.java │ │ │ ├── MetadataDecoderFactory.java │ │ │ ├── MetadataInputBuffer.java │ │ │ ├── MetadataOutput.java │ │ │ ├── MetadataRenderer.java │ │ │ ├── emsg │ │ │ │ ├── EventMessage.java │ │ │ │ ├── EventMessageDecoder.java │ │ │ │ └── EventMessageEncoder.java │ │ │ ├── icy │ │ │ │ ├── IcyDecoder.java │ │ │ │ ├── IcyHeaders.java │ │ │ │ └── IcyInfo.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 │ │ │ └── scte35 │ │ │ │ ├── PrivateCommand.java │ │ │ │ ├── SpliceCommand.java │ │ │ │ ├── SpliceInfoDecoder.java │ │ │ │ ├── SpliceInsertCommand.java │ │ │ │ ├── SpliceNullCommand.java │ │ │ │ ├── SpliceScheduleCommand.java │ │ │ │ └── TimeSignalCommand.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 │ │ │ ├── scheduler │ │ │ ├── PlatformScheduler.java │ │ │ ├── Requirements.java │ │ │ ├── RequirementsWatcher.java │ │ │ └── Scheduler.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 │ │ │ ├── DeferredMediaPeriod.java │ │ │ ├── DynamicConcatenatingMediaSource.java │ │ │ ├── EmptySampleStream.java │ │ │ ├── ExtractorMediaSource.java │ │ │ ├── ForwardingTimeline.java │ │ │ ├── IcyDataSource.java │ │ │ ├── LoopingMediaSource.java │ │ │ ├── MediaPeriod.java │ │ │ ├── MediaSource.java │ │ │ ├── MediaSourceEventListener.java │ │ │ ├── MergingMediaPeriod.java │ │ │ ├── MergingMediaSource.java │ │ │ ├── ProgressiveMediaPeriod.java │ │ │ ├── ProgressiveMediaSource.java │ │ │ ├── SampleMetadataQueue.java │ │ │ ├── SampleQueue.java │ │ │ ├── SampleStream.java │ │ │ ├── SequenceableLoader.java │ │ │ ├── ShuffleOrder.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 │ │ │ ├── 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 │ │ │ ├── dvb │ │ │ │ ├── DvbDecoder.java │ │ │ │ ├── DvbParser.java │ │ │ │ └── DvbSubtitle.java │ │ │ ├── pgs │ │ │ │ ├── PgsDecoder.java │ │ │ │ └── PgsSubtitle.java │ │ │ ├── ssa │ │ │ │ ├── SsaDecoder.java │ │ │ │ └── SsaSubtitle.java │ │ │ ├── subrip │ │ │ │ ├── SubripDecoder.java │ │ │ │ └── SubripSubtitle.java │ │ │ ├── ttml │ │ │ │ ├── TtmlDecoder.java │ │ │ │ ├── TtmlNode.java │ │ │ │ ├── TtmlRegion.java │ │ │ │ ├── TtmlRenderUtil.java │ │ │ │ ├── TtmlStyle.java │ │ │ │ └── TtmlSubtitle.java │ │ │ ├── tx3g │ │ │ │ ├── Tx3gDecoder.java │ │ │ │ └── Tx3gSubtitle.java │ │ │ └── webvtt │ │ │ │ ├── CssParser.java │ │ │ │ ├── Mp4WebvttDecoder.java │ │ │ │ ├── Mp4WebvttSubtitle.java │ │ │ │ ├── WebvttCssStyle.java │ │ │ │ ├── WebvttCue.java │ │ │ │ ├── WebvttCueParser.java │ │ │ │ ├── WebvttDecoder.java │ │ │ │ ├── WebvttParserUtil.java │ │ │ │ └── WebvttSubtitle.java │ │ │ ├── trackselection │ │ │ ├── AdaptiveTrackSelection.java │ │ │ ├── BaseTrackSelection.java │ │ │ ├── BufferSizeAdaptationBuilder.java │ │ │ ├── DefaultTrackSelector.java │ │ │ ├── FixedTrackSelection.java │ │ │ ├── MappingTrackSelector.java │ │ │ ├── RandomTrackSelection.java │ │ │ ├── TrackBitrateEstimator.java │ │ │ ├── TrackSelection.java │ │ │ ├── TrackSelectionArray.java │ │ │ ├── TrackSelectionParameters.java │ │ │ ├── TrackSelectionUtil.java │ │ │ ├── TrackSelector.java │ │ │ ├── TrackSelectorResult.java │ │ │ └── WindowedTrackBitrateEstimator.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 │ │ │ ├── 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 │ │ │ ├── FlacStreamInfo.java │ │ │ ├── GlUtil.java │ │ │ ├── HandlerWrapper.java │ │ │ ├── LibraryLoader.java │ │ │ ├── Log.java │ │ │ ├── LongArray.java │ │ │ ├── MediaClock.java │ │ │ ├── MimeTypes.java │ │ │ ├── NalUnitUtil.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 │ │ │ └── video │ │ │ ├── AvcConfig.java │ │ │ ├── ColorInfo.java │ │ │ ├── DolbyVisionConfig.java │ │ │ ├── DummySurface.java │ │ │ ├── HevcConfig.java │ │ │ ├── MediaCodecVideoRenderer.java │ │ │ ├── VideoFrameMetadataListener.java │ │ │ ├── VideoFrameReleaseTimeHelper.java │ │ │ ├── VideoListener.java │ │ │ ├── VideoRendererEventListener.java │ │ │ └── spherical │ │ │ ├── CameraMotionListener.java │ │ │ ├── CameraMotionRenderer.java │ │ │ ├── FrameRotationQueue.java │ │ │ ├── Projection.java │ │ │ └── ProjectionDecoder.java │ └── javadoc │ │ └── com │ │ └── google │ │ └── android │ │ └── exoplayer2 │ │ └── doc-files │ │ ├── exoplayer-threading-model.svg │ │ ├── renderer-states.svg │ │ ├── timeline-advanced.svg │ │ ├── timeline-live-indefinite.svg │ │ ├── timeline-live-limited.svg │ │ ├── timeline-live-multi-period.svg │ │ ├── timeline-period.svg │ │ ├── timeline-playlist.svg │ │ ├── timeline-single-file-midrolls.svg │ │ ├── timeline-single-file.svg │ │ └── timeline-window.svg │ └── test │ ├── AndroidManifest.xml │ ├── assets │ ├── amr │ │ ├── sample_nb.amr │ │ ├── sample_nb.amr.0.dump │ │ ├── sample_nb_cbr.amr │ │ ├── sample_nb_cbr.amr.0.dump │ │ ├── sample_nb_cbr.amr.1.dump │ │ ├── sample_nb_cbr.amr.2.dump │ │ ├── sample_nb_cbr.amr.3.dump │ │ ├── sample_nb_cbr.amr.unklen.dump │ │ ├── sample_wb.amr │ │ ├── sample_wb.amr.0.dump │ │ ├── sample_wb_cbr.amr │ │ ├── sample_wb_cbr.amr.0.dump │ │ ├── sample_wb_cbr.amr.1.dump │ │ ├── sample_wb_cbr.amr.2.dump │ │ ├── sample_wb_cbr.amr.3.dump │ │ └── sample_wb_cbr.amr.unklen.dump │ ├── binary │ │ └── 1024_incrementing_bytes.mp3 │ ├── download-actions │ │ ├── dash-download-v0 │ │ ├── dash-remove-v0 │ │ ├── hls-download-v0 │ │ ├── hls-download-v1 │ │ ├── hls-remove-v0 │ │ ├── hls-remove-v1 │ │ ├── progressive-download-v0 │ │ ├── progressive-remove-v0 │ │ ├── ss-download-v0 │ │ ├── ss-download-v1 │ │ ├── ss-remove-v0 │ │ └── ss-remove-v1 │ ├── flv │ │ ├── sample.flv │ │ └── sample.flv.0.dump │ ├── mkv │ │ ├── sample.mkv │ │ ├── sample.mkv.0.dump │ │ ├── sample.mkv.1.dump │ │ ├── sample.mkv.2.dump │ │ ├── sample.mkv.3.dump │ │ ├── subsample_encrypted_altref.webm │ │ ├── subsample_encrypted_altref.webm.0.dump │ │ ├── subsample_encrypted_noaltref.webm │ │ └── subsample_encrypted_noaltref.webm.0.dump │ ├── mp3 │ │ ├── bear.mp3 │ │ ├── bear.mp3.0.dump │ │ ├── bear.mp3.1.dump │ │ ├── bear.mp3.2.dump │ │ ├── bear.mp3.3.dump │ │ ├── play-trimmed.mp3 │ │ ├── play-trimmed.mp3.0.dump │ │ ├── play-trimmed.mp3.1.dump │ │ ├── play-trimmed.mp3.2.dump │ │ ├── play-trimmed.mp3.3.dump │ │ └── play-trimmed.mp3.unklen.dump │ ├── mp4 │ │ ├── sample.mp4 │ │ ├── sample.mp4.0.dump │ │ ├── sample.mp4.1.dump │ │ ├── sample.mp4.2.dump │ │ ├── sample.mp4.3.dump │ │ ├── sample_fragmented.mp4 │ │ ├── sample_fragmented.mp4.0.dump │ │ ├── sample_fragmented_seekable.mp4 │ │ ├── sample_fragmented_seekable.mp4.0.dump │ │ ├── sample_fragmented_seekable.mp4.1.dump │ │ ├── sample_fragmented_seekable.mp4.2.dump │ │ ├── sample_fragmented_seekable.mp4.3.dump │ │ ├── sample_fragmented_sei.mp4 │ │ ├── sample_fragmented_sei.mp4.0.dump │ │ └── testvid_1022ms.mp4 │ ├── offline │ │ ├── action_file_for_download_index_upgrade.exi │ │ ├── action_file_incomplete_header.exi │ │ ├── action_file_no_data.exi │ │ ├── action_file_one_action.exi │ │ ├── action_file_two_actions.exi │ │ ├── action_file_unsupported_version.exi │ │ └── action_file_zero_actions.exi │ ├── ogg │ │ ├── bear.opus │ │ ├── bear.opus.0.dump │ │ ├── bear.opus.1.dump │ │ ├── bear.opus.2.dump │ │ ├── bear.opus.3.dump │ │ ├── bear.opus.unklen.dump │ │ ├── bear_flac.ogg │ │ ├── bear_flac.ogg.0.dump │ │ ├── bear_flac.ogg.1.dump │ │ ├── bear_flac.ogg.2.dump │ │ ├── bear_flac.ogg.3.dump │ │ ├── bear_flac.ogg.unklen.dump │ │ ├── bear_flac_noseektable.ogg │ │ ├── bear_flac_noseektable.ogg.0.dump │ │ ├── bear_flac_noseektable.ogg.1.dump │ │ ├── bear_flac_noseektable.ogg.2.dump │ │ ├── bear_flac_noseektable.ogg.3.dump │ │ ├── bear_flac_noseektable.ogg.unklen.dump │ │ ├── bear_vorbis.ogg │ │ ├── bear_vorbis.ogg.0.dump │ │ ├── bear_vorbis.ogg.1.dump │ │ ├── bear_vorbis.ogg.2.dump │ │ ├── bear_vorbis.ogg.3.dump │ │ └── bear_vorbis.ogg.unklen.dump │ ├── rawcc │ │ ├── sample.rawcc │ │ └── sample.rawcc.0.dump │ ├── ssa │ │ ├── empty │ │ ├── invalid_timecodes │ │ ├── no_end_timecodes │ │ ├── typical │ │ ├── typical_dialogue │ │ ├── typical_format │ │ └── typical_header │ ├── subrip │ │ ├── empty │ │ ├── no_end_timecodes │ │ ├── typical │ │ ├── typical_extra_blank_line │ │ ├── typical_missing_sequence │ │ ├── typical_missing_timecode │ │ ├── typical_negative_timestamps │ │ ├── typical_unexpected_end │ │ ├── typical_with_byte_order_mark │ │ └── typical_with_tags │ ├── ts │ │ ├── bbb_2500ms.ts │ │ ├── elephants_dream.mpg │ │ ├── sample.ac3 │ │ ├── sample.ac3.0.dump │ │ ├── sample.ac4 │ │ ├── sample.ac4.0.dump │ │ ├── sample.adts │ │ ├── sample.adts.0.dump │ │ ├── sample.eac3 │ │ ├── sample.eac3.0.dump │ │ ├── sample.ps │ │ ├── sample.ps.0.dump │ │ ├── sample.ps.1.dump │ │ ├── sample.ps.2.dump │ │ ├── sample.ps.3.dump │ │ ├── sample.ps.unklen.dump │ │ ├── sample.ts │ │ ├── sample.ts.0.dump │ │ ├── sample.ts.1.dump │ │ ├── sample.ts.2.dump │ │ ├── sample.ts.3.dump │ │ ├── sample.ts.unklen.dump │ │ ├── sample_cbs.adts │ │ ├── sample_cbs.adts.0.dump │ │ ├── sample_cbs.adts.1.dump │ │ ├── sample_cbs.adts.2.dump │ │ ├── sample_cbs.adts.3.dump │ │ ├── sample_cbs.adts.unklen.dump │ │ └── sample_with_sdt.ts │ ├── ttml │ │ ├── bitmap_percentage_region.xml │ │ ├── bitmap_pixel_region.xml │ │ ├── bitmap_unsupported_region.xml │ │ ├── chain_multiple_styles.xml │ │ ├── font_size.xml │ │ ├── font_size_empty.xml │ │ ├── font_size_invalid.xml │ │ ├── font_size_no_unit.xml │ │ ├── frame_rate.xml │ │ ├── inherit_and_override_style.xml │ │ ├── inherit_global_and_parent.xml │ │ ├── inherit_multiple_styles.xml │ │ ├── inherit_style.xml │ │ ├── inline_style_attributes.xml │ │ ├── multiple_regions.xml │ │ └── no_underline_linethrough.xml │ ├── tx3g │ │ ├── initialization │ │ ├── initialization_all_defaults │ │ ├── no_subtitle │ │ ├── sample_just_text │ │ ├── sample_utf16_be_no_styl │ │ ├── sample_utf16_le_no_styl │ │ ├── sample_with_multiple_styl │ │ ├── sample_with_other_extension │ │ ├── sample_with_styl │ │ ├── sample_with_styl_all_defaults │ │ └── sample_with_tbox │ ├── wav │ │ ├── sample.wav │ │ ├── sample.wav.0.dump │ │ ├── sample.wav.1.dump │ │ ├── sample.wav.2.dump │ │ └── sample.wav.3.dump │ ├── webm │ │ └── vorbis_codec_private │ └── webvtt │ │ ├── empty │ │ ├── typical │ │ ├── typical_with_bad_timestamps │ │ ├── typical_with_comments │ │ ├── typical_with_identifiers │ │ ├── with_bad_cue_header │ │ ├── with_bom │ │ ├── with_css_complex_selectors │ │ ├── with_css_styles │ │ ├── with_positioning │ │ └── with_tags │ └── java │ └── com │ └── google │ └── android │ └── exoplayer2 │ ├── CTest.java │ ├── DefaultLoadControlTest.java │ ├── DefaultMediaClockTest.java │ ├── ExoPlayerTest.java │ ├── FormatTest.java │ ├── MediaPeriodQueueTest.java │ ├── TimelineTest.java │ ├── analytics │ └── AnalyticsCollectorTest.java │ ├── audio │ ├── Ac3UtilTest.java │ ├── AudioFocusManagerTest.java │ ├── DefaultAudioSinkTest.java │ ├── SilenceSkippingAudioProcessorTest.java │ ├── SimpleDecoderAudioRendererTest.java │ └── SonicAudioProcessorTest.java │ ├── database │ └── VersionTableTest.java │ ├── drm │ ├── ClearKeyUtilTest.java │ ├── DrmInitDataTest.java │ └── OfflineLicenseHelperTest.java │ ├── extractor │ ├── ConstantBitrateSeekMapTest.java │ ├── DefaultExtractorInputTest.java │ ├── DefaultExtractorsFactoryTest.java │ ├── ExtractorTest.java │ ├── Id3PeekerTest.java │ ├── amr │ │ ├── AmrExtractorSeekTest.java │ │ └── AmrExtractorTest.java │ ├── flv │ │ └── FlvExtractorTest.java │ ├── mkv │ │ ├── DefaultEbmlReaderTest.java │ │ ├── MatroskaExtractorTest.java │ │ └── VarintReaderTest.java │ ├── mp3 │ │ ├── Mp3ExtractorTest.java │ │ └── XingSeekerTest.java │ ├── mp4 │ │ ├── AtomParsersTest.java │ │ ├── FragmentedMp4ExtractorTest.java │ │ ├── MdtaMetadataEntryTest.java │ │ ├── Mp4ExtractorTest.java │ │ └── PsshAtomUtilTest.java │ ├── ogg │ │ ├── DefaultOggSeekerTest.java │ │ ├── DefaultOggSeekerUtilMethodsTest.java │ │ ├── OggExtractorTest.java │ │ ├── OggPacketTest.java │ │ ├── OggPageHeaderTest.java │ │ ├── OggTestFile.java │ │ ├── VorbisBitArrayTest.java │ │ ├── VorbisReaderTest.java │ │ └── VorbisUtilTest.java │ ├── rawcc │ │ └── RawCcExtractorTest.java │ ├── ts │ │ ├── Ac3ExtractorTest.java │ │ ├── Ac4ExtractorTest.java │ │ ├── AdtsExtractorSeekTest.java │ │ ├── AdtsExtractorTest.java │ │ ├── AdtsReaderTest.java │ │ ├── PsDurationReaderTest.java │ │ ├── PsExtractorSeekTest.java │ │ ├── PsExtractorTest.java │ │ ├── SectionReaderTest.java │ │ ├── TsDurationReaderTest.java │ │ ├── TsExtractorSeekTest.java │ │ └── TsExtractorTest.java │ └── wav │ │ └── WavExtractorTest.java │ ├── metadata │ ├── emsg │ │ ├── EventMessageDecoderTest.java │ │ ├── EventMessageEncoderTest.java │ │ └── EventMessageTest.java │ ├── icy │ │ ├── IcyDecoderTest.java │ │ ├── IcyHeadersTest.java │ │ └── IcyStreamInfoTest.java │ ├── id3 │ │ ├── ChapterFrameTest.java │ │ ├── ChapterTocFrameTest.java │ │ ├── Id3DecoderTest.java │ │ └── MlltFrameTest.java │ └── scte35 │ │ └── SpliceInfoDecoderTest.java │ ├── offline │ ├── ActionFileTest.java │ ├── ActionFileUpgradeUtilTest.java │ ├── DefaultDownloadIndexTest.java │ ├── DefaultDownloaderFactoryTest.java │ ├── DownloadBuilder.java │ ├── DownloadHelperTest.java │ ├── DownloadManagerTest.java │ ├── DownloadRequestTest.java │ └── StreamKeyTest.java │ ├── source │ ├── ClippingMediaSourceTest.java │ ├── CompositeSequenceableLoaderTest.java │ ├── ConcatenatingMediaSourceTest.java │ ├── LoopingMediaSourceTest.java │ ├── MergingMediaSourceTest.java │ ├── SampleQueueTest.java │ ├── ShuffleOrderTest.java │ ├── SinglePeriodTimelineTest.java │ ├── TrackGroupArrayTest.java │ ├── TrackGroupTest.java │ ├── ads │ │ └── AdPlaybackStateTest.java │ └── chunk │ │ └── MediaChunkListIteratorTest.java │ ├── text │ ├── ssa │ │ └── SsaDecoderTest.java │ ├── subrip │ │ └── SubripDecoderTest.java │ ├── ttml │ │ ├── TtmlDecoderTest.java │ │ ├── TtmlRenderUtilTest.java │ │ └── TtmlStyleTest.java │ ├── tx3g │ │ └── Tx3gDecoderTest.java │ └── webvtt │ │ ├── CssParserTest.java │ │ ├── Mp4WebvttDecoderTest.java │ │ ├── WebvttCueParserTest.java │ │ ├── WebvttDecoderTest.java │ │ └── WebvttSubtitleTest.java │ ├── trackselection │ ├── AdaptiveTrackSelectionTest.java │ ├── BufferSizeAdaptiveTrackSelectionTest.java │ ├── DefaultTrackSelectorTest.java │ ├── MappingTrackSelectorTest.java │ ├── TrackSelectionUtilTest.java │ ├── TrackSelectorTest.java │ └── WindowedTrackBitrateEstimatorTest.java │ ├── upstream │ ├── AssetDataSourceTest.java │ ├── BaseDataSourceTest.java │ ├── ByteArrayDataSourceTest.java │ ├── DataSchemeDataSourceTest.java │ ├── DataSourceAsserts.java │ ├── DataSourceInputStreamTest.java │ ├── DefaultBandwidthMeterTest.java │ ├── DefaultLoadErrorHandlingPolicyTest.java │ ├── cache │ │ ├── CacheDataSourceTest.java │ │ ├── CacheDataSourceTest2.java │ │ ├── CacheUtilTest.java │ │ ├── CachedContentIndexTest.java │ │ ├── CachedRegionTrackerTest.java │ │ ├── DefaultContentMetadataTest.java │ │ ├── LeastRecentlyUsedCacheEvictorTest.java │ │ ├── SimpleCacheSpanTest.java │ │ └── SimpleCacheTest.java │ └── crypto │ │ └── AesFlushingCipherTest.java │ ├── util │ ├── AtomicFileTest.java │ ├── ColorParserTest.java │ ├── MimeTypesTest.java │ ├── NalUnitUtilTest.java │ ├── ParsableBitArrayTest.java │ ├── ParsableByteArrayTest.java │ ├── ParsableNalUnitBitArrayTest.java │ ├── ReusableBufferedOutputStreamTest.java │ ├── TimedValueQueueTest.java │ ├── UriUtilTest.java │ └── UtilTest.java │ └── video │ └── spherical │ ├── FrameRotationQueueTest.java │ ├── ProjectionDecoderTest.java │ └── ProjectionTest.java ├── videoplayer-exo2 ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── tv │ │ └── danmaku │ │ └── ijk │ │ └── media │ │ └── exo2 │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── tv │ │ │ └── danmaku │ │ │ └── ijk │ │ │ └── media │ │ │ └── exo2 │ │ │ ├── IjkExo2MediaPlayer.java │ │ │ └── demo │ │ │ ├── EventLogger.java │ │ │ └── player │ │ │ └── SimpleExoPlayer2.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── tv │ └── danmaku │ └── ijk │ └── media │ └── exo2 │ └── ExampleUnitTest.java ├── videoplayer-java ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── tv │ │ └── danmaku │ │ └── ijk │ │ └── media │ │ └── player │ │ └── ExampleInstrumentedTest.java │ ├── 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 │ └── test │ └── java │ └── tv │ └── danmaku │ └── ijk │ └── media │ └── player │ └── ExampleUnitTest.java ├── videoplayer-videocache ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── danikula │ │ └── videocache │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── danikula │ │ │ └── videocache │ │ │ ├── ByteArrayCache.java │ │ │ ├── ByteArraySource.java │ │ │ ├── Cache.java │ │ │ ├── CacheListener.java │ │ │ ├── Config.java │ │ │ ├── GetRequest.java │ │ │ ├── HttpProxyCache.java │ │ │ ├── HttpProxyCacheDebuger.java │ │ │ ├── HttpProxyCacheServer.java │ │ │ ├── HttpProxyCacheServerClients.java │ │ │ ├── HttpUrlSource.java │ │ │ ├── IgnoreHostProxySelector.java │ │ │ ├── InterruptedProxyCacheException.java │ │ │ ├── Pinger.java │ │ │ ├── Preconditions.java │ │ │ ├── ProxyCache.java │ │ │ ├── ProxyCacheException.java │ │ │ ├── ProxyCacheUtils.java │ │ │ ├── Source.java │ │ │ ├── SourceInfo.java │ │ │ ├── StorageUtils.java │ │ │ ├── file │ │ │ ├── DiskUsage.java │ │ │ ├── FileCache.java │ │ │ ├── FileNameGenerator.java │ │ │ ├── Files.java │ │ │ ├── LruDiskUsage.java │ │ │ ├── Md5FileNameGenerator.java │ │ │ ├── TotalCountLruDiskUsage.java │ │ │ ├── TotalSizeLruDiskUsage.java │ │ │ └── UnlimitedDiskUsage.java │ │ │ ├── headers │ │ │ ├── EmptyHeadersInjector.java │ │ │ └── HeaderInjector.java │ │ │ └── sourcestorage │ │ │ ├── DatabaseSourceInfoStorage.java │ │ │ ├── NoSourceInfoStorage.java │ │ │ ├── SourceInfoStorage.java │ │ │ └── SourceInfoStorageFactory.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── danikula │ └── videocache │ └── ExampleUnitTest.java └── videoplayer ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src ├── androidTest └── java │ └── com │ └── ybj366533 │ └── videoplayer │ └── ExampleInstrumentedTest.java ├── main ├── AndroidManifest.xml ├── java │ └── com │ │ └── ybj366533 │ │ └── videoplayer │ │ ├── BaseADActivityDetail.java │ │ ├── BaseActivityDetail.java │ │ ├── PreViewManager.java │ │ ├── VideoADManager.java │ │ ├── VideoBaseManager.java │ │ ├── VideoManager.java │ │ ├── base │ │ ├── BaseVideoPlayer.java │ │ ├── BaseVideoView.java │ │ ├── TextureRenderView.java │ │ └── VideoViewBridge.java │ │ ├── builder │ │ ├── PageOptionBuilder.java │ │ └── VideoOptionBuilder.java │ │ ├── listener │ │ ├── LockClickListener.java │ │ ├── MediaPlayerListener.java │ │ ├── SampleCallBack.java │ │ ├── VideoAllCallBack.java │ │ ├── VideoGifSaveListener.java │ │ ├── VideoPlayerListener.java │ │ ├── VideoProgressListener.java │ │ ├── VideoShotListener.java │ │ └── VideoShotSaveListener.java │ │ ├── model │ │ ├── TextModel.java │ │ ├── VideoEntity.java │ │ ├── VideoModel.java │ │ └── VideoOptionModel.java │ │ ├── player │ │ ├── EXO2PlayerManager.java │ │ ├── IJKPlayerManager.java │ │ ├── IPlayerManager.java │ │ └── SystemPlayerManager.java │ │ ├── render │ │ ├── RenderView.java │ │ ├── effect │ │ │ ├── AutoFixEffect.java │ │ │ ├── BarrelBlurEffect.java │ │ │ ├── BlackAndWhiteEffect.java │ │ │ ├── BrightnessEffect.java │ │ │ ├── ContrastEffect.java │ │ │ ├── CrossProcessEffect.java │ │ │ ├── DocumentaryEffect.java │ │ │ ├── DuotoneEffect.java │ │ │ ├── FillLightEffect.java │ │ │ ├── GammaEffect.java │ │ │ ├── GaussianBlurEffect.java │ │ │ ├── GrainEffect.java │ │ │ ├── GreyScaleEffect.java │ │ │ ├── HueEffect.java │ │ │ ├── InvertColorsEffect.java │ │ │ ├── LamoishEffect.java │ │ │ ├── NoEffect.java │ │ │ ├── OverlayEffect.java │ │ │ ├── PosterizeEffect.java │ │ │ ├── SampleBlurEffect.java │ │ │ ├── SaturationEffect.java │ │ │ ├── SepiaEffect.java │ │ │ ├── SharpnessEffect.java │ │ │ ├── TemperatureEffect.java │ │ │ ├── TintEffect.java │ │ │ └── VignetteEffect.java │ │ ├── glrender │ │ │ ├── VideoGLViewBaseRender.java │ │ │ └── VideoGLViewSimpleRender.java │ │ └── view │ │ │ ├── IMiGuRenderView.java │ │ │ ├── MiGuSurfaceView.java │ │ │ ├── MiGuTextureView.java │ │ │ ├── MiguVideoGLView.java │ │ │ └── listener │ │ │ ├── IMiGuSurfaceListener.java │ │ │ ├── MiGuGLSurfaceListener.java │ │ │ └── VideoGLRenderErrorListener.java │ │ ├── utils │ │ ├── AnimatedGifEncoder.java │ │ ├── CommonUtil.java │ │ ├── Debuger.java │ │ ├── FileOperation.java │ │ ├── FileUtils.java │ │ ├── GifCreateHelper.java │ │ ├── ListVideoUtil.java │ │ ├── MeasureHelper.java │ │ ├── MyFileNameGenerator.java │ │ ├── NetInfoModule.java │ │ ├── NetworkUtils.java │ │ ├── OrientationUtils.java │ │ ├── RawDataSourceProvider.java │ │ ├── StorageUtils.java │ │ ├── VideoHelper.java │ │ └── VideoType.java │ │ ├── video │ │ ├── ADVideoPlayer.java │ │ ├── FullScreenVideoView.java │ │ ├── ListVideoPlayer.java │ │ ├── NormalVideoPlayer.java │ │ ├── SampleADVideoPlayer.java │ │ ├── StandardVideoPlayer.java │ │ └── base │ │ │ ├── BaseVideoPlayer.java │ │ │ ├── BaseVideoView.java │ │ │ ├── MTextureRenderView.java │ │ │ ├── MVideoControlView.java │ │ │ ├── MVideoPlayer.java │ │ │ └── PageVideoControlView.java │ │ ├── view │ │ ├── ENDownloadView.java │ │ ├── ENPlayView.java │ │ └── SmallVideoTouch.java │ │ └── widget │ │ ├── InfoHudViewHolder.java │ │ ├── TableLayoutBinder.java │ │ ├── seekbar │ │ ├── ArrowView.java │ │ ├── BuilderParams.java │ │ ├── CircleBubbleView.java │ │ ├── Indicator.java │ │ ├── IndicatorSeekBar.java │ │ ├── IndicatorSeekBarListener.java │ │ ├── IndicatorSeekBarType.java │ │ ├── IndicatorType.java │ │ ├── IndicatorUtils.java │ │ └── TickType.java │ │ └── viewpager │ │ ├── OnViewPagerListener.java │ │ └── ViewPagerLayoutManager.java └── res │ ├── drawable-xxhdpi │ ├── images_0.jpeg │ ├── images_1.jpeg │ ├── images_10.jpeg │ ├── images_2.jpeg │ ├── images_3.jpeg │ ├── images_4.jpeg │ ├── images_5.jpeg │ ├── images_6.jpeg │ ├── images_7.jpeg │ ├── images_8.jpeg │ ├── images_9.jpeg │ ├── isb_indicator_rounded_corners.xml │ ├── isb_indicator_square_corners.xml │ ├── loading_progress.gif │ ├── lock.png │ ├── message_tip_bg.png │ ├── migu.png │ ├── share_normal.png │ ├── share_pressed.png │ ├── unlock.png │ ├── video_back.png │ ├── video_backward_icon.png │ ├── video_brightness_6_white_36dp.png │ ├── video_enlarge.png │ ├── video_error_normal.png │ ├── video_error_pressed.png │ ├── video_forward_icon.png │ ├── video_loading_bg.png │ ├── video_pause_normal.png │ ├── video_pause_pressed.png │ ├── video_play_normal.png │ ├── video_play_pressed.png │ ├── video_shrink.png │ ├── video_small_close.png │ └── video_volume_icon.png │ ├── drawable │ ├── empty_drawable.xml │ ├── video_click_error_selector.xml │ ├── video_click_pause_selector.xml │ ├── video_click_play_selector.xml │ ├── video_dialog_progress.xml │ ├── video_dialog_progress_bg.xml │ ├── video_jump_btn_bg.xml │ ├── video_loading.xml │ ├── video_progress.xml │ ├── video_seek_progress.xml │ ├── video_seek_thumb.xml │ ├── video_seek_thumb_normal.xml │ ├── video_seek_thumb_pressed.xml │ ├── video_title_bg.xml │ └── video_volume_progress_bg.xml │ ├── layout │ ├── isb_indicator.xml │ ├── table_media_info.xml │ ├── table_media_info_row1.xml │ ├── table_media_info_row2.xml │ ├── table_media_info_section.xml │ ├── video_brightness.xml │ ├── video_layout_ad.xml │ ├── video_layout_custom.xml │ ├── video_layout_normal.xml │ ├── video_layout_page.xml │ ├── video_layout_sample_ad.xml │ ├── video_layout_standard.xml │ ├── video_progress_dialog.xml │ └── video_volume_dialog.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── id.xml │ ├── seekbar_attr.xml │ ├── strings.xml │ └── style.xml └── test └── java └── com └── ybj366533 └── videoplayer └── ExampleUnitTest.java /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /VideoPalyer_Structure.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/VideoPalyer_Structure.jpg -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/ybj366533/yy_videoplayer/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer 2 | 3 | import android.support.test.InstrumentationRegistry 4 | import android.support.test.runner.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getTargetContext() 22 | assertEquals("com.ybj366533.yy_videoplayer", appContext.packageName) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/AppApplication.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer; 2 | 3 | import android.app.Application; 4 | 5 | 6 | public class AppApplication extends Application { 7 | 8 | @Override 9 | public void onCreate() { 10 | super.onCreate(); 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/anim/AnimListener.kt: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.anim 2 | 3 | import android.animation.Animator 4 | import android.animation.ValueAnimator 5 | 6 | /** 7 | * Created by wittyneko on 2017/7/6. 8 | */ 9 | interface AnimListener : ValueAnimator.AnimatorUpdateListener, Animator.AnimatorListener { 10 | } 11 | 12 | open class SampleAnimListener : AnimListener { 13 | 14 | override fun onAnimationUpdate(animation: ValueAnimator?) { 15 | } 16 | 17 | override fun onAnimationStart(animation: Animator?) { 18 | } 19 | 20 | override fun onAnimationEnd(animation: Animator?) { 21 | } 22 | 23 | override fun onAnimationCancel(animation: Animator?) { 24 | } 25 | 26 | override fun onAnimationRepeat(animation: Animator?) { 27 | } 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/holder/RecyclerItemBaseHolder.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.holder; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | 6 | /** 7 | */ 8 | 9 | public class RecyclerItemBaseHolder extends RecyclerView.ViewHolder { 10 | 11 | RecyclerView.Adapter recyclerBaseAdapter; 12 | 13 | public RecyclerItemBaseHolder(View itemView) { 14 | super(itemView); 15 | } 16 | 17 | public RecyclerView.Adapter getRecyclerBaseAdapter() { 18 | return recyclerBaseAdapter; 19 | } 20 | 21 | public void setRecyclerBaseAdapter(RecyclerView.Adapter recyclerBaseAdapter) { 22 | this.recyclerBaseAdapter = recyclerBaseAdapter; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/listener/OnTransitionListener.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.listener; 2 | 3 | import android.annotation.TargetApi; 4 | import android.os.Build; 5 | import android.transition.Transition; 6 | 7 | /** 8 | * 重载了过渡动画的方法 9 | */ 10 | 11 | @TargetApi(Build.VERSION_CODES.KITKAT) 12 | public class OnTransitionListener implements Transition.TransitionListener { 13 | 14 | 15 | @Override 16 | public void onTransitionStart(Transition transition) { 17 | 18 | } 19 | 20 | @Override 21 | public void onTransitionEnd(Transition transition) { 22 | 23 | } 24 | 25 | @Override 26 | public void onTransitionCancel(Transition transition) { 27 | 28 | } 29 | 30 | @Override 31 | public void onTransitionPause(Transition transition) { 32 | 33 | } 34 | 35 | @Override 36 | public void onTransitionResume(Transition transition) { 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/model/SwitchVideoModel.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.model; 2 | 3 | /** 4 | */ 5 | 6 | public class SwitchVideoModel { 7 | private String url; 8 | private String name; 9 | 10 | public SwitchVideoModel(String name, String url) { 11 | this.name = name; 12 | this.url = url; 13 | } 14 | 15 | public String getUrl() { 16 | return url; 17 | } 18 | 19 | public void setUrl(String url) { 20 | this.url = url; 21 | } 22 | 23 | public String getName() { 24 | return name; 25 | } 26 | 27 | public void setName(String name) { 28 | this.name = name; 29 | } 30 | 31 | @Override 32 | public String toString() { 33 | return this.name; 34 | } 35 | } -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/utils/floatUtil/FloatView.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.utils.floatUtil; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * https://github.com/yhaolpz 7 | */ 8 | 9 | abstract class FloatView { 10 | 11 | abstract void setSize(int width, int height); 12 | 13 | abstract void setView(View view); 14 | 15 | abstract void setGravity(int gravity, int xOffset, int yOffset); 16 | 17 | abstract void init(); 18 | 19 | abstract void dismiss(); 20 | 21 | void updateXY(int x, int y) { 22 | } 23 | 24 | void updateX(int x) { 25 | } 26 | 27 | void updateY(int y) { 28 | } 29 | 30 | int getX() { 31 | return 0; 32 | } 33 | 34 | int getY() { 35 | return 0; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/utils/floatUtil/IFloatWindow.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.utils.floatUtil; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * https://github.com/yhaolpz 7 | */ 8 | 9 | public abstract class IFloatWindow { 10 | public abstract void show(); 11 | 12 | public abstract void hide(); 13 | 14 | public abstract int getX(); 15 | 16 | public abstract int getY(); 17 | 18 | public abstract void updateX(int x); 19 | 20 | public abstract void updateX(@Screen.screenType int screenType,float ratio); 21 | 22 | public abstract void updateY(int y); 23 | 24 | public abstract void updateY(@Screen.screenType int screenType,float ratio); 25 | 26 | public abstract View getView(); 27 | 28 | abstract void dismiss(); 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/utils/floatUtil/LifecycleListener.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.utils.floatUtil; 2 | 3 | /** 4 | * https://github.com/yhaolpz 5 | */ 6 | 7 | interface LifecycleListener { 8 | 9 | void onShow(); 10 | 11 | void onHide(); 12 | 13 | void onPostHide(); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/utils/floatUtil/MoveType.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.utils.floatUtil; 2 | 3 | import android.support.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | /** 9 | * https://github.com/yhaolpz 10 | */ 11 | 12 | public class MoveType { 13 | static final int fixed = 0; 14 | public static final int free = 1; 15 | public static final int active = 2; 16 | public static final int slide = 3; 17 | public static final int back = 4; 18 | 19 | @IntDef({fixed, free, active, slide, back}) 20 | @Retention(RetentionPolicy.SOURCE) 21 | @interface MOVE_TYPE { 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/utils/floatUtil/PermissionListener.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.utils.floatUtil; 2 | 3 | /** 4 | * https://github.com/yhaolpz 5 | */ 6 | interface PermissionListener { 7 | void onSuccess(); 8 | 9 | void onFail(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/utils/floatUtil/Screen.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.utils.floatUtil; 2 | 3 | import android.support.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | /** 9 | * https://github.com/yhaolpz 10 | */ 11 | 12 | public class Screen { 13 | public static final int width = 0; 14 | public static final int height = 1; 15 | 16 | @IntDef({width, height}) 17 | @Retention(RetentionPolicy.SOURCE) 18 | @interface screenType { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/ybj366533/yy_videoplayer/video/listener/MiGuVideoPlayerListener.java: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer.video.listener; 2 | 3 | public class MiGuVideoPlayerListener { 4 | } 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/custom_enlarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/drawable-xhdpi/custom_enlarge.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/custom_shrink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/drawable-xhdpi/custom_shrink.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_wiht_shadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_big_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dialog_btn_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/play_arrow.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_new_seekbar_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_new_volume_progress_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_seek_new_thumb_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_seek_new_thumb_press.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_details_player.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_play.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_scrolling.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_page.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_floating_play.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_floating_video.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 14 | 15 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_loading_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_video_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | 14 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_video_item_ad.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 12 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_video_item_mutli.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_video_item_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_video_plsyer_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/switch_video_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/switch_video_dialog_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/add_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xhdpi/add_bg.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/add_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xhdpi/add_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/heart_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xhdpi/heart_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/img_video_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xhdpi/img_video_1.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/img_video_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xhdpi/img_video_2.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/msg_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xhdpi/msg_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/search_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xhdpi/search_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/share_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xhdpi/share_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/raw/video_1.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/raw/video_1.mp4 -------------------------------------------------------------------------------- /app/src/main/res/raw/video_2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/app/src/main/res/raw/video_2.mp4 -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | #00000000 7 | #56b3b3b3 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | 200dp 7 | 8 | 150dp 9 | @dimen/post_media_height 10 | 16dp 11 | 16dp 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values/id.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/test/java/com/ybj366533/yy_videoplayer/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.ybj366533.yy_videoplayer 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | apply from: "dependencies.gradle" 5 | ext.kotlin_version = '1.3.50' 6 | repositories { 7 | maven { url rootProject.ext.maven.aliyunMaven } 8 | google() 9 | jcenter() 10 | } 11 | dependencies { 12 | classpath 'com.android.tools.build:gradle:3.5.0' 13 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 14 | // NOTE: Do not place your application dependencies here; they belong 15 | // in the individual module build.gradle files 16 | } 17 | } 18 | 19 | allprojects { 20 | repositories { 21 | maven { url rootProject.ext.maven.aliyunMaven } 22 | google() 23 | jcenter() 24 | } 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu May 17 10:44:01 CST 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip 7 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':videoplayer', ':videoplayer-videocache', ':videoplayer-java', ':videoplayer-armv7a', ':videoplayer-arm64' 2 | -------------------------------------------------------------------------------- /videoplayer-arm64/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /videoplayer-arm64/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_NAME=ijkplayer-arm64 2 | POM_ARTIFACT_ID=ijkplayer-arm64 3 | POM_PACKAGING=aar -------------------------------------------------------------------------------- /videoplayer-arm64/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /opt/android/ADK/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} -------------------------------------------------------------------------------- /videoplayer-arm64/src/androidTest/java/tv/danmaku/ijk/media/player_arm64/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package tv.danmaku.ijk.media.player_arm64; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | ijkplayer-arm64 4 | 5 | 6 | 7 | 8 | 9 | com.android.ide.eclipse.adt.ResourceManagerBuilder 10 | 11 | 12 | 13 | 14 | com.android.ide.eclipse.adt.PreCompilerBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.jdt.core.javabuilder 20 | 21 | 22 | 23 | 24 | com.android.ide.eclipse.adt.ApkBuilder 25 | 26 | 27 | 28 | 29 | 30 | com.android.ide.eclipse.adt.AndroidNature 31 | org.eclipse.jdt.core.javanature 32 | 33 | 34 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 3 | org.eclipse.jdt.core.compiler.compliance=1.6 4 | org.eclipse.jdt.core.compiler.source=1.6 5 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/java/tv/danmaku/ijk/media/player_arm64/Pragma.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Bilibili 3 | * Copyright (C) 2015 Zhang Rui 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package tv.danmaku.ijk.media.player_arm64; 19 | 20 | public class Pragma { 21 | 22 | } 23 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ffmpeg/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | LOCAL_MODULE := ijkffmpeg 5 | LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/libijkffmpeg.so 6 | include $(PREBUILT_SHARED_LIBRARY) -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/Android.mk: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2013 Bilibili 2 | # copyright (c) 2013 Zhang Rui 3 | # 4 | # This file is part of ijkPlayer. 5 | # 6 | # ijkPlayer is free software; you can redistribute it and/or 7 | # modify it under the terms of the GNU Lesser General Public 8 | # License as published by the Free Software Foundation; either 9 | # version 2.1 of the License, or (at your option) any later version. 10 | # 11 | # ijkPlayer is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | # Lesser General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU Lesser General Public 17 | # License along with ijkPlayer; if not, write to the Free Software 18 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 | 20 | LOCAL_PATH := $(call my-dir) 21 | include $(call all-subdir-makefiles) 22 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/.gitignore: -------------------------------------------------------------------------------- 1 | bin 2 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/AudioTrack.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/media/AudioTrack.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/AudioTrack.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_media_AudioTrack); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/MediaCodec.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/media/MediaCodec.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/MediaCodec.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_media_MediaCodec); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/MediaFormat.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/media/MediaFormat.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/MediaFormat.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_media_MediaFormat); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/PlaybackParams.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/media/PlaybackParams.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/PlaybackParams.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_media_PlaybackParams); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/os/Build.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/os/Build.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/os/Build.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_os_Build); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/os/Bundle.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/os/Bundle.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/os/Bundle.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_os_Bundle); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/nio/Buffer.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/java/nio/Buffer.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/nio/Buffer.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(java_nio_Buffer); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/nio/ByteBuffer.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/java/nio/ByteBuffer.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/nio/ByteBuffer.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(java_nio_ByteBuffer); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/util/ArrayList.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/java/util/ArrayList.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/util/ArrayList.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(java_util_ArrayList); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/IjkMediaPlayer.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/tv/danmaku/ijk/media/player/IjkMediaPlayer.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/IjkMediaPlayer.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_IjkMediaPlayer); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/misc/IAndroidIO.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/tv/danmaku/ijk/media/player/misc/IAndroidIO.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/misc/IAndroidIO.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_misc_IAndroidIO); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/misc/IMediaDataSource.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/tv/danmaku/ijk/media/player/misc/IMediaDataSource.h" -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/misc/IMediaDataSource.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_misc_IMediaDataSource); -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/j4a_allclasses.include.h: -------------------------------------------------------------------------------- 1 | #include "j4a/class/java/nio/Buffer.h" 2 | #include "j4a/class/java/nio/ByteBuffer.h" 3 | #include "j4a/class/java/util/ArrayList.h" 4 | #include "j4a/class/android/media/AudioTrack.h" 5 | #include "j4a/class/android/media/MediaCodec.h" 6 | #include "j4a/class/android/media/MediaFormat.h" 7 | #include "j4a/class/android/media/PlaybackParams.h" 8 | #include "j4a/class/android/os/Build.h" 9 | #include "j4a/class/android/os/Bundle.h" 10 | #include "j4a/class/tv/danmaku/ijk/media/player/misc/IMediaDataSource.h" 11 | #include "j4a/class/tv/danmaku/ijk/media/player/misc/IAndroidIO.h" 12 | #include "j4a/class/tv/danmaku/ijk/media/player/IjkMediaPlayer.h" 13 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/j4a/j4a_allclasses.loader.h: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(java_nio_Buffer); 2 | J4A_LOAD_CLASS(java_nio_ByteBuffer); 3 | J4A_LOAD_CLASS(java_util_ArrayList); 4 | J4A_LOAD_CLASS(android_media_AudioTrack); 5 | J4A_LOAD_CLASS(android_media_MediaCodec); 6 | J4A_LOAD_CLASS(android_media_MediaFormat); 7 | J4A_LOAD_CLASS(android_media_PlaybackParams); 8 | J4A_LOAD_CLASS(android_os_Build); 9 | J4A_LOAD_CLASS(android_os_Bundle); 10 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_misc_IMediaDataSource); 11 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_misc_IAndroidIO); 12 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_IjkMediaPlayer); 13 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/android/media/MediaCrypto.java: -------------------------------------------------------------------------------- 1 | package android.media; 2 | 3 | @Hide 4 | @MinApi(16) 5 | public class MediaCrypto { 6 | } 7 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/android/media/MediaFormat.java: -------------------------------------------------------------------------------- 1 | package android.media; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | @SimpleCClassName 6 | @MinApi(16) 7 | public class MediaFormat { 8 | public MediaFormat(); 9 | 10 | public final static MediaFormat createVideoFormat(String mime, int width, int height); 11 | 12 | public final int getInteger(String name); 13 | public final void setInteger(String name, int value); 14 | public final void setByteBuffer(String name, ByteBuffer bytes); 15 | } 16 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/android/media/PlaybackParams.java: -------------------------------------------------------------------------------- 1 | package android.media; 2 | 3 | @SimpleCClassName 4 | @MinApi(23) 5 | public class PlaybackParams { 6 | public PlaybackParams setSpeed(float speed); 7 | } 8 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/android/os/Build.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class Build { 4 | public static class VERSION { 5 | public static final int SDK_INT; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/android/os/Bundle.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | import java.util.ArrayList; 4 | 5 | @SimpleCClassName 6 | public class Bundle { 7 | public Bundle(); 8 | 9 | public int getInt(String key, int defaultValue); 10 | public void putInt(String key, int value); 11 | 12 | public String getString(String key); 13 | public void putString(String key, String value); 14 | 15 | public void putParcelableArrayList(String key, ArrayList value); 16 | public long getLong(String key); 17 | public void putLong(String key, long value); 18 | } 19 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/java/nio/Buffer.java: -------------------------------------------------------------------------------- 1 | package java.nio; 2 | 3 | public class Buffer { 4 | } 5 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/java/nio/ByteBuffer.java: -------------------------------------------------------------------------------- 1 | package java.nio; 2 | 3 | import android.os.Build; 4 | 5 | @SimpleCClassName 6 | @IncludeUtil 7 | public class ByteBuffer { 8 | public static ByteBuffer allocate(int capacity); 9 | public static ByteBuffer allocateDirect(int capacity); 10 | public final Buffer limit(int newLimit); 11 | } 12 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/java/util/ArrayList.java: -------------------------------------------------------------------------------- 1 | package java.util; 2 | 3 | @SimpleCClassName 4 | public class ArrayList { 5 | public ArrayList(); 6 | boolean add(Object object); 7 | } 8 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java: -------------------------------------------------------------------------------- 1 | package tv.danmaku.ijk.media.player; 2 | 3 | import android.os.Bundle; 4 | 5 | @SimpleCClassName 6 | public class IjkMediaPlayer { 7 | private long mNativeMediaPlayer; 8 | private long mNativeMediaDataSource; 9 | private long mNativeAndroidIO; 10 | 11 | private static void postEventFromNative(Object weakThiz, int what, int arg1, int arg2, Object obj); 12 | private static String onSelectCodec(Object weakThiz, String mimeType, int profile, int level); 13 | private static boolean onNativeInvoke(Object weakThiz, int what, Bundle args); 14 | } 15 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/tv/danmaku/ijk/media/player/misc/IAndroidIO.java: -------------------------------------------------------------------------------- 1 | package tv.danmaku.ijk.media.player.misc; 2 | 3 | @SimpleCClassName 4 | public interface IAndroidIO { 5 | int open(String url); 6 | int read(byte[] buffer, int size); 7 | long seek(long offset, int whence); 8 | int close(); 9 | } 10 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkj4a/java/tv/danmaku/ijk/media/player/misc/IMediaDataSource.java: -------------------------------------------------------------------------------- 1 | package tv.danmaku.ijk.media.player.misc; 2 | 3 | @SimpleCClassName 4 | public interface IMediaDataSource { 5 | int readAt(long position, byte[] buffer, int offset, int size); 6 | long getSize(); 7 | void close(); 8 | } 9 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkplayer/.gitignore: -------------------------------------------------------------------------------- 1 | ijkversion.h 2 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/jni/ijkmedia/ijkplayer/ijkavutil/ijkutils.c: -------------------------------------------------------------------------------- 1 | 2 | #include "ijkutils.h" 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | void ijk_av_freep(void *arg) 11 | { 12 | void *val; 13 | 14 | memcpy(&val, arg, sizeof(val)); 15 | memcpy(arg, &(void *){ NULL }, sizeof(val)); 16 | free(val); 17 | } 18 | 19 | int ijk_av_strstart(const char *str, const char *pfx, const char **ptr) 20 | { 21 | while (*pfx && *pfx == *str) { 22 | pfx++; 23 | str++; 24 | } 25 | if (!*pfx && ptr) 26 | *ptr = str; 27 | return !*pfx; 28 | } 29 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system edit 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | # 10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 12 | 13 | # Project target. 14 | target=android-22 15 | android.library=true 16 | -------------------------------------------------------------------------------- /videoplayer-arm64/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /videoplayer-armv7a/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /videoplayer-armv7a/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_NAME=ijkplayer-armv7a 2 | POM_ARTIFACT_ID=ijkplayer-armv7a 3 | POM_PACKAGING=aar -------------------------------------------------------------------------------- /videoplayer-armv7a/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /opt/android/ADK/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/androidTest/java/tv/danmaku/ijk/media/player_armv7a/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package tv.danmaku.ijk.media.player_armv7a; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | ijkplayer-armv7a 4 | 5 | 6 | 7 | 8 | 9 | com.android.ide.eclipse.adt.ResourceManagerBuilder 10 | 11 | 12 | 13 | 14 | com.android.ide.eclipse.adt.PreCompilerBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.jdt.core.javabuilder 20 | 21 | 22 | 23 | 24 | com.android.ide.eclipse.adt.ApkBuilder 25 | 26 | 27 | 28 | 29 | 30 | com.android.ide.eclipse.adt.AndroidNature 31 | org.eclipse.jdt.core.javanature 32 | 33 | 34 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 3 | org.eclipse.jdt.core.compiler.compliance=1.6 4 | org.eclipse.jdt.core.compiler.source=1.6 5 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/java/tv/danmaku/ijk/media/player_armv7a/Pragma.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Bilibili 3 | * Copyright (C) 2015 Zhang Rui 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package tv.danmaku.ijk.media.player_armv7a; 19 | 20 | public class Pragma { 21 | 22 | } 23 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ffmpeg/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | LOCAL_MODULE := ijkffmpeg 5 | LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/libijkffmpeg.so 6 | include $(PREBUILT_SHARED_LIBRARY) -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/Android.mk: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2013 Bilibili 2 | # copyright (c) 2013 Zhang Rui 3 | # 4 | # This file is part of ijkPlayer. 5 | # 6 | # ijkPlayer is free software; you can redistribute it and/or 7 | # modify it under the terms of the GNU Lesser General Public 8 | # License as published by the Free Software Foundation; either 9 | # version 2.1 of the License, or (at your option) any later version. 10 | # 11 | # ijkPlayer is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | # Lesser General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU Lesser General Public 17 | # License along with ijkPlayer; if not, write to the Free Software 18 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 | 20 | LOCAL_PATH := $(call my-dir) 21 | include $(call all-subdir-makefiles) 22 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/.gitignore: -------------------------------------------------------------------------------- 1 | bin 2 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/AudioTrack.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/media/AudioTrack.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/AudioTrack.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_media_AudioTrack); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/MediaCodec.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/media/MediaCodec.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/MediaCodec.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_media_MediaCodec); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/MediaFormat.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/media/MediaFormat.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/MediaFormat.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_media_MediaFormat); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/PlaybackParams.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/media/PlaybackParams.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/media/PlaybackParams.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_media_PlaybackParams); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/os/Build.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/os/Build.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/os/Build.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_os_Build); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/os/Bundle.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/android/os/Bundle.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/android/os/Bundle.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(android_os_Bundle); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/nio/Buffer.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/java/nio/Buffer.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/nio/Buffer.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(java_nio_Buffer); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/nio/ByteBuffer.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/java/nio/ByteBuffer.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/nio/ByteBuffer.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(java_nio_ByteBuffer); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/util/ArrayList.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/java/util/ArrayList.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/java/util/ArrayList.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(java_util_ArrayList); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/IjkMediaPlayer.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/tv/danmaku/ijk/media/player/IjkMediaPlayer.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/IjkMediaPlayer.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_IjkMediaPlayer); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/misc/IAndroidIO.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/tv/danmaku/ijk/media/player/misc/IAndroidIO.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/misc/IAndroidIO.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_misc_IAndroidIO); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/misc/IMediaDataSource.include.j4a: -------------------------------------------------------------------------------- 1 | #include "j4a/class/tv/danmaku/ijk/media/player/misc/IMediaDataSource.h" -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/misc/IMediaDataSource.loader.j4a: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_misc_IMediaDataSource); -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/j4a_allclasses.include.h: -------------------------------------------------------------------------------- 1 | #include "j4a/class/java/nio/Buffer.h" 2 | #include "j4a/class/java/nio/ByteBuffer.h" 3 | #include "j4a/class/java/util/ArrayList.h" 4 | #include "j4a/class/android/media/AudioTrack.h" 5 | #include "j4a/class/android/media/MediaCodec.h" 6 | #include "j4a/class/android/media/MediaFormat.h" 7 | #include "j4a/class/android/media/PlaybackParams.h" 8 | #include "j4a/class/android/os/Build.h" 9 | #include "j4a/class/android/os/Bundle.h" 10 | #include "j4a/class/tv/danmaku/ijk/media/player/misc/IMediaDataSource.h" 11 | #include "j4a/class/tv/danmaku/ijk/media/player/misc/IAndroidIO.h" 12 | #include "j4a/class/tv/danmaku/ijk/media/player/IjkMediaPlayer.h" 13 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/j4a/j4a_allclasses.loader.h: -------------------------------------------------------------------------------- 1 | J4A_LOAD_CLASS(java_nio_Buffer); 2 | J4A_LOAD_CLASS(java_nio_ByteBuffer); 3 | J4A_LOAD_CLASS(java_util_ArrayList); 4 | J4A_LOAD_CLASS(android_media_AudioTrack); 5 | J4A_LOAD_CLASS(android_media_MediaCodec); 6 | J4A_LOAD_CLASS(android_media_MediaFormat); 7 | J4A_LOAD_CLASS(android_media_PlaybackParams); 8 | J4A_LOAD_CLASS(android_os_Build); 9 | J4A_LOAD_CLASS(android_os_Bundle); 10 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_misc_IMediaDataSource); 11 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_misc_IAndroidIO); 12 | J4A_LOAD_CLASS(tv_danmaku_ijk_media_player_IjkMediaPlayer); 13 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/android/media/MediaCrypto.java: -------------------------------------------------------------------------------- 1 | package android.media; 2 | 3 | @Hide 4 | @MinApi(16) 5 | public class MediaCrypto { 6 | } 7 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/android/media/MediaFormat.java: -------------------------------------------------------------------------------- 1 | package android.media; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | @SimpleCClassName 6 | @MinApi(16) 7 | public class MediaFormat { 8 | public MediaFormat(); 9 | 10 | public final static MediaFormat createVideoFormat(String mime, int width, int height); 11 | 12 | public final int getInteger(String name); 13 | public final void setInteger(String name, int value); 14 | public final void setByteBuffer(String name, ByteBuffer bytes); 15 | } 16 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/android/media/PlaybackParams.java: -------------------------------------------------------------------------------- 1 | package android.media; 2 | 3 | @SimpleCClassName 4 | @MinApi(23) 5 | public class PlaybackParams { 6 | public PlaybackParams setSpeed(float speed); 7 | } 8 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/android/os/Build.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class Build { 4 | public static class VERSION { 5 | public static final int SDK_INT; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/android/os/Bundle.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | import java.util.ArrayList; 4 | 5 | @SimpleCClassName 6 | public class Bundle { 7 | public Bundle(); 8 | 9 | public int getInt(String key, int defaultValue); 10 | public void putInt(String key, int value); 11 | 12 | public String getString(String key); 13 | public void putString(String key, String value); 14 | 15 | public void putParcelableArrayList(String key, ArrayList value); 16 | public long getLong(String key); 17 | public void putLong(String key, long value); 18 | } 19 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/java/nio/Buffer.java: -------------------------------------------------------------------------------- 1 | package java.nio; 2 | 3 | public class Buffer { 4 | } 5 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/java/nio/ByteBuffer.java: -------------------------------------------------------------------------------- 1 | package java.nio; 2 | 3 | import android.os.Build; 4 | 5 | @SimpleCClassName 6 | @IncludeUtil 7 | public class ByteBuffer { 8 | public static ByteBuffer allocate(int capacity); 9 | public static ByteBuffer allocateDirect(int capacity); 10 | public final Buffer limit(int newLimit); 11 | } 12 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/java/util/ArrayList.java: -------------------------------------------------------------------------------- 1 | package java.util; 2 | 3 | @SimpleCClassName 4 | public class ArrayList { 5 | public ArrayList(); 6 | boolean add(Object object); 7 | } 8 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java: -------------------------------------------------------------------------------- 1 | package tv.danmaku.ijk.media.player; 2 | 3 | import android.os.Bundle; 4 | 5 | @SimpleCClassName 6 | public class IjkMediaPlayer { 7 | private long mNativeMediaPlayer; 8 | private long mNativeMediaDataSource; 9 | private long mNativeAndroidIO; 10 | 11 | private static void postEventFromNative(Object weakThiz, int what, int arg1, int arg2, Object obj); 12 | private static String onSelectCodec(Object weakThiz, String mimeType, int profile, int level); 13 | private static boolean onNativeInvoke(Object weakThiz, int what, Bundle args); 14 | } 15 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/tv/danmaku/ijk/media/player/misc/IAndroidIO.java: -------------------------------------------------------------------------------- 1 | package tv.danmaku.ijk.media.player.misc; 2 | 3 | @SimpleCClassName 4 | public interface IAndroidIO { 5 | int open(String url); 6 | int read(byte[] buffer, int size); 7 | long seek(long offset, int whence); 8 | int close(); 9 | } 10 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkj4a/java/tv/danmaku/ijk/media/player/misc/IMediaDataSource.java: -------------------------------------------------------------------------------- 1 | package tv.danmaku.ijk.media.player.misc; 2 | 3 | @SimpleCClassName 4 | public interface IMediaDataSource { 5 | int readAt(long position, byte[] buffer, int offset, int size); 6 | long getSize(); 7 | void close(); 8 | } 9 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkplayer/.gitignore: -------------------------------------------------------------------------------- 1 | ijkversion.h 2 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/jni/ijkmedia/ijkplayer/ijkavutil/ijkutils.c: -------------------------------------------------------------------------------- 1 | 2 | #include "ijkutils.h" 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | void ijk_av_freep(void *arg) 11 | { 12 | void *val; 13 | 14 | memcpy(&val, arg, sizeof(val)); 15 | memcpy(arg, &(void *){ NULL }, sizeof(val)); 16 | free(val); 17 | } 18 | 19 | int ijk_av_strstart(const char *str, const char *pfx, const char **ptr) 20 | { 21 | while (*pfx && *pfx == *str) { 22 | pfx++; 23 | str++; 24 | } 25 | if (!*pfx && ptr) 26 | *ptr = str; 27 | return !*pfx; 28 | } 29 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system edit 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | # 10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 12 | 13 | # Project target. 14 | target=android-22 15 | android.library=true 16 | -------------------------------------------------------------------------------- /videoplayer-armv7a/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /videoplayer-core/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /videoplayer-core/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /videoplayer-core/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /videoplayer-core/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /videoplayer-core/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /videoplayer-core/README.md: -------------------------------------------------------------------------------- 1 | # ExoPlayer core library module # 2 | 3 | The core of the ExoPlayer library. 4 | 5 | ## Links ## 6 | 7 | * [Javadoc][]: Note that this Javadoc is combined with that of other modules. 8 | 9 | [Javadoc]: https://exoplayer.dev/doc/reference/index.html 10 | -------------------------------------------------------------------------------- /videoplayer-core/buildout/generated/source/buildConfig/androidTest/debug/com/google/android/exoplayer2/core/test/BuildConfig.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Automatically generated file. DO NOT MODIFY 3 | */ 4 | package com.google.android.exoplayer2.core.test; 5 | 6 | public final class BuildConfig { 7 | public static final boolean DEBUG = Boolean.parseBoolean("true"); 8 | public static final String APPLICATION_ID = "com.google.android.exoplayer2.core.test"; 9 | public static final String BUILD_TYPE = "debug"; 10 | public static final String FLAVOR = ""; 11 | public static final int VERSION_CODE = -1; 12 | public static final String VERSION_NAME = ""; 13 | } 14 | -------------------------------------------------------------------------------- /videoplayer-core/buildout/generated/source/buildConfig/debug/com/google/android/exoplayer2/core/BuildConfig.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Automatically generated file. DO NOT MODIFY 3 | */ 4 | package com.google.android.exoplayer2.core; 5 | 6 | public final class BuildConfig { 7 | public static final boolean DEBUG = Boolean.parseBoolean("true"); 8 | public static final String APPLICATION_ID = "com.google.android.exoplayer2.core"; 9 | public static final String BUILD_TYPE = "debug"; 10 | public static final String FLAVOR = ""; 11 | public static final int VERSION_CODE = -1; 12 | public static final String VERSION_NAME = ""; 13 | } 14 | -------------------------------------------------------------------------------- /videoplayer-core/buildout/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"AAPT_FRIENDLY_MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":-1,"enabled":true,"outputFile":"library-core-debug.aar","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"com.google.android.exoplayer2.core","split":""}}] -------------------------------------------------------------------------------- /videoplayer-core/buildout/intermediates/merged_manifests/debug/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":-1,"enabled":true,"outputFile":"library-core-debug.aar","fullName":"debug","baseName":"debug"},"path":"../../library_manifest/debug/AndroidManifest.xml","properties":{"packageId":"com.google.android.exoplayer2.core","split":""}}] -------------------------------------------------------------------------------- /videoplayer-core/buildout/intermediates/merged_manifests/debugAndroidTest/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":-1,"enabled":true,"outputFile":"library-core-debug-androidTest.apk","fullName":"debugAndroidTest","baseName":"debug-androidTest"},"path":"AndroidManifest.xml","properties":{}}] -------------------------------------------------------------------------------- /videoplayer-core/src/androidTest/assets/binary/1024_incrementing_bytes.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/androidTest/assets/binary/1024_incrementing_bytes.mp3 -------------------------------------------------------------------------------- /videoplayer-core/src/androidTest/assets/bitmap/image_256_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/androidTest/assets/bitmap/image_256_256.png -------------------------------------------------------------------------------- /videoplayer-core/src/androidTest/assets/bitmap/image_80_60.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/androidTest/assets/bitmap/image_80_60.bmp -------------------------------------------------------------------------------- /videoplayer-core/src/androidTest/assets/mp4/testvid_1022ms.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/androidTest/assets/mp4/testvid_1022ms.mp4 -------------------------------------------------------------------------------- /videoplayer-core/src/androidTest/assets/mp4/video000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/androidTest/assets/mp4/video000.png -------------------------------------------------------------------------------- /videoplayer-core/src/androidTest/assets/mp4/video014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/androidTest/assets/mp4/video014.png -------------------------------------------------------------------------------- /videoplayer-core/src/androidTest/assets/mp4/video015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/androidTest/assets/mp4/video015.png -------------------------------------------------------------------------------- /videoplayer-core/src/androidTest/assets/mp4/video016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/androidTest/assets/mp4/video016.png -------------------------------------------------------------------------------- /videoplayer-core/src/androidTest/assets/mp4/video029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/androidTest/assets/mp4/video029.png -------------------------------------------------------------------------------- /videoplayer-core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /videoplayer-core/src/main/java/com/google/android/exoplayer2/PlaybackPreparer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2018 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.google.android.exoplayer2; 17 | 18 | /** Called to prepare a playback. */ 19 | public interface PlaybackPreparer { 20 | 21 | /** Called to prepare a playback. */ 22 | void preparePlayback(); 23 | } 24 | -------------------------------------------------------------------------------- /videoplayer-core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaCrypto.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.google.android.exoplayer2.drm; 17 | 18 | /** An opaque {@link android.media.MediaCrypto} equivalent. */ 19 | public interface ExoMediaCrypto {} 20 | -------------------------------------------------------------------------------- /videoplayer-core/src/main/java/com/google/android/exoplayer2/drm/KeysExpiredException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.google.android.exoplayer2.drm; 17 | 18 | /** 19 | * Thrown when the drm keys loaded into an open session expire. 20 | */ 21 | public final class KeysExpiredException extends Exception { 22 | } 23 | -------------------------------------------------------------------------------- /videoplayer-core/src/main/java/com/google/android/exoplayer2/extractor/ExtractorsFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.google.android.exoplayer2.extractor; 17 | 18 | /** Factory for arrays of {@link Extractor} instances. */ 19 | public interface ExtractorsFactory { 20 | 21 | /** Returns an array of new {@link Extractor} instances. */ 22 | Extractor[] createExtractors(); 23 | } 24 | -------------------------------------------------------------------------------- /videoplayer-core/src/main/java/com/google/android/exoplayer2/extractor/PositionHolder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.google.android.exoplayer2.extractor; 17 | 18 | /** 19 | * Holds a position in the stream. 20 | */ 21 | public final class PositionHolder { 22 | 23 | /** 24 | * The held position. 25 | */ 26 | public long position; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/amr/sample_nb.amr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/amr/sample_nb.amr -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/amr/sample_nb_cbr.amr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/amr/sample_nb_cbr.amr -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/amr/sample_nb_cbr.amr.3.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = true 3 | duration = 4360000 4 | getPosition(0) = [[timeUs=0, position=6]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = -1 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/3gpp 12 | maxInputSize = 61 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 1 19 | sampleRate = 8000 20 | pcmEncoding = -1 21 | encoderDelay = 0 22 | encoderPadding = 0 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | total output bytes = 13 29 | sample count = 1 30 | sample 0: 31 | time = 4340000 32 | flags = 1 33 | data = length 13, hash AC59BA7C 34 | tracksEnded = true 35 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/amr/sample_wb.amr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/amr/sample_wb.amr -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/amr/sample_wb_cbr.amr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/amr/sample_wb_cbr.amr -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/amr/sample_wb_cbr.amr.3.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = true 3 | duration = 3380000 4 | getPosition(0) = [[timeUs=0, position=9]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = -1 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/amr-wb 12 | maxInputSize = 61 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 1 19 | sampleRate = 16000 20 | pcmEncoding = -1 21 | encoderDelay = 0 22 | encoderPadding = 0 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | total output bytes = 24 29 | sample count = 1 30 | sample 0: 31 | time = 3360000 32 | flags = 1 33 | data = length 24, hash 772665A0 34 | tracksEnded = true 35 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/binary/1024_incrementing_bytes.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/binary/1024_incrementing_bytes.mp3 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/dash-download-v0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/dash-download-v0 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/dash-remove-v0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/dash-remove-v0 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/hls-download-v0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/hls-download-v0 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/hls-download-v1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/hls-download-v1 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/hls-remove-v0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/hls-remove-v0 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/hls-remove-v1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/hls-remove-v1 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/progressive-download-v0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/progressive-download-v0 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/progressive-remove-v0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/progressive-remove-v0 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/ss-download-v0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/ss-download-v0 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/ss-download-v1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/ss-download-v1 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/ss-remove-v0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/ss-remove-v0 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/download-actions/ss-remove-v1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/download-actions/ss-remove-v1 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/flv/sample.flv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/flv/sample.flv -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mkv/sample.mkv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/mkv/sample.mkv -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mkv/subsample_encrypted_altref.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/mkv/subsample_encrypted_altref.webm -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mkv/subsample_encrypted_noaltref.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/mkv/subsample_encrypted_noaltref.webm -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp3/bear.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/mp3/bear.mp3 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp3/bear.mp3.3.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = true 3 | duration = 2784000 4 | getPosition(0) = [[timeUs=0, position=201]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = -1 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/mpeg 12 | maxInputSize = 4096 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 2 19 | sampleRate = 48000 20 | pcmEncoding = -1 21 | encoderDelay = 956 22 | encoderPadding = 3352 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | total output bytes = 0 29 | sample count = 0 30 | tracksEnded = true 31 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp3/play-trimmed.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/mp3/play-trimmed.mp3 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp3/play-trimmed.mp3.0.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = true 3 | duration = 26122 4 | getPosition(0) = [[timeUs=0, position=0]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = -1 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/mpeg 12 | maxInputSize = 4096 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 2 19 | sampleRate = 44100 20 | pcmEncoding = -1 21 | encoderDelay = 0 22 | encoderPadding = 0 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | total output bytes = 418 29 | sample count = 1 30 | sample 0: 31 | time = 0 32 | flags = 1 33 | data = length 418, hash B819987 34 | tracksEnded = true 35 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp3/play-trimmed.mp3.1.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = true 3 | duration = 26122 4 | getPosition(0) = [[timeUs=0, position=0]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = -1 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/mpeg 12 | maxInputSize = 4096 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 2 19 | sampleRate = 44100 20 | pcmEncoding = -1 21 | encoderDelay = 0 22 | encoderPadding = 0 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | total output bytes = 418 29 | sample count = 1 30 | sample 0: 31 | time = 0 32 | flags = 1 33 | data = length 418, hash B819987 34 | tracksEnded = true 35 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp3/play-trimmed.mp3.2.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = true 3 | duration = 26122 4 | getPosition(0) = [[timeUs=0, position=0]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = -1 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/mpeg 12 | maxInputSize = 4096 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 2 19 | sampleRate = 44100 20 | pcmEncoding = -1 21 | encoderDelay = 0 22 | encoderPadding = 0 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | total output bytes = 418 29 | sample count = 1 30 | sample 0: 31 | time = 0 32 | flags = 1 33 | data = length 418, hash B819987 34 | tracksEnded = true 35 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp3/play-trimmed.mp3.3.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = true 3 | duration = 26122 4 | getPosition(0) = [[timeUs=0, position=0]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = -1 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/mpeg 12 | maxInputSize = 4096 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 2 19 | sampleRate = 44100 20 | pcmEncoding = -1 21 | encoderDelay = 0 22 | encoderPadding = 0 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | total output bytes = 418 29 | sample count = 1 30 | sample 0: 31 | time = 0 32 | flags = 1 33 | data = length 418, hash B819987 34 | tracksEnded = true 35 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp3/play-trimmed.mp3.unklen.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = false 3 | duration = UNSET TIME 4 | getPosition(0) = [[timeUs=0, position=0]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = -1 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/mpeg 12 | maxInputSize = 4096 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 2 19 | sampleRate = 44100 20 | pcmEncoding = -1 21 | encoderDelay = 0 22 | encoderPadding = 0 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | total output bytes = 418 29 | sample count = 1 30 | sample 0: 31 | time = 0 32 | flags = 1 33 | data = length 418, hash B819987 34 | tracksEnded = true 35 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp4/sample.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/mp4/sample.mp4 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp4/sample_fragmented.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/mp4/sample_fragmented.mp4 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp4/sample_fragmented_seekable.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/mp4/sample_fragmented_seekable.mp4 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp4/sample_fragmented_sei.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/mp4/sample_fragmented_sei.mp4 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/mp4/testvid_1022ms.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/mp4/testvid_1022ms.mp4 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/offline/action_file_for_download_index_upgrade.exi: -------------------------------------------------------------------------------- 1 | testhttps://www.test.com/download1key123testhttps://www.test.com/download2key234 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/offline/action_file_incomplete_header.exi: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/offline/action_file_no_data.exi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/offline/action_file_no_data.exi -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/offline/action_file_one_action.exi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/offline/action_file_one_action.exi -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/offline/action_file_two_actions.exi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/offline/action_file_two_actions.exi -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/offline/action_file_unsupported_version.exi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/offline/action_file_unsupported_version.exi -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/offline/action_file_zero_actions.exi: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ogg/bear.opus: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ogg/bear.opus -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ogg/bear_flac.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ogg/bear_flac.ogg -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ogg/bear_flac.ogg.3.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = true 3 | duration = 2741000 4 | getPosition(0) = [[timeUs=0, position=8457]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = -1 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/flac 12 | maxInputSize = 768000 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 2 19 | sampleRate = 48000 20 | pcmEncoding = -1 21 | encoderDelay = 0 22 | encoderPadding = 0 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | data = length 42, hash 83F6895 29 | total output bytes = 445 30 | sample count = 1 31 | sample 0: 32 | time = 2730666 33 | flags = 1 34 | data = length 445, hash A388E3D6 35 | tracksEnded = true 36 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ogg/bear_flac_noseektable.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ogg/bear_flac_noseektable.ogg -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ogg/bear_flac_noseektable.ogg.3.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = true 3 | duration = 2741000 4 | getPosition(0) = [[timeUs=0, position=8407]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = -1 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/flac 12 | maxInputSize = 768000 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 2 19 | sampleRate = 48000 20 | pcmEncoding = -1 21 | encoderDelay = 0 22 | encoderPadding = 0 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | data = length 42, hash 83F6895 29 | total output bytes = 445 30 | sample count = 1 31 | sample 0: 32 | time = 2730666 33 | flags = 1 34 | data = length 445, hash A388E3D6 35 | tracksEnded = true 36 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ogg/bear_vorbis.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ogg/bear_vorbis.ogg -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ogg/bear_vorbis.ogg.3.dump: -------------------------------------------------------------------------------- 1 | seekMap: 2 | isSeekable = true 3 | duration = 2741000 4 | getPosition(0) = [[timeUs=0, position=3995]] 5 | numberOfTracks = 1 6 | track 0: 7 | format: 8 | bitrate = 112000 9 | id = null 10 | containerMimeType = null 11 | sampleMimeType = audio/vorbis 12 | maxInputSize = -1 13 | width = -1 14 | height = -1 15 | frameRate = -1.0 16 | rotationDegrees = 0 17 | pixelWidthHeightRatio = 1.0 18 | channelCount = 2 19 | sampleRate = 48000 20 | pcmEncoding = -1 21 | encoderDelay = 0 22 | encoderPadding = 0 23 | subsampleOffsetUs = 9223372036854775807 24 | selectionFlags = 0 25 | language = null 26 | drmInitData = - 27 | initializationData: 28 | data = length 30, hash 9A8FF207 29 | data = length 3832, hash 8A406249 30 | total output bytes = 0 31 | sample count = 0 32 | tracksEnded = true 33 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/rawcc/sample.rawcc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/rawcc/sample.rawcc -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ssa/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ssa/empty -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ssa/invalid_timecodes: -------------------------------------------------------------------------------- 1 | [Script Info] 2 | Title: SomeTitle 3 | 4 | [V4+ Styles] 5 | Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding 6 | Style: Default,Open Sans Semibold,36,&H00FFFFFF,&H000000FF,&H00020713,&H00000000,-1,0,0,0,100,100,0,0,1,1.7,0,2,0,0,28,1 7 | 8 | [Events] 9 | Format: Layer, Start, End, Style, Name, Text 10 | Dialogue: 0,Invalid,0:00:01.23,Default,Olly,This is the first subtitle{ignored}. 11 | Dialogue: 0,0:00:02.34,Invalid,Default,Olly,This is the second subtitle \nwith a newline \Nand another. 12 | Dialogue: 0,0:00:04:56,0:00:08:90,Default,Olly,This is the third subtitle, with a comma. 13 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ssa/no_end_timecodes: -------------------------------------------------------------------------------- 1 | [Script Info] 2 | Title: SomeTitle 3 | 4 | [V4+ Styles] 5 | Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding 6 | Style: Default,Open Sans Semibold,36,&H00FFFFFF,&H000000FF,&H00020713,&H00000000,-1,0,0,0,100,100,0,0,1,1.7,0,2,0,0,28,1 7 | 8 | [Events] 9 | Format: Layer, Start, End, Style, Name, Text 10 | Dialogue: 0,0:00:00.00, ,Default,Olly,This is the first subtitle. 11 | Dialogue: 0,0:00:02.34, ,Default,Olly,This is the second subtitle \nwith a newline \Nand another. 12 | Dialogue: 0,0:00:04.56, ,Default,Olly,This is the third subtitle, with a comma. 13 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ssa/typical: -------------------------------------------------------------------------------- 1 | [Script Info] 2 | Title: SomeTitle 3 | 4 | [V4+ Styles] 5 | Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding 6 | Style: Default,Open Sans Semibold,36,&H00FFFFFF,&H000000FF,&H00020713,&H00000000,-1,0,0,0,100,100,0,0,1,1.7,0,2,0,0,28,1 7 | 8 | [Events] 9 | Format: Layer, Start, End, Style, Name, Text 10 | Dialogue: 0,0:00:00.00,0:00:01.23,Default,Olly,This is the first subtitle{ignored}. 11 | Dialogue: 0,0:00:02.34,0:00:03.45,Default,Olly,This is the second subtitle \nwith a newline \Nand another. 12 | Dialogue: 0,0:00:04:56,0:00:08:90,Default,Olly,This is the third subtitle, with a comma. 13 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ssa/typical_dialogue: -------------------------------------------------------------------------------- 1 | Dialogue: 0,0:00:00.00,0:00:01.23,Default,Olly,This is the first subtitle{ignored}. 2 | Dialogue: 0,0:00:02.34,0:00:03.45,Default,Olly,This is the second subtitle \nwith a newline \Nand another. 3 | Dialogue: 0,0:00:04:56,0:00:08:90,Default,Olly,This is the third subtitle, with a comma. 4 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ssa/typical_format: -------------------------------------------------------------------------------- 1 | Format: Layer, Start, End, Style, Name, Text 2 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ssa/typical_header: -------------------------------------------------------------------------------- 1 | [Script Info] 2 | Title: SomeTitle 3 | 4 | [V4+ Styles] 5 | Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding 6 | Style: Default,Open Sans Semibold,36,&H00FFFFFF,&H000000FF,&H00020713,&H00000000,-1,0,0,0,100,100,0,0,1,1.7,0,2,0,0,28,1 7 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/subrip/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/subrip/empty -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/subrip/no_end_timecodes: -------------------------------------------------------------------------------- 1 | 1 2 | 00:00:00,000 --> 3 | SubRip doesn't technically allow missing end timecodes. 4 | 5 | 2 6 | 00:00:02,345 --> 7 | We interpret it to mean that a subtitle extends to the start of the next one. 8 | 9 | 3 10 | 00:00:03,456 --> 11 | Or to the end of the media. 12 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/subrip/typical: -------------------------------------------------------------------------------- 1 | 1 2 | 00:00:00,000 --> 00:00:01,234 3 | This is the first subtitle. 4 | 5 | 2 6 | 00:00:02,345 --> 00:00:03,456 7 | This is the second subtitle. 8 | Second subtitle with second line. 9 | 10 | 3 11 | 00:00:04,567 --> 00:00:08,901 12 | This is the third subtitle. 13 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/subrip/typical_extra_blank_line: -------------------------------------------------------------------------------- 1 | 1 2 | 00:00:00,000 --> 00:00:01,234 3 | This is the first subtitle. 4 | 5 | 6 | 2 7 | 00:00:02,345 --> 00:00:03,456 8 | This is the second subtitle. 9 | Second subtitle with second line. 10 | 11 | 3 12 | 00:00:04,567 --> 00:00:08,901 13 | This is the third subtitle. 14 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/subrip/typical_missing_sequence: -------------------------------------------------------------------------------- 1 | 1 2 | 00:00:00,000 --> 00:00:01,234 3 | This is the first subtitle. 4 | 5 | 00:00:02,345 --> 00:00:03,456 6 | This is the second subtitle. 7 | Second subtitle with second line. 8 | 9 | 3 10 | 00:00:04,567 --> 00:00:08,901 11 | This is the third subtitle. 12 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/subrip/typical_missing_timecode: -------------------------------------------------------------------------------- 1 | 1 2 | 00:00:00,000 --> 00:00:01,234 3 | This is the first subtitle. 4 | 5 | 2 6 | This is the second subtitle. 7 | Second subtitle with second line. 8 | 9 | 3 10 | 00:00:04,567 --> 00:00:08,901 11 | This is the third subtitle. 12 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/subrip/typical_negative_timestamps: -------------------------------------------------------------------------------- 1 | 1 2 | -0:00:04,567 --> -0:00:03,456 3 | This is the first subtitle. 4 | 5 | 2 6 | -00:00:02,345 --> 00:00:01,234 7 | This is the second subtitle. 8 | Second subtitle with second line. 9 | 10 | 3 11 | 00:00:04,567 --> 00:00:08,901 12 | This is the third subtitle. 13 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/subrip/typical_unexpected_end: -------------------------------------------------------------------------------- 1 | 1 2 | 00:00:00,000 --> 00:00:01,234 3 | This is the first subtitle. 4 | 5 | 2 6 | 00:00:02,345 --> 00:00:03,456 7 | This is the second subtitle. 8 | Second subtitle with second line. 9 | 10 | 3 11 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/subrip/typical_with_byte_order_mark: -------------------------------------------------------------------------------- 1 | 1 2 | 00:00:00,000 --> 00:00:01,234 3 | This is the first subtitle. 4 | 5 | 2 6 | 00:00:02,345 --> 00:00:03,456 7 | This is the second subtitle. 8 | Second subtitle with second line. 9 | 10 | 3 11 | 00:00:04,567 --> 00:00:08,901 12 | This is the third subtitle. 13 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ts/bbb_2500ms.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ts/bbb_2500ms.ts -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ts/elephants_dream.mpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ts/elephants_dream.mpg -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ts/sample.ac3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ts/sample.ac3 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ts/sample.ac4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ts/sample.ac4 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ts/sample.adts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ts/sample.adts -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ts/sample.eac3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ts/sample.eac3 -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ts/sample.ps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ts/sample.ps -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ts/sample.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ts/sample.ts -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ts/sample_cbs.adts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ts/sample_cbs.adts -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ts/sample_with_sdt.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ybj366533/YY-VideoPlayer/9b203b5128d971f2631d7f97fed87de6af7d8a0c/videoplayer-core/src/test/assets/ts/sample_with_sdt.ts -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ttml/font_size_empty.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 |

empty

8 |
9 | 10 |
11 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ttml/font_size_invalid.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 |

invalid

8 |
9 |
10 |

invalid

11 |
12 |
13 |

invalid dot

14 |
15 | 16 |
17 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ttml/font_size_no_unit.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 |

no unit

8 |
9 | 10 |
11 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ttml/frame_rate.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 |
12 |

text 1

13 |
14 |
15 |

text 2

16 |
17 | 18 |
19 | -------------------------------------------------------------------------------- /videoplayer-core/src/test/assets/ttml/inherit_style.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 |