# 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
[  ](https://bintray.com/pavelsemak/alpha-movie/alpha-movie/_latestVersion)
[](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.