fenster

by malmstein

malmstein / fenster

A library to display videos in a TextureView using a custom MediaPlayer controller

413 Stars 107 Forks Last release: almost 5 years ago (v.0.0.2) Other 108 Commits 2 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Fenster

A library to display videos in a

TextureView
using a custom
MediaPlayer
controller as described in this blog post http://www.malmstein.com/blog/2014/08/09/how-to-use-a-textureview-to-display-a-video-with-custom-media-player-controls/

Demo gif

Install

Download

To get the current snapshot version:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.malmstein:fenster:0.0.2'
    }
}

minSDK

The minSDK for the use of the library is minSDK 16

Displaying a video with custom controller

Add a TextureVideoView and a PlayerController to your Activity or Fragment

<com.malmstein.fenster.view.fenstervideoview android:id="@+id/play_video_texture" android:layout_width="match_parent" android:layout_height="match_parent" android:keepscreenon="true" android:fitssystemwindows="true"></com.malmstein.fenster.view.fenstervideoview>

<com.malmstein.fenster.controller.mediafensterplayercontroller android:id="@+id/play_video_controller" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:animatelayoutchanges="true" android:fitssystemwindows="true"></com.malmstein.fenster.controller.mediafensterplayercontroller>

Setting video URL

In order to display a video, simply set the video URL and call start. You can also start the video from a desired second too.

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);

textureView = (TextureVideoView) findViewById(R.id.play_video_texture);
playerController = (PlayerController) findViewById(R.id.play_video_controller);

textureView.setMediaController(playerController);

textureView.setVideo("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",
            PlayerController.DEFAULT_VIDEO_START);
textureView.start();

}

Exposed listeners

By default there are the exposed listeners. The

NavigationListener
will listen to the to Previous and Next events triggered by the controller. The
VisibilityListener
will be triggered when the
PlayerController
visibility changes.
playerController.setNavigationListener(this);
playerController.setVisibilityListener(this);

Using the Gesture Detection Player Controller

Attach a listener to your player controller

As described in this blog post http://www.malmstein.com/how-to-use-a-textureview-to-display-a-video-with-custom-media-player-controls/ it's very simple to use. Just add a listener to Player Controller

playerController.setFensterEventsListener(this);

The Fenster Events Listener allows you to react to the gestures

public interface FensterEventsListener {

void onTap();

void onHorizontalScroll(MotionEvent event, float delta);

void onVerticalScroll(MotionEvent event, float delta);

void onSwipeRight();

void onSwipeLeft();

void onSwipeBottom();

void onSwipeTop();

}

Use MediaPlayerController instead of SimpleMediaPlayerController

MediaFensterPlayerController also shows volume and brightness controls, if you just want to use a simple media controller then the recommendation is to use SimpleMediaFensterPlayerController

<com.malmstein.fenster.view.fenstervideoview android:id="@+id/play_video_texture" android:layout_width="match_parent" android:layout_height="match_parent" android:keepscreenon="true" android:fitssystemwindows="true"></com.malmstein.fenster.view.fenstervideoview>

<com.malmstein.fenster.controller.simplemediafensterplayercontroller android:id="@+id/play_video_controller" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:animatelayoutchanges="true" android:fitssystemwindows="true"></com.malmstein.fenster.controller.simplemediafensterplayercontroller>

Using the Volume and Brightness Seekbar

Add them to your layout:

  
  

Initialise them from your Fragment or Activity:

mVolume = (VolumeSeekBar) findViewById(R.id.media_controller_volume);
mVolume.initialise(this);

mBrightness = (BrightnessSeekBar) findViewById(R.id.media_controller_brightness); mBrightness.initialise(this);

You'll get a callback when the seekbar is being dragged:

@Override
public void onVolumeStartedDragging() {
    mDragging = true;
}

@Override public void onVolumeFinishedDragging() { mDragging = false; }

@Override public void onBrigthnessStartedDragging() { mDragging = true; }

@Override public void onBrightnessFinishedDragging() { mDragging = false; }

Support for different video origins

The

setVideo()
method allows you to load remote or local video files. You can also set the start time of the video (useful if you want to resume content), passing in a integer which corresponds to Milliseconds.

Loading a remote stream

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);

textureView = (TextureVideoView) findViewById(R.id.play_video_texture);
playerController = (PlayerController) findViewById(R.id.play_video_controller);

textureView.setMediaController(playerController);

textureView.setVideo("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
textureView.start();

}

Loading a local stream

Fenster
uses the AssetFileDescriptor in order to load a local video stream.
@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);

textureView = (TextureVideoView) findViewById(R.id.play_video_texture);
playerController = (PlayerController) findViewById(R.id.play_video_controller);

textureView.setMediaController(playerController);

AssetFileDescriptor assetFileDescriptor = getResources().openRawResourceFd(R.raw.big_buck_bunny);
textureView.setVideo(assetFileDescriptor);

textureView.start();

}

Support for video scaling modes

Sets video scaling mode. To make the target video scaling mode effective during playback, the default video scaling mode is VIDEOSCALINGMODESCALETO_FIT. Uses setVideoScalingMode

There are two different video scaling modes:

scaleToFit
and
crop

In order to use it,

Fenster
allows you to pass in an argument from the xml layout:

License

(c) Copyright 2016 David Gonzalez

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.