Как правильно создать экземпляр Pixelbuffer для VLCJ MediaPlayerJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно создать экземпляр Pixelbuffer для VLCJ MediaPlayer

Сообщение Anonymous »

В настоящее время у меня проблемы с тем, чтобы заставить VLCJ 4 развернуть видео. Я могу заставить приложение запустить, но, похоже, столкнулся с проблемой с VideoPixelBuffer , не подвергаясь созданию. Ниже приведен код из учебника PixelBuffer на главной странице. Я пытался понять, как это функционирует, но не вижу, как когда -либо вызывается функция, которая экстремирует видеопиксельбаффер . Я пытался вручную назвать это, который тоже не сработал. Я считаю, что проблема связана с VideoPixelBuffer , но не может увидеть способ исправить это. < /p>

Есть идеи?
Вот ссылка на репозиторию GitHub для демонстрации. (https://github.com/caprica/vlcj-javafx/ ... edemo.java) >
версии: < /p>


vlcj 4.1.0 < /li>
VLC 3.0. 8 < /li>
openjdk 13 < /li>
openjfx 13 < /li>
< /ul>

Код: < /p>

Код: Выделить всё

package player;

import java.nio.ByteBuffer;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelBuffer;
import javafx.scene.image.PixelFormat;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import uk.co.caprica.vlcj.factory.MediaPlayerFactory;
import uk.co.caprica.vlcj.player.base.MediaPlayer;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import uk.co.caprica.vlcj.player.embedded.videosurface.CallbackVideoSurface;
import uk.co.caprica.vlcj.player.embedded.videosurface.VideoSurfaceAdapters;
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.BufferFormat;
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.BufferFormatCallback;
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.RenderCallback;
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.format.RV32BufferFormat;

public class Test extends Application {

private MediaPlayerFactory mediaPlayerFactory;

private EmbeddedMediaPlayer embeddedMediaPlayer;

private WritableImage videoImage;

private PixelBuffer videoPixelBuffer;

private ImageView videoImageView;

@Override
public void init() {
mediaPlayerFactory = new MediaPlayerFactory();
embeddedMediaPlayer = mediaPlayerFactory.mediaPlayers().newEmbeddedMediaPlayer();
embeddedMediaPlayer.videoSurface().set(new FXCallbackVideoSurface());
}

@Override
public final void start(Stage primaryStage) throws Exception {
StackPane root = new StackPane();
root.setStyle("-fx-background-color: black;");
videoImageView = new ImageView();
videoImageView.setPreserveRatio(true);
videoImageView.fitWidthProperty().bind(root.widthProperty());
videoImageView.fitHeightProperty().bind(root.heightProperty());
root.getChildren().add(videoImageView);

Scene scene = new Scene(root, 1200, 675);
primaryStage.setScene(scene);
primaryStage.show();

String mrl = getParameters().getRaw().get(0);

embeddedMediaPlayer.media().play(mrl);
}

@Override
public final void stop() throws Exception {
embeddedMediaPlayer.controls().stop();
embeddedMediaPlayer.release();
mediaPlayerFactory.release();
}

private class FXCallbackVideoSurface extends CallbackVideoSurface {
FXCallbackVideoSurface() {
super(new FXBufferFormatCallback(), new FXRenderCallback(), true, VideoSurfaceAdapters.getVideoSurfaceAdapter());
}
}

private class FXBufferFormatCallback implements BufferFormatCallback {
private int sourceWidth;
private int sourceHeight;

@Override
public BufferFormat getBufferFormat(int sourceWidth, int sourceHeight) {
this.sourceWidth = sourceWidth;
this.sourceHeight = sourceHeight;
return new RV32BufferFormat(sourceWidth, sourceHeight);
}

public void allocatedBuffers(ByteBuffer[] buffers) {
assert buffers[0].capacity() == sourceWidth * sourceHeight * 4;
PixelFormat pixelFormat = PixelFormat.getByteBgraPreInstance();
videoPixelBuffer = new PixelBuffer(sourceWidth, sourceHeight, buffers[0], pixelFormat);
videoImage = new WritableImage(videoPixelBuffer);
videoImageView.setImage(videoImage);
}
}

private class FXRenderCallback implements RenderCallback {
@Override
public void display(MediaPlayer mediaPlayer, ByteBuffer[] nativeBuffers, BufferFormat bufferFormat) {
Platform.runLater(() -> {
videoPixelBuffer.updateBuffer(pb ->  null);
});
}
}

public static void main(String[] args) {
launch(args);
}
}

class WritableImageDemoLauncher {public static void main(String[] args) {Test.main(args);}}
< /code>

Сообщения об ошибках: < /p>

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at player.Test$FXRenderCallback.lambda$0(Test.java:110)
at javafx.graphix/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AcessController.java:391)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:92)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:830)
< /code>

test.java:110 - следующая строка:
videoPixelBuffer.updateBuffer(pb -> null);


Подробнее здесь: https://stackoverflow.com/questions/602 ... ediaplayer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Случайное исключение IllegalStateException в Android mediaPlayer.prepare или mediaPlayer.setDataSource
    Anonymous » » в форуме Android
    0 Ответы
    61 Просмотры
    Последнее сообщение Anonymous
  • Странный эффект наложения при попытке добавить портретные изображения в ландшафтный PixelBuffer
    Гость » » в форуме IOS
    0 Ответы
    94 Просмотры
    Последнее сообщение Гость
  • Vlcj: два видео одинаковой громкости
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Vlcj: videoplayer.stop() вызывает сбой JVM в Windows 11 (только для некоторых видеокодеков)
    Anonymous » » в форуме JAVA
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Vlcj: videoplayer.stop() вызывает сбой JVM в Windows 11 (только для некоторых видеокодеков)
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»