After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 796976 - IllegalArgumentException while streaming video over ethernet (MPEG-TS )
IllegalArgumentException while streaming video over ethernet (MPEG-TS )
Status: RESOLVED DUPLICATE of bug 796974
Product: java-gnome
Classification: Bindings
Component: General
Unmaintained
Other Windows
: Normal blocker
: ---
Assigned To: java-gnome bindings maintainers
java-gnome bindings maintainers
Depends on:
Blocks:
 
 
Reported: 2018-08-16 14:41 UTC by Can
Modified: 2018-08-16 14:45 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Can 2018-08-16 14:41:45 UTC
Hi everyone,

I am getting this exception each time I try to stream video over ethernet by MPEG-TS in my software. Do you have solution ? 

JNA: Callback org.freedesktop.gstreamer.Bus$15@1871a69 threw the following exception:
java.lang.IllegalArgumentException: No known Enum mapping for org.freedesktop.gstreamer.MessageType value=-2147483644
	at org.freedesktop.gstreamer.lowlevel.EnumMapper.valueOf(EnumMapper.java:75)
	at org.freedesktop.gstreamer.lowlevel.GTypeMapper$4.fromNative(GTypeMapper.java:147)
	at com.sun.jna.Structure.readField(Structure.java:723)
	at com.sun.jna.Structure.readField(Structure.java:614)
	at org.freedesktop.gstreamer.lowlevel.SubtypeMapper$MessageMapper$MapHolder.subtypeFor(SubtypeMapper.java:135)
	at org.freedesktop.gstreamer.lowlevel.SubtypeMapper$MessageMapper.subtypeFor(SubtypeMapper.java:141)
	at org.freedesktop.gstreamer.lowlevel.SubtypeMapper.subtypeFor(SubtypeMapper.java:75)
	at org.freedesktop.gstreamer.lowlevel.NativeObject.classFor(NativeObject.java:221)
	at org.freedesktop.gstreamer.lowlevel.NativeObject.objectFor(NativeObject.java:193)
	at org.freedesktop.gstreamer.lowlevel.GTypeMapper$3.fromNative(GTypeMapper.java:129)
	at com.sun.jna.CallbackReference$DefaultCallbackProxy.invokeCallback(CallbackReference.java:510)
	at com.sun.jna.CallbackReference$DefaultCallbackProxy.callback(CallbackReference.java:551)



Here is my code.


public class SWTVideoTest {

	private static List<VideoComponent> components;

	private static void createControl(Composite parent) {
		Composite controlComposite = new Composite(parent, SWT.NONE);
		controlComposite.setLayout(new GridLayout(3, false));
		controlComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		final Composite componentComposite = new Composite(parent, SWT.NONE);
		componentComposite.setLayout(new GridLayout(1, false));
		componentComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
		final Spinner num = new Spinner(controlComposite, SWT.NONE);
		num.setMinimum(1);
		num.setMaximum(20);
		Button add = new Button(controlComposite, SWT.NONE);
		add.setText("Add");
		add.addListener(SWT.Selection, new Listener() {
			public void handleEvent(Event arg0) {
				List<VideoComponent> temp = new ArrayList<VideoComponent>();
				if (components.size() == 0 && num.getSelection() == 1)
					componentComposite.setLayout(new GridLayout(1, false));
				else
					componentComposite.setLayout(new GridLayout((components
					        .size() + num.getSelection()) / 2, false));
				for (int i = 0; i < num.getSelection(); i++) {
					temp.add(createComponenet(componentComposite));
				}
				componentComposite.layout();
				List<Thread> threads = new ArrayList<Thread>();
				for (VideoComponent videoComponent : temp) {
					final Pipeline pipeline = (Pipeline) videoComponent
					        .getData();
					Thread thread = new Thread(new Runnable() {
						public void run() {
							pipeline.play();
							System.out.println("PipeLine Start !");
							// pipeline.getState();
							// pipeline.debugToDotFile(Bin.DEBUG_GRAPH_SHOW_ALL,
							// "swt_video_test_pipeline");
						}
					}, "pipeline");
					threads.add(thread);
				}
				
				
				for (Thread thread : threads) {
					thread.start();
				}
			}
		});
		Button delete = new Button(controlComposite, SWT.NONE);
		delete.setText("Delete");
		delete.addListener(SWT.Selection, new Listener() {
			public void handleEvent(Event arg0) {
				for (int i = 0; i < num.getSelection(); i++) {
					if (components.size() > 0) {
						VideoComponent component = components.get(components
						        .size() - 1);
						deleteElement(component);
					}
				}
				componentComposite.layout();
			}
		});
	}

	private static void deleteElement(VideoComponent component) {
		Pipeline pipeline = (Pipeline) component.getData();
		pipeline.stop();
		pipeline.getState().equals(State.NULL);
		component.dispose();
		components.remove(component);
	}

	private static VideoComponent createComponenet(final Composite parent) {
		Pipeline pipe = new Pipeline("SWT Overlay Test");
		
		Element udpsrc = ElementFactory.make("udpsrc", "videotest");
		udpsrc.set("port", 8000);
		Element queue = ElementFactory.make("queue", "queue");
		Element caps = ElementFactory.make("capsfilter", "caps");
		caps.setCaps(new Caps("video/mpegts"));
		Element tsdemux = ElementFactory.make("tsdemux","tsdemux");
		Element h264parse = ElementFactory.make("h264parse","h264parse");
		Element queue2 = ElementFactory.make("queue2","queue2");
		Element avdec_h264 = ElementFactory.make("avdec_h264","avdec_h264");
		Element videoconvert = ElementFactory.make("videoconvert","videoconvert");

	
		VideoComponent component = new VideoComponent(parent, SWT.NONE);
		component.getElement().setName("video");
		component.setKeepAspect(true);
		component.setLayoutData(new GridData(GridData.FILL_BOTH));
		//sync false
		component.set("sync", "false");
		Element sink = component.getElement();

		
		component.setData(pipe);
		components.add(component);

		pipe.addMany(udpsrc,caps,queue,tsdemux,h264parse,queue2,avdec_h264,videoconvert,sink);
		Element.linkMany(udpsrc,caps,queue,tsdemux,h264parse,queue2,avdec_h264,videoconvert,sink);
		return component;
	}

	public static void main(String[] args) {
		args = Gst.init("SWTVideoTest", args);
		components = new ArrayList<VideoComponent>();
		try {
			Display display = new Display();
			Shell shell = new Shell(display);
			shell.setMaximized(true);
			shell.setLayout(new GridLayout(1, false));

			shell.setText("SWT Video Test");

			createControl(shell);

			shell.addDisposeListener(new DisposeListener() {
				public void widgetDisposed(DisposeEvent arg0) {
					List<VideoComponent> temp = new ArrayList<VideoComponent>();
					temp.addAll(components);
					for (VideoComponent component : temp) {
						deleteElement(component);
					}
				}
			});

			shell.open();
			while (!shell.isDisposed()) {
				if (!display.readAndDispatch())
					display.sleep();
			}

			display.dispose();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Note: I think,the problem caused by "tsdemux" element. But I am not sure.
Comment 1 Sebastian Dröge (slomo) 2018-08-16 14:45:18 UTC
The GStreamer Java bindings are not using java-gnome but their own stuff. You can find them here: https://github.com/gstreamer-java/gst1-java-core

*** This bug has been marked as a duplicate of bug 796974 ***