Я использую VLC-Android для воспроизведения живого потока H264 RTSP в моем приложении для Android, следующий код успешно отображает потоковое видео на виде поверхности:
MediaPlayer mMediaPlayer = new MediaPlayer(VLCInstance.get());
SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.player);
final IVLCVout vlcVout = Constants.mMediaPlayer.getVLCVout();
vlcVout.detachViews();
vlcVout.setVideoView(mSurfaceView);
vlcVout.setWindowSize(mSurfaceDims.getWidth(), mSurfaceDims.getHeight());
vlcVout.attachViews();
mSurfaceView.setKeepScreenOn(true);
Media media = new Media(VLCInstance.get(), Uri.parse(path));
mMediaPlayer.setMedia(media);
mMediaPlayer.play();
VLCInstance.java:
package bi.anpr.vlc;
import android.content.Context;
import android.util.Log;
import org.videolan.libvlc.LibVLC;
import org.videolan.libvlc.util.VLCUtil;
public class VLCInstance {
public final static String TAG = "VLC/Util/VLCInstance";
private static LibVLC sLibVLC = null;
/** A set of utility functions for the VLC application */
public synchronized static LibVLC get() throws IllegalStateException {
if (sLibVLC == null) {
final Context context = VLCApplication.getAppContext();
if(!VLCUtil.hasCompatibleCPU(context)) {
Log.e(TAG, VLCUtil.getErrorMsg());
throw new IllegalStateException("LibVLC initialisation failed: " + VLCUtil.getErrorMsg());
}
try{
sLibVLC = new LibVLC(context);
}catch (Throwable e){
e.printStackTrace();
}
}
return sLibVLC;
}
public static synchronized void restart(Context context) throws IllegalStateException {
if (sLibVLC != null) {
sLibVLC.release();
sLibVLC = new LibVLC(context);
}
}
}
Проблема в том, что org.videolan.libvlc.MediaPlayer
отображает видео в SurfaceView после вызова play () без какого-либо события, которое помогает вам захватить текущий кадр в представлении, где мне нужно получать текущий кадр каждый интервал времени, чтобы выполнить некоторую обработку изображения на нем.
Так возможно ли использовать vlc-android-sdk
для захвата текущего кадра в буферизованное изображение или OpenCV Mat
при воспроизведении потокового видео или локальных видеоресурсов?
Обратите внимание, что это возможно с java (desktop vlcj) через класс DirectMediaPlayer .
Заранее спасибо !!