简体   繁体   中英

How to remove top and bottom black bar from VLCVideoLayout in android

This is my xml.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
    android:id="@+id/firstLayout"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/secondView"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/videoFrame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <org.videolan.libvlc.util.VLCVideoLayout
            android:id="@+id/videoLayout"
            android:fitsSystemWindows="false"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </FrameLayout>

</LinearLayout>



<LinearLayout
    android:id="@+id/thirdLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/secondView"
    android:layout_weight="1"
    android:background="@android:color/holo_orange_light"
    android:orientation="vertical">


</LinearLayout>

This is my class:

public class WifiActivity extends AppCompatActivity {
    private BroadcastReceiver MyReceiver = null;

    private static final String url = " rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4";

    private LibVLC libVlc;
    private MediaPlayer mediaPlayer;
    private VLCVideoLayout videoLayout;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
        if (getSupportActionBar() != null) {
            getSupportActionBar().hide();
        }

        libVlc = new LibVLC(this);
        mediaPlayer = new MediaPlayer(libVlc);
        videoLayout = findViewById(R.id.videoLayout);

    }

    @Override
    protected void onStart() {
        super.onStart();
        mediaPlayer.attachViews(videoLayout, null, false, false);

        Media media = new Media(libVlc, Uri.parse(url));
        media.setHWDecoderEnabled(true, false);
        media.addOption(":network-caching=600");

        mediaPlayer.setMedia(media);
        media.release();
        mediaPlayer.play();

    }
}

after running this code I am able to show live streaming using the given URL look like this.

在此处输入图像描述

I am trying to remove the black bar which is showing in the given image I want to keep it full screen please help me how to achieve this I am unable to find any solution for this.

在此处输入图像描述

you are setting layout_height="match_parent" for VLCVideoLayout , so currently it behaves properly, according to written code

if you want different height for this view, then you should calculate it and set for VLCVideoLayout . here is fun fact: this class will re-set its width and height at runtime (check out onAttachedToWindow method), so even when you set some fixed values in XML - these will be overwritten. its made for "some reason" by library authors, so let's don't touch this class, but now we know that VLCVideoLayout will always stretch/fit to parent

so now I would create some parent class for this video view only

<LinearLayout
    android:id="@+id/firstLayout"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/secondView"
    android:orientation="vertical">

        <FrameLayout
            android:id="@+id/videoFrame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <org.videolan.libvlc.util.VLCVideoLayout
                android:id="@+id/videoLayout"
                android:fitsSystemWindows="false"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
            
        </FrameLayout>

</LinearLayout>

now as we know that frame/video will match_parent width then we can measure it by measuring screen . if this video would be packed into some more complicated layout, eg some small video frame in corner - you should measure size of this area (which oftenly have fixed width/size in such case)

knowing videoFrame width you can calculate easily height with just multiplying by ratio of video

int scrWidth = getScreenWidth();
FrameLayout frameLayout = findViewById(R.id.videoFrame);
double ratio = 16d/9d;  // 16:9
frameLayout.getLayoutParams().height = (int)(scrWidth / ratio);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM