On Tue, 2015-01-06 at 05:16 +0100, Mattias Bengtsson wrote:
> On mån, 2015-01-05 at 10:42 +0100, Bastien Nocera wrote:
> > Hey Mattias!
> > 
> > On Mon, 2015-01-05 at 06:25 +0100, Mattias Bengtsson wrote:
> > [...]
> > >  – The twitch API uses the following flow to get the video stream URI's:
> > >    1) GET https://api.twitch.tv/api/channels/:channel/access_token
> > >    2) Unpack the JSON payload and extract the sig and token fields
> > >    3) The stream is now:
> > > http://199.9.251.155/api/channel/hls/:channel.m3u8?token=:token&sig=:sig
> > > 
> > >    Is it possible to let my lua-script return a function for 
> > >    retrieving the sig and token values?
> > 
> > Did you mean to ask how you could cache them, so you only need to query
> > it once? FWIW, all the HTTP fetches in the Lua sources are async, so
> > you'd need to queue the "actual" call.
> > 
> > You'd use global variables for that. grl-pluzz.lua in the
> > grilo-lua-sources repo on github has an example of a cache.
> 
> Nah, I basically had no idea at all how grilo works, I think I do might
> now though. 
> 
> > >  I'm fairly sure I'm not supposed
> > >    to find these values before I request the stream (running n HTTP-
> > >    requests whenever I load a list of streams seems bad, plus I know
> > >    from experience that the token can get outdated).
> > > 
> > >  – I would like to be able to browse Twitch like this:
> > >    /Top Channels/{stream}
> > >    /Games/{game}/{stream}
> > > 
> > >    That is with "sub-folders" at least three deep.
> > >    Is this possible in a Lua-plugin? I see that the Rai.tv does it, but
> > >    that's also implemented in C.
> > 
> > There's nothing in grilo that cares about depth levels in folders. The
> > plugin is the one constructing the "ID" for a folder (a box in grilo
> > parlance). When browsing inside that box, you're given the media ID.
> > Just make sure you know how to deconstruct the unique ID you've given
> > for that box item.
> > 
> > Is that clear?
> 
> Maybe. Let's see if I understand.
> 
> So for the "top-level" box of my plugin I'd get some media_id sent to
> grl_source_browse that I'd match on

The top-level container is actually when media_id is unset ("not
media_id" in lua, NULL in C). But close enough.

>  and I'd return two media-objects: 
> - id="top_channels" 
> - id="games".

Yep.

> Then when I click on top_channels I'd get a call to grl_source_browse()
> with media_id set to "top_channels", I'd pattern match on that and then
> return a list of media-objects with id="game/{name_of_game}". 

That's it again, but bear in mind that the "/" means nothing to grilo,
and was just an example. Ideally, you'd use the same identifiers as the
service itself, so that you could go from the ID to its contents.

> Rinse and repeat 'til I have covered all of twitch.
> 
> This is basically me guessing wildy instead of reading code. :) 
> So have I understood it correctly?

Hopefully :)

> If so then the first question above would be solved by returning a media
> object with id="stream/{twitch_user}" and when that one is passed to
> grl_source_browse() I'd do the lookup of the sig and token then.

If you only need to make this call for user streams, then yes, you'd
chain two calls, first the token, then the "directory" reading.

> I'm quite sure that the reason Twitch does this is to prevent people
> from hot-linking and I believe it is frowned upon and also not really
> possible to cache these tokens, they need to be retrieved pretty much
> immediately before accessing the stream.

So you'd need to call it before listing the user's streams, as well as
before starting a particular stream? If that's the case, I'd try to
cache it at least a little...

> > >  – How do I ship an icon with my plugin?
> > 
> > Putting a .gresource file of the same name as the script in the same
> > directory.
> > 
> > And then: "source-icon" = "resource:///org/gnome/grilo/twitch.svg"
> > in the source itself.
> 
> Ah thx!
> 
> Regards,
> Mattias
> 


_______________________________________________
grilo-list mailing list
grilo-list@gnome.org
https://mail.gnome.org/mailman/listinfo/grilo-list

Reply via email to