Re: File_Vorbis Latest... [FOLLOWUP]

From: Date: Wed, 13 Aug 2003 09:06:02 +0000
Subject: Re: File_Vorbis Latest... [FOLLOWUP]
References: 1 2  Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-19653@lists.php.net to get a copy of this message
Hi Stefan, >> > Maybe it would be wise to also implement functions in the ogg-class >> > to "read streaminfos from file XXX". This way File_Ogg might >> > recognize e.g. an audio-stream (to be more specific: vorbis in your >> > case - in contrast to speex) and get information from that stream >> > using File_Ogg_Vorbis. >> >> So File_Ogg would (by default) read ALL data streams in the Ogg >> container (by passing down to implementing classes), whereas >> File_Ogg_Vorbis (when called directly) would read only Vorbis streams >> when called from anywhere else? Naturally, if more than one specific >> type of stream exists, the user should be given the option of which >> one they would like to retrieve. > > Yep. So I doubt whether calling File_Ogg_Vorbis directly is > necessarily possible. Hmm - a way would be that it parses the ogg- > container like File_Ogg but only (!) returns information for all > vorbis-streams. This way you don't need to parse Theora-streams or > whatever if you don't care about their information. > But generally yes, File_Ogg would read ALL streams in the container > and pass scanning of each stream separately to a sub-class. Excellent. We are agreed. Now only the implementation to carry out. :) >> > Maybe if you use File_Ogg the return could be something like >> > >> > Array( >> > filename, >> > filesize >> > streams=Array( >> > [0]=Array( >> > type="audio" >> > encoding="vorbis" >> > ... >> > ) >> > ) >> > ) >> >> I assume that File_Ogg_Vorbis would return the same, but with only >> type="audio" and encoding="vorbis" elements, right? I think the user >> should be given the option to examine the Ogg container, and extract >> only what they want, e.g. listStreams() might return: >> >> Array ( >> [0] = "vorbis" >> [1] = "tarkin" >> [2] = "vorbis" >> ... >> ) > > Yes, nice idea. Then you can issue a > > getStreamInfo(mixed streamid) > > whereas streamid might be a number (e.g. 0) or an array (e.g. 0,2). Absolutely. That's pretty much what I envisioned. > Also there might be a function > > getSupportedStreamtypes > > for BC to future releases. And maybe > > isStreamtypeSupported ("vorbis") > > or something. There is the possibility here of reusing the stream capture strings as constants here, for example: isStreamTypeSupported(OGG_STREAM_VORBIS) would equate to "vorbis", and OGG_STREAM_FLAC would equal "fLaC", etc.. Obviously, this runs into problems when a user browses the getSupportedStreamTypes() array, as they may be confused by the switching of cases. I think this may require further consideration, or simply returning a trimed lowercase version instead. > While designing File_Ogg: > a) be sure to implement some return for "stream-type unknown" > b) maybe tell the type of a stream (e.g. theora, speex, ...) even > though you haven't implemented them. This would allow full scanning > an ogg container without actually being able to retrieve streaminfo > for every stream. a) Shouldn't this throw an error? b) The capture patterns for the public Ogg streams are quite well known, so I don't anticipate this being a problem. >> I'm not sure if it is necessary to include the medium, as each >> encoding type only supports either audio or video. > > Well okay. I just thought it might be possible this way to check for > audio-streams and don't care if vorbis, speex or some other upcoming > codec is used. Maybe this would bring some kind of future > compatibility. Maybe getSupportedStreamtypes could also return the > name together with audio/video. > But this is open for discussion - it's my personal view. That's an interesting point. I think I'd better take a long[er] look at multiple stream types in Ogg. :) Regards, David

« previous php.pear.dev (#19653) next »