Rygel transcoding (results of GSOC 2011)



So, you may not know me yet, and that's... probably because I've probably done a kinda bad job at communication thus far, but I was the person selected to do the transcoding improvements[0] to Rygel. My name is David Wendt. I'll start by listing off what happened:


1. I wrote a new Gst plugin called "Transcodebin" which abstracts the existing Rygel.Transcoder autoplugging logic, so that it's now just a matter of connecting a sink and source to transcodebin and setting the profile property. This will have to be run by some of the Gstreamer maintainers, and it is -very much- subject to change, but you can see the status of GstTranscodeBin here[1].

2. I wrote a patch to Rygel to replace said Rygel.Transcoder logic with the transcodebin element, which is available in this github repo[2], branch gsoc2011-gsttranscodebin.

3. I wrote a Rygel patch to pull encoding profiles from GUPnP-DLNA, all of which is focused in a new class Rygel.DLNATranscoder. The transcode manager now creates one for each profile given from GUPnP-DLNA, and Rygel.DLNATranscoder then takes said profile and does a bunch of introspection on the profile's caps to determine the encoding distance and what to advertise in the DIDL resources. It's in the same github repo[2] as the gsttranscodebin patch, but under the branch gsoc2011-gupnpdlna-integration.

There's still a few issues with the whole system - most notably, with part 3 applied you now require every encoder necessary to encode to every DLNA profile. We don't yet have a way to test if the system's gstreamer setup can handle a particular transcoder and to filter out the ones that don't work. In fact, as part of #3, I removed the old fixed transcoders as well as their individual command-line options. Perhaps for the time being we could specify certain video/audio codecs to ignore in a new command-line option, and then profiles involving those codecs would be ignored, like so:

   --ignore-codec="mp3, wma, wmv"

which would exclude profiles that need an MP3 encoder, WMA encoder, or WMV encoder. But I do think the most user friendly option would be automatic detection of broken/non-existent codecs.

Additionally, there are issues involving the MP3 profiles that GUPnP-DLNA gives us, which cause autoplugging to fail. I'm not sure if that's a deficiency in the way our autoplugging works, GUPnP-DLNA, or my particular system[3]. I do know that I was able to transcode using the gsttranscodebin plugin with rygel using the Rygel.MP3Transcoder, but not using the existing transcode logic in rygel using the GUPnP-DLNA MP3 profiles.

[0] http://socghop.appspot.com/gsoc/project/google/gsoc2011/dwendt09/28001
[1] https://github.com/kmeisthax/gst-transcode
[2] https://github.com/kmeisthax/rygel
[3] Fedora Rawhide + rpmfusion-* is my development environment


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]