Adding GStreamer plugins
Michael Berry
mjrb5 at kent.ac.uk
Tue Mar 25 23:39:40 UTC 2014
Hi all,
Turns out it was a stupid mistake on my part causing the last few linking
errors, I hadn't added one of the C files I needed to the makefile (well I
had, but I'd then reverted it again without realising!) Thanks to all for
the prods and advice.
Once I'd done that, the build went through without a hitch - and then it
was just a case of making the relevant additions to the native code to
register the MKV type and create a pipeline from it using the plugin. This
wasn't hard to work out at all; I've since tried several test files in MKV
format (with AAC audio) all of which play in MediaPlayer without a hitch!
I mainly wanted to do this as a personal exercise, though I'd imagine this
is a useful piece of functionality for many others also - so should I
submit a patch of the changes, or is this unlikely to be accepted? (Again,
sorry for the perhaps obvious question, I'm rather new to this.) I've had a
look at the code review process and it seems to suggest adding a patch to
the relevant JIRA issue for those who don't have commit access (in this
case 18009), but I don't seem to have permission to do that either?
Thanks,
Michael
On 25 March 2014 17:01, Stephen F Northover <steve.x.northover at oracle.com>wrote:
>
> On 2014-03-25 7:00 AM, Kirill Kirichenko wrote:
>
>> Hi Michael.
>> See my comments inline.
>>
>> On 24.03.2014 04:31, Michael Berry wrote:
>>
>>> I'm now a bit further along with this, though struggling to get the
>>> matroska plugin to compile (getting a bunch of unresolved external symbol
>>> errors for functions it uses in glib - not entirely sure why at the
>>> moment,
>>> as I said C is not my strong point.) I've also noticed the plugins
>>> currently bundled have quite a few changes to the gstreamer version, and
>>> I
>>> can't quite work out the logic behind why things have been changed the
>>> way
>>> they have - so even after the compilation issue is resolved I'm now less
>>> confident that it will just drop in and work! Again, if someone
>>> knowledgeable in this area that's lurking in the shadows could shed any
>>> light on any of this, it would be hugely appreciated.
>>>
>> We did some changes in existing GStreamer code because it had errors and
>> because we needed to expand some functionality. The changes are not very
>> extensive.
>>
>> However, putting the current problems aside for a bit, the snags I hit up
>>> until this point could I think be relatively easily addressed in the
>>> documentation. With that in mind could I suggest a few additional points
>>> for the wiki? These may be obvious to the majority reading here, but as
>>> someone completely new to building JFX they had me stumped for a while!
>>>
>> I can give you some directions. There is no wiki. I'd appreciate if you
>> created one.
>>
>> - It turns out that the Gstreamer stuff doesn't compile at all by
>>> default,
>>> which is why I wasn't seeing any changes on the native level. To ensure
>>> GStreamer is actually compiled, you need to copy the
>>> gradle.properties.template file to gradle.properties, and uncomment the
>>> "#COMPILE_MEDIA = true" line. (A similar scenario would appear to exist
>>> for
>>> any webkit alterations as per the line above.)
>>>
>> You don't need to comment/uncomment anything. Just add
>> -PCOMPILE_MEDIA=true to the gradle command line. You can however change the
>> properties file too.
>>
>> - As well as the requirements listed, I needed the Windows SDK (
>>> http://www.microsoft.com/en-gb/download/details.aspx?id=8279) installed
>>> for
>>> GStreamer to compile successfully under Windows (7) - without it cygpath
>>> just threw a rather confusing error.
>>>
>> You need windows 7.1a SDK and speaking precisely you need only samples
>> from it because samples have BaseClasses at Samples/multimedia/directshow/baseclasses.
>> BaseClasses are used for Oracle direchshowwrapper plugin.
>>
>> - The developer workflow page (
>>> https://wiki.openjdk.java.net/display/OpenJFX/Developer+Work+Flow)
>>> refers
>>> to "-Djavafx.ext.dirs" - I think this should be "-Djava.ext.dirs"
>>> instead?
>>>
>> What are you gonna use it for ?
>>
> I updated the page and got rid of the BINARY_STUB reference that is no
> longer needed.
>
>
>> I'm happy to make the above changes myself but unsure of if / where you
>>> can
>>> sign up for an account, so I'm just throwing them here for now - if
>>> anyone
>>> could point me to the right place then that'd be great!
>>>
>> Steve. Can you give an advice ?
>>
> If you are looking to contribute (when you get to a good place), the
> process is well known and is followed by the everyone.
>
> https://wiki.openjdk.java.net/display/OpenJFX/Code+Reviews
>
>
>> If I do ever manage to get this working (ha-ha) I'd also like to throw
>>> up a
>>> wiki page just detailing how to grab a gstreamer plugin and make the
>>> necessary changes to it to compile it into openjfx as a stop gap to then
>>> perhaps working on one or both of the above JIRA issues and seeing where
>>> I
>>> get - does this sound reasonable?
>>>
>>
> Only committers can edit the wiki right now. It is possible to become an
> Author and write to the wiki, but I would be happy to publish your recipe
> when you are happy with it.
>
>
> It does.
>>
>>
>> On Mar 22, 2014, at 9:26 PM, Michael Berry <berry120 at gmail.com> wrote:
>>>>>
>>>>>> However, I'm not sure if I'm going about including the matroska plugin
>>>>>>
>>>>> in
>>>>>
>>>>>> the right way - I've currently done the following:
>>>>>>
>>>>>> - Downloaded the latest version of the plugins from here (
>>>>>> http://gstreamer.freedesktop.org/src/gst-plugins-good/), then added
>>>>>> the
>>>>>> matroska one to the modules/media/src/main/native/gstreamer/plugins/
>>>>>> folder, as well as the
>>>>>>
>>>>>> modules/media/src/main/native/gstreamer/gstreamer-lite/gst-plugins-good/gst/
>>>>>
>>>>>
>>>>>> folder (I'm unsure of this - should I add it to both these folders?).
>>>>>>
>>>>> Well you see. If you download the latest matroska plugin it
>> potentially can have dependencies on the latest GStreamer platform. We
>> don't have/use the latest gstreamer. The version we use is 0.10.35. And the
>> latest available is 1.x. They are incompatible in some methods.
>>
>> - Added all the C files from the first folder mentioned above to the
>>>>>> plugins.vcxproj file
>>>>>>
>>>>>> - Added the relevant files and directory to Makefile.gstplugins
>>>>>>
>>>>>> - Called the additional relevant plugin_init() function in
>>>>>> gstplugins-lite.c
>>>>>>
>>>>> There is one more thing you need to do here for Windows only apart
>> from running gradle with -PCOMPILE_MEDIA=true. Windows build system has
>> files that export symbols
>> 1) from glib-lite.dll ${jfxroot}/rt/modules/media/
>> src/main/native/gstreamer/3rd_party/glib/glib-2.28.8/build/
>> win32/vs100/{glib-lite.def|glib-liteD.def}
>> Here the version with "D" is used for debug build and may contain more
>> symbols for export.
>> 2) from gstreamer-lite.dll ${jfxroot}/rt/modules/media/
>> src/main/native/gstreamer/projects/win/gstreamer-lite.def - used for
>> both Release and Debug.
>>
>> If your plugin uses some methods of gstreamer/glib libraries not
>> mentioned in the files you should add the methods to the files. Syntax is
>> pretty simple. If you don't add depending methods to these files you will
>> get linker errors. C/C++ compiler will not generate errors.
>>
>> Actually I think the best way to start developing/improving the Media
>> component is to upgrade GStreamer to 1.x from 0.10.35. It would be a very
>> good starting point and you would get less or no problems using the latest
>> available plugins. If someone wanna take over this I can explain in details
>> how to do it.
>>
>> K
>>
>
>
More information about the openjfx-dev
mailing list