如何在 Android LibVLC 中全屏 RTSP 流?

Joh*_*rvi 1 android fullscreen rtsp libvlc android-studio

我正在使用 mrmaffen 的 VLC-ANDROID-SDK 来开发 RTSP 流应用程序。 https://github.com/mrmafen/vlc-android-sdk

我已经取得了很大的成功,让它工作并运行得很好,但我遇到的问题似乎无法动摇,让它在 SurfaceView 上全屏显示视频源,甚至只是在 SurfaceView 上显示视频源。 SurfaceView 的中心。

这就是我得到的:

http://s1378.photobucket.com/user/Jo_Han_Solo/media/Screenshot_20171214-125504_zps437k1kw2.png.html?filters[user]=146993343&filters[recent]=1&sort=1&o=1

黑色窗口是屏幕的总大小,我希望该视频填充屏幕并希望始终从中心填充,但我不知道该怎么做。

任何人都有类似的经验并知道如何解决它吗?

Joh*_*rvi 5

我解决了这个问题,但以一种有点狡猾的方式,它还远未完成,但考虑到缺乏有关该主题的知识和信息,我认为这可能暂时对某人有帮助。

  1. 找到你的屏幕尺寸。
  2. 设置最终的 IVLCOut 以纳入屏幕尺寸。
  3. 将 setScale 调整为“全屏”视频流。

解释每项任务:

  1. 设置你的全局变量:

    public class SingleStreamView extends AppCompatActivity implements 
    IVLCVout.Callback {
    
    public int mHeight;
    public int mWidth;
    
    Run Code Online (Sandbox Code Playgroud)

其次,在 onCreate 任务中找到您设备的屏幕尺寸:

    DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        mHeight = displayMetrics.heightPixels;
        mWidth = displayMetrics.widthPixels;
Run Code Online (Sandbox Code Playgroud)

2. 然后转到“CreatePlayer”事件并设置视频输出:

    // Set up video output
        final IVLCVout vout = mMediaPlayer.getVLCVout();
        vout.setVideoView(mSurface);
        vout.setWindowSize(mWidth,mHeight);
        vout.addCallback(this);
        vout.attachViews();
Run Code Online (Sandbox Code Playgroud)

使其位于我的表面中心的获胜行是“vout.setWindowSize(mWidth,mHeight);”

然后我简单地使用 setscale 选项来“全屏”视频。也就是说,这有点像黑客的做法,我想尝试找出一种方法来获取编解码器信息,以便动态设置视频的比例,这样就可以自动全屏显示任何大小的视频流尺寸屏幕,但目前这适用于已知的视频流分辨率,它会自动调整到手机的屏幕尺寸。

不管怎样,我发现对于 Samsung Galaxy s8,640x480p RTSP 流的良好缩放因子是 1.8。编码如下:

        Media m = new Media(libvlc, Uri.parse(RTSP_ADDRESS));
        m.setHWDecoderEnabled(true,false);
        m.addOption(":network-caching=100");
        m.addOption(":clock-jitter=0");
        m.addOption(":clock-synchro=0");
        m.addOption(":fullscreen");
        mMediaPlayer.setMedia(m);
        mMediaPlayer.setAspectRatio("16:9");
        mMediaPlayer.setScale(1.8f);
        mMediaPlayer.play();
Run Code Online (Sandbox Code Playgroud)

你在哪里得到“mMediaPlayer.setScale(1.8f);”

希望这对某人有帮助!