├── .gitignore ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── libraries │ ├── appcompat_v7_23_1_1.xml │ ├── exoplayer_r1_5_3.xml │ ├── support_annotations_23_1_1.xml │ └── support_v4_23_1_1.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml ├── vcs.xml └── workspace.xml ├── 01_basic_video_player ├── .gitignore ├── 01_basic_video_player.iml ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── quan404 │ │ └── basic_video_player │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── quan404 │ │ │ └── basic_video_player │ │ │ └── MainActivity.java │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── quan404 │ └── basic_video_player │ └── ExampleUnitTest.java ├── 02_split_video_player ├── .gitignore ├── 02_split_video_player.iml ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── quan404 │ │ └── split_video_player │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── quan404 │ │ │ └── split_video_player │ │ │ └── MainActivity.java │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── quan404 │ └── split_video_player │ └── ExampleUnitTest.java ├── 03_split_translation_video_player ├── .gitignore ├── 03_split_translation_video_player.iml ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── quan404 │ │ └── split_translation_video_player │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── quan404 │ │ │ └── split_translation_video_player │ │ │ └── MainActivity.java │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── quan404 │ └── split_translation_video_player │ └── ExampleUnitTest.java ├── 04_basic_custom_exo_player ├── .gitignore ├── 04_basic_custom_exo_player.iml ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── quan404 │ │ └── basic_custom_exo_player │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── quan404 │ │ │ └── basic_custom_exo_player │ │ │ └── MainActivity.java │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── quan404 │ └── basic_custom_exo_player │ └── ExampleUnitTest.java ├── 05_split_custom_exo_player ├── .gitignore ├── 05_split_custom_exo_player.iml ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── quan404 │ │ └── split_custom_exo_player │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── quan404 │ │ │ └── split_custom_exo_player │ │ │ └── MainActivity.java │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── quan404 │ └── split_custom_exo_player │ └── ExampleUnitTest.java ├── GLMediaPlayer.iml ├── LICENSE ├── README.md ├── build.gradle ├── glmediaplayer ├── .gitignore ├── build.gradle ├── glmediaplayer.iml ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── quan404 │ │ └── glmediaplayer │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── quan404 │ │ │ └── glmediaplayer │ │ │ ├── GLMediaPlayer.java │ │ │ ├── config │ │ │ └── LogConfig.java │ │ │ ├── players │ │ │ ├── AndroidPlayer.java │ │ │ ├── BasePlayer.java │ │ │ ├── CustomExoPlayer.java │ │ │ └── exorenderers │ │ │ │ └── TextureVideoTrackRenderer.java │ │ │ ├── renderers │ │ │ ├── BaseVideoRenderer.java │ │ │ ├── DefaultVideoRenderer.java │ │ │ ├── SplitSquareVideoRenderer.java │ │ │ └── SplitVideoRenderer.java │ │ │ └── views │ │ │ └── VideoSurfaceView.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── quan404 │ └── glmediaplayer │ └── ExampleUnitTest.java ├── gltoolkit ├── .gitignore ├── build.gradle ├── gltoolkit.iml ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── quan404 │ │ └── gltoolkit │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── quan404 │ │ │ └── gltoolkit │ │ │ ├── Constants.java │ │ │ ├── GLToolkit.java │ │ │ ├── LoggerConfig.java │ │ │ ├── ShaderHelper.java │ │ │ ├── TextResourceReader.java │ │ │ ├── TextureHelper.java │ │ │ ├── data │ │ │ └── VertexArray.java │ │ │ ├── objects │ │ │ └── Video.java │ │ │ └── programs │ │ │ ├── ColorShaderProgram.java │ │ │ ├── ShaderProgram.java │ │ │ ├── TextureShaderProgram.java │ │ │ └── VideoShaderProgram.java │ └── res │ │ ├── raw │ │ ├── default_fragment_shader.glsl │ │ └── default_vertex_shader.glsl │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── quan404 │ └── gltoolkit │ └── ExampleUnitTest.java ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # Files for the Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | 15 | # Gradle files 16 | .gradle/ 17 | build/ 18 | /*/build/ 19 | 20 | # Local configuration file (sdk path, etc) 21 | local.properties 22 | 23 | # Proguard folder generated by Eclipse 24 | proguard/ 25 | 26 | # Log Files 27 | *.log 28 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | GLMediaPlayer -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 34 | 35 | -------------------------------------------------------------------------------- /.idea/libraries/appcompat_v7_23_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /.idea/libraries/exoplayer_r1_5_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/support_annotations_23_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/support_v4_23_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | 47 | 48 | 49 | 50 | 1.7 51 | 52 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /01_basic_video_player/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /01_basic_video_player/01_basic_video_player.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /01_basic_video_player/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.quan404.basic_video_player" 9 | minSdkVersion 16 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:23.1.1' 26 | 27 | compile project(":glmediaplayer") 28 | } 29 | -------------------------------------------------------------------------------- /01_basic_video_player/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 /home/robotbase/Android/sdk/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 | -------------------------------------------------------------------------------- /01_basic_video_player/src/androidTest/java/com/quan404/basic_video_player/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.quan404.basic_video_player; 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 | } -------------------------------------------------------------------------------- /01_basic_video_player/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /01_basic_video_player/src/main/java/com/quan404/basic_video_player/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.quan404.basic_video_player; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.os.Bundle; 5 | import android.view.WindowManager; 6 | 7 | import com.quan404.glmediaplayer.GLMediaPlayer; 8 | import com.quan404.glmediaplayer.views.VideoSurfaceView; 9 | 10 | public class MainActivity extends AppCompatActivity { 11 | 12 | private GLMediaPlayer glMediaPlayer = null; 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | 18 | glMediaPlayer = new GLMediaPlayer(this); 19 | try{ 20 | glMediaPlayer.setDataSource("http://html5demos.com/assets/dizzy.mp4"); 21 | // glMediaPlayer.setDataSource("http://d2kzl73ve6fjh6.cloudfront.net/videos/teleport_22-11-2015_13-11-40__8kX6dwsyML.mp4"); 22 | // glMediaPlayer.setDataSource("http://d2kzl73ve6fjh6.cloudfront.net/videos/teleport_22-11-2015_14-00-08__8kX6dwsyML.mp4"); 23 | }catch (Exception e){ 24 | e.printStackTrace(); 25 | } 26 | 27 | setContentView(glMediaPlayer.getVideoSurfaceView()); 28 | 29 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 30 | } 31 | 32 | @Override 33 | protected void onResume() { 34 | super.onResume(); 35 | if(glMediaPlayer != null){ 36 | glMediaPlayer.resume(); 37 | } 38 | } 39 | 40 | @Override 41 | protected void onPause() { 42 | super.onPause(); 43 | if(glMediaPlayer != null){ 44 | glMediaPlayer.pause(); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quanhua92/GLMediaPlayer/8d08555e163ee17fc3266ebbca81f99e440aad67/01_basic_video_player/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quanhua92/GLMediaPlayer/8d08555e163ee17fc3266ebbca81f99e440aad67/01_basic_video_player/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quanhua92/GLMediaPlayer/8d08555e163ee17fc3266ebbca81f99e440aad67/01_basic_video_player/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quanhua92/GLMediaPlayer/8d08555e163ee17fc3266ebbca81f99e440aad67/01_basic_video_player/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quanhua92/GLMediaPlayer/8d08555e163ee17fc3266ebbca81f99e440aad67/01_basic_video_player/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 01_Basic_Video_Player 3 | 4 | -------------------------------------------------------------------------------- /01_basic_video_player/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /01_basic_video_player/src/test/java/com/quan404/basic_video_player/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.quan404.basic_video_player; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * To work on unit tests, switch the Test Artifact in the Build Variants view. 9 | */ 10 | public class ExampleUnitTest { 11 | @Test 12 | public void addition_isCorrect() throws Exception { 13 | assertEquals(4, 2 + 2); 14 | } 15 | } -------------------------------------------------------------------------------- /02_split_video_player/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /02_split_video_player/02_split_video_player.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /02_split_video_player/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.quan404.split_video_player" 9 | minSdkVersion 16 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:23.1.1' 26 | 27 | compile project(":glmediaplayer") 28 | } 29 | -------------------------------------------------------------------------------- /02_split_video_player/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 /home/robotbase/Android/sdk/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 | -------------------------------------------------------------------------------- /02_split_video_player/src/androidTest/java/com/quan404/split_video_player/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.quan404.split_video_player; 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 | } -------------------------------------------------------------------------------- /02_split_video_player/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /02_split_video_player/src/main/java/com/quan404/split_video_player/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.quan404.split_video_player; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.os.Bundle; 5 | 6 | import com.quan404.glmediaplayer.GLMediaPlayer; 7 | import com.quan404.glmediaplayer.renderers.SplitVideoRenderer; 8 | 9 | public class MainActivity extends AppCompatActivity { 10 | 11 | private GLMediaPlayer glMediaPlayer = null; 12 | 13 | @Override 14 | protected void onCreate(Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | 17 | glMediaPlayer = new GLMediaPlayer(this, new SplitVideoRenderer(this), false); 18 | try{ 19 | // glMediaPlayer.setDataSource("http://html5demos.com/assets/dizzy.mp4"); 20 | // glMediaPlayer.setDataSource("http://d2kzl73ve6fjh6.cloudfront.net/videos/teleport_22-11-2015_13-11-40__8kX6dwsyML.mp4"); 21 | // glMediaPlayer.setDataSource("http://d2kzl73ve6fjh6.cloudfront.net/videos/teleport_22-11-2015_13-22-00__8kX6dwsyML.mp4"); 22 | glMediaPlayer.setDataSource("http://d2kzl73ve6fjh6.cloudfront.net/videos/teleport_22-11-2015_14-00-08__8kX6dwsyML.mp4"); 23 | // glMediaPlayer.setDataSource("http://storage.googleapis.com/exoplayer-test-media-1/mkv/android-screens-lavf-56.36.100-aac-avc-main-1280x720.mkv"); 24 | 25 | // Emulator can only play 3GP files. 26 | // More files: http://download.wavetlan.com/SVV/Media/HTTP/http-3gp.htm 27 | // glMediaPlayer.setDataSource("http://download.wavetlan.com/SVV/Media/HTTP/3GP/QuickTime/Quicktime_test1_3GP2_H263_xbit_176x144_AR1.22_25fps_KF1in15_256kbps_AAC_Mono_48000Hz_96kbps.3g2"); 28 | }catch (Exception e){ 29 | e.printStackTrace(); 30 | } 31 | 32 | setContentView(glMediaPlayer.getVideoSurfaceView()); 33 | } 34 | 35 | @Override 36 | protected void onResume() { 37 | super.onResume(); 38 | if(glMediaPlayer != null){ 39 | glMediaPlayer.resume(); 40 | } 41 | } 42 | 43 | @Override 44 | protected void onPause() { 45 | super.onPause(); 46 | if(glMediaPlayer != null){ 47 | glMediaPlayer.pause(); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 17 | 18 | -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quanhua92/GLMediaPlayer/8d08555e163ee17fc3266ebbca81f99e440aad67/02_split_video_player/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quanhua92/GLMediaPlayer/8d08555e163ee17fc3266ebbca81f99e440aad67/02_split_video_player/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quanhua92/GLMediaPlayer/8d08555e163ee17fc3266ebbca81f99e440aad67/02_split_video_player/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quanhua92/GLMediaPlayer/8d08555e163ee17fc3266ebbca81f99e440aad67/02_split_video_player/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quanhua92/GLMediaPlayer/8d08555e163ee17fc3266ebbca81f99e440aad67/02_split_video_player/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 02_split_video_player 3 | 4 | -------------------------------------------------------------------------------- /02_split_video_player/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /02_split_video_player/src/test/java/com/quan404/split_video_player/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.quan404.split_video_player; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * To work on unit tests, switch the Test Artifact in the Build Variants view. 9 | */ 10 | public class ExampleUnitTest { 11 | @Test 12 | public void addition_isCorrect() throws Exception { 13 | assertEquals(4, 2 + 2); 14 | } 15 | } -------------------------------------------------------------------------------- /03_split_translation_video_player/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /03_split_translation_video_player/03_split_translation_video_player.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /03_split_translation_video_player/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.quan404.split_translation_video_player" 9 | minSdkVersion 16 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:23.1.1' 26 | 27 | compile project(":glmediaplayer") 28 | } 29 | -------------------------------------------------------------------------------- /03_split_translation_video_player/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 /home/robotbase/Android/sdk/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 | -------------------------------------------------------------------------------- /03_split_translation_video_player/src/androidTest/java/com/quan404/split_translation_video_player/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.quan404.split_translation_video_player; 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 | } -------------------------------------------------------------------------------- /03_split_translation_video_player/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /03_split_translation_video_player/src/main/java/com/quan404/split_translation_video_player/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.quan404.split_translation_video_player; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import android.util.Log; 6 | import android.view.MotionEvent; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.view.WindowManager; 10 | import android.widget.Button; 11 | 12 | import com.google.android.exoplayer.ExoPlaybackException; 13 | import com.google.android.exoplayer.ExoPlayer; 14 | import com.quan404.glmediaplayer.GLMediaPlayer; 15 | import com.quan404.glmediaplayer.players.CustomExoPlayer; 16 | import com.quan404.glmediaplayer.renderers.SplitSquareVideoRenderer; 17 | import com.quan404.glmediaplayer.renderers.SplitVideoRenderer; 18 | 19 | public class MainActivity extends Activity { 20 | 21 | private ViewGroup videoLayout; 22 | private GLMediaPlayer glMediaPlayer = null; 23 | 24 | private SplitSquareVideoRenderer renderer; 25 | private CustomExoPlayer mediaPlayer; 26 | 27 | @Override 28 | protected void onCreate(Bundle savedInstanceState) { 29 | super.onCreate(savedInstanceState); 30 | setContentView(R.layout.activity_main); 31 | makeImmersive(); 32 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 33 | videoLayout = (ViewGroup) findViewById(R.id.video); 34 | 35 | renderer = new SplitSquareVideoRenderer(this); 36 | glMediaPlayer = new GLMediaPlayer(this, renderer, true); 37 | mediaPlayer = (CustomExoPlayer) glMediaPlayer.getMediaPlayer(); 38 | mediaPlayer.addListener(new ExoPlayer.Listener() { 39 | @Override 40 | public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { 41 | Log.d("Test", "playWhenReady: " + playWhenReady + "/playbackState: " + playbackState); 42 | } 43 | 44 | @Override 45 | public void onPlayWhenReadyCommitted() { 46 | Log.d("Test", "onPlayWhenReadyCommitted"); 47 | } 48 | 49 | @Override 50 | public void onPlayerError(ExoPlaybackException error) { 51 | Log.d("Test", "onPlayerError"); 52 | 53 | } 54 | }); 55 | try{ 56 | // glMediaPlayer.setDataSource("http://html5demos.com/assets/dizzy.mp4"); 57 | // glMediaPlayer.setDataSource("http://d2kzl73ve6fjh6.cloudfront.net/videos/teleport_22-11-2015_13-11-40__8kX6dwsyML.mp4"); 58 | // glMediaPlayer.setDataSource("http://d2kzl73ve6fjh6.cloudfront.net/videos/teleport_22-11-2015_13-22-00__8kX6dwsyML.mp4"); 59 | glMediaPlayer.setDataSource("http://d2kzl73ve6fjh6.cloudfront.net/videos/dinosaur-and-drone_8kX6dwsyML.mp4"); 60 | // glMediaPlayer.setDataSource("http://storage.googleapis.com/exoplayer-test-media-1/mkv/android-screens-lavf-56.36.100-aac-avc-main-1280x720.mkv"); 61 | 62 | // Emulator can only play 3GP files. 63 | // More files: http://download.wavetlan.com/SVV/Media/HTTP/http-3gp.htm 64 | // glMediaPlayer.setDataSource("http://download.wavetlan.com/SVV/Media/HTTP/3GP/QuickTime/Quicktime_test1_3GP2_H263_xbit_176x144_AR1.22_25fps_KF1in15_256kbps_AAC_Mono_48000Hz_96kbps.3g2"); 65 | }catch (Exception e){ 66 | e.printStackTrace(); 67 | } 68 | 69 | videoLayout.addView(glMediaPlayer.getVideoSurfaceView()); 70 | 71 | findViewById(R.id.left).setOnClickListener(leftButtonOnClick); 72 | findViewById(R.id.right).setOnClickListener(rightButtonOnClick); 73 | findViewById(R.id.btnResume).setOnClickListener(new View.OnClickListener() { 74 | @Override 75 | public void onClick(View view) { 76 | mediaPlayer.resume(); 77 | } 78 | }); 79 | findViewById(R.id.btnPause).setOnClickListener(new View.OnClickListener() { 80 | @Override 81 | public void onClick(View view) { 82 | mediaPlayer.pause(); 83 | } 84 | }); 85 | 86 | } 87 | 88 | View.OnClickListener leftButtonOnClick = new View.OnClickListener() { 89 | @Override 90 | public void onClick(View view) { 91 | renderer.adjustLeftPosition(-0.01f); 92 | } 93 | }; 94 | View.OnClickListener rightButtonOnClick = new View.OnClickListener() { 95 | @Override 96 | public void onClick(View view) { 97 | renderer.adjustLeftPosition(0.01f); 98 | } 99 | }; 100 | private void makeImmersive() { 101 | if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 102 | getWindow().getDecorView().setSystemUiVisibility( 103 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE 104 | | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 105 | | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 106 | | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 107 | | View.SYSTEM_UI_FLAG_FULLSCREEN 108 | | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); 109 | } 110 | } 111 | 112 | @Override 113 | protected void onResume() { 114 | super.onResume(); 115 | if(glMediaPlayer != null){ 116 | glMediaPlayer.resume(); 117 | } 118 | } 119 | 120 | @Override 121 | protected void onPause() { 122 | super.onPause(); 123 | if(glMediaPlayer != null){ 124 | glMediaPlayer.pause(); 125 | } 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /03_split_translation_video_player/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 16 |