libvlc android视频大小不适合surfaceview

libvlc android视频大小不适合surfaceview,android,android-layout,video,react-native,libvlc,Android,Android Layout,Video,React Native,Libvlc,在这里,我成功地构建了libvlcandroid,并将其嵌入到一个react原生项目中 音频和视频流都工作正常 让我感到困惑的是,视频内容的大小不适合surface&view,尽管我已经将它们设置为MATCH\u PARENT 以下是一些代码实现。 package org.videolan; import android.net.Uri; import android.app.Activity; import android.content.Context; import android.vi

在这里,我成功地构建了
libvlc
android,并将其嵌入到一个react原生项目中

音频和视频流都工作正常

让我感到困惑的是,视频内容的大小不适合
surface
&
view
,尽管我已经将它们设置为
MATCH\u PARENT

以下是一些代码实现。

package org.videolan;

import android.net.Uri;
import android.app.Activity;
import android.content.Context;
import android.view.SurfaceView;
import android.view.ViewGroup;
import android.widget.FrameLayout;

import com.facebook.react.bridge.ReactContext;

import org.videolan.libvlc.LibVLC;
import org.videolan.libvlc.Media;
import org.videolan.libvlc.MediaPlayer;

import java.util.ArrayList;

public class RCTVLCPlayerView extends FrameLayout {
  private final Context _context;
  private SurfaceView surfaceView;
  private LibVLC libVLC = null;
  private MediaPlayer mediaPlayer;
  private Activity activity = null;

  ArrayList<String> options = new ArrayList<>();

  public SurfaceView getPlayer() {
    return this.surfaceView;
  }

  public RCTVLCPlayerView(Context context) {
    super(context);
    this._context = context;
    this.activity = ((ReactContext) getContext()).getCurrentActivity();

    surfaceView = new SurfaceView((ReactContext) getContext());
    libVLC = new LibVLC((ReactContext) getContext(), options);

    try {
      if (mediaPlayer != null && mediaPlayer.isPlaying()) {
        mediaPlayer.stop();
        mediaPlayer.release();
        mediaPlayer = null;
      }
      mediaPlayer = new MediaPlayer(libVLC);
      mediaPlayer.getVLCVout()
        .setVideoSurface(surfaceView.getHolder().getSurface(), 
          surfaceView.getHolder());
      mediaPlayer.getVLCVout().attachViews();

      ViewGroup.LayoutParams params =
          new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
              ViewGroup.LayoutParams.MATCH_PARENT);
      FrameLayout mFrameLayout = new FrameLayout((ReactContext) getContext());
      mFrameLayout.setLayoutParams(params);
      mFrameLayout.addView(surfaceView);
      addView(mFrameLayout);
      Media media = new Media(libVLC, 
        Uri.parse("rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov"));
      mediaPlayer.setMedia(media);
      mediaPlayer.play();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  ... ...
}
package org.videolan;
导入android.net.Uri;
导入android.app.Activity;
导入android.content.Context;
导入android.view.SurfaceView;
导入android.view.ViewGroup;
导入android.widget.FrameLayout;
导入com.facebook.react.bridge.ReactContext;
导入org.videolan.libvlc.libvlc;
导入org.videolan.libvlc.Media;
导入org.videolan.libvlc.MediaPlayer;
导入java.util.ArrayList;
公共类RCTVLCPlayerView扩展了FrameLayout{
私有最终上下文_上下文;
私人SurfaceView SurfaceView;
私有LibVLC LibVLC=null;
私人媒体播放器;
私人活动=空;
ArrayList选项=新建ArrayList();
公共表面查看getPlayer(){
返回此。surfaceView;
}
公共RCTVLCPlayerView(上下文){
超级(上下文);
这._context=context;
this.activity=((ReactContext)getContext()).getCurrentActivity();
surfaceView=新的surfaceView((ReactContext)getContext());
libVLC=newlibvlc((ReactContext)getContext(),options);
试一试{
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
}
mediaPlayer=新的mediaPlayer(libVLC);
mediaPlayer.getVLCVout()
.setVideoSurface(surfaceView.getHolder().getSurface(),
getHolder());
mediaPlayer.getVLCVout().attachViews();
ViewGroup.LayoutParams参数=
新建ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_父级,
ViewGroup.LayoutParams.MATCH_PARENT);
FrameLayout mFrameLayout=新的FrameLayout((ReactContext)getContext());
mFrameLayout.setLayoutParams(参数);
mFrameLayout.addView(surfaceView);
addView(mFrameLayout);
媒体=新媒体(libVLC,
解析rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov"));
mediaPlayer.setMedia(媒体);
mediaPlayer.play();
}捕获(例外e){
e、 printStackTrace();
}
}
... ...
}
下面是应用程序运行时的快照

任何帮助都将不胜感激


您可以尝试使用显示指标,它可以获取您的surfaceview大小并设置IVLCOUT窗口大小

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

ViewGroup.LayoutParams videoParams = vidSurface.getLayoutParams();
videoParams.width = displayMetrics.widthPixels;
videoParams.height = displayMetrics.heightPixels;
最后一步是设置IVLCOUNT窗口大小:

IVLCVout vout = mediaPlayer .getVLCVout();
vout.setVideoView(surfaceView);
vout.setWindowSize(videoParams.width,videoParams.height);
vout.addCallback(this) //or you can try below code 
//  vout.addCallback(new IVLCVout.Callback() {
//    @Override
//    public void onSurfacesCreated(IVLCVout vlcVout) {
//
//    }
//
//    @Override
//    public void onSurfacesDestroyed(IVLCVout vlcVout) {
//
//    }
//  });
vout.attachViews();
别忘了附上视图这很重要


这些代码适合我,我希望它适合您

您可以尝试使用显示度量它获取您的surfaceview大小并设置IVLCVout窗口大小

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

ViewGroup.LayoutParams videoParams = vidSurface.getLayoutParams();
videoParams.width = displayMetrics.widthPixels;
videoParams.height = displayMetrics.heightPixels;
最后一步是设置IVLCOUNT窗口大小:

IVLCVout vout = mediaPlayer .getVLCVout();
vout.setVideoView(surfaceView);
vout.setWindowSize(videoParams.width,videoParams.height);
vout.addCallback(this) //or you can try below code 
//  vout.addCallback(new IVLCVout.Callback() {
//    @Override
//    public void onSurfacesCreated(IVLCVout vlcVout) {
//
//    }
//
//    @Override
//    public void onSurfacesDestroyed(IVLCVout vlcVout) {
//
//    }
//  });
vout.attachViews();
别忘了附上视图这很重要

这些代码对我有用我希望它对你有用