# GreenscreenVideo **Repository Path**: iForkOpenSource/greenscreen-video ## Basic Information - **Project Name**: GreenscreenVideo - **Description**: 绿幕视频,播放时替换场景; 原地址: https://github.com/pavelsemak/alpha-movie - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-06-05 - **Last Updated**: 2024-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Alpha Movie Alpha Movie is an Android video player library with alpha channel support. Video Player uses `OpenGL` to render video and apply *shader* that makes alpha compositing possible. The player encapsulates `MediaPlayer` and has its base functionality. Video stream is displayed by `TextureView`. --- ## Gradle Dependency [ ![jCenter](https://api.bintray.com/packages/pavelsemak/alpha-movie/alpha-movie/images/download.svg) ](https://bintray.com/pavelsemak/alpha-movie/alpha-movie/_latestVersion) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg?style=flat-square)](https://www.apache.org/licenses/LICENSE-2.0.html) The easiest way to start using Alpha Movie is to add it as a *Gradle Dependency*. The Gradle dependency is available via [jCenter](https://bintray.com/pavelsemak/alpha-movie/alpha-movie/view). Please make sure that you have the jcenter repository included in the project's `build.gradle` file (*jCenter* is the default Maven repository used by Android Studio): ```gradle repositories { jcenter() } ``` Then add this dependency to your module's `build.gradle` file: ```gradle dependencies { // ... other dependencies compile 'com.alphamovie.library:alpha-movie:1.2.1' } ``` ## Getting Started Add `AlphaMovieView` into you activity layout: ```xml ``` Next you need to initialize the player. In your `Activity` class add: ```java public class MainActivity extends AppCompatActivity { private AlphaMovieView alphaMovieView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); alphaMovieView = (AlphaMovieView) findViewById(R.id.video_player); alphaMovieView.setVideoFromAssets("video.mp4"); } @Override public void onResume() { super.onResume(); alphaMovieView.onResume(); } @Override public void onPause() { super.onPause(); alphaMovieView.onPause(); } } ``` In this code snippet we load video from *assets* specifying filename `video.mp4`: ```java alphaMovieView.setVideoFromAssets("video.mp4"); ``` Video can also be set by *Url, FileDescriptor, MediaSource* and other sources. You need to add `alphaMovieView.onPause()` and `alphaMovieView.onResume()` in activity's `onPause()` and `onResume()` callbacks. Calling these methods will pause and resume `OpenGL` rendering thread. Video playback can be paused and resumed using `alphaMovieView.pause()` and `alphaMovieView.start()` methods. --- ## How it works? Alpha Movie player uses `OpenGL` to render video with a *shader* attached to gl renderer. This *shader* modifies each pixel of video frame. By default it converts *green* color to transparent. So default alpha channel color is *green*. This color can be changed to any *rgb* color by adding xml attribute `alphaColor`: ```xml ``` In the code snippet above we set `custom:alphaColor="#ff0000"`. It means that alpha channel color is set to red. Also we specify *accuracy* attr to be *0.7*. Accuracy is the value between **0** and **1**. It should be lower if you wish more shades of specified color be transparent and vice versa. By default `accuracy="0.95"`. #### Custom shader There is a possibility to apply your own *custom shader*. Add `shader` attr: ```xml ``` And define your custom shader in *string* values, for example: ```xml #extension GL_OES_EGL_image_external : require\n precision mediump float; varying vec2 vTextureCoord; uniform samplerExternalOES sTexture; varying mediump float text_alpha_out; void main() { vec4 color = texture2D(sTexture, vTextureCoord); if (color.g - color.r >= 0.1 && color.g - color.b >= 0.1) { gl_FragColor = vec4(color.r, (color.r + color.b) / 2.0, color.b, 1.0 - color.g); } else { gl_FragColor = vec4(color.r, color.g, color.b, color.a); } } ``` In this case accuracy and alphaColor attrs are not affecting anything because they are used only when custom shader is not defined.