<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[
<ac:macro ac:name="unmigrated-inline-wiki-markup"><ac:plain-text-body><![CDATA[
Zend_Media is a collection of classes representing various media file formats. Classes structure information of the files according to the file format standards and provide means to manipulate the information in an object oriented fashion.Zend Framework: Zend_Media Component Proposal
Proposed Component Name
Zend_Media
Developer Notes
http://framework.zend.com/wiki/display/ZFDEV/Zend_Media
Proposers
Sven Vollbehr
Jon Whitcraft
Zend Liaison
TBD
Revision
1.0 - 3 May 2009: Initial Draft. (wiki revision: 5)
Table of Contents
1. Overview
2. References
3. Component Requirements, Constraints, and Acceptance Criteria
4. Dependencies on Other Framework Components
- Zend_Exception
- Zend_Io
5. Theory of Operation
6. Milestones / Tasks
- Milestone 1: Working prototype transformed from existing code and checked into the incubator (necessary tasks: conform to Zend naming conventions, and refactor to support the new API described here and use the new Zend_Io library).
- Milestone 2: Unit tests exist, work, and are checked into SVN.
- Milestone 3: Initial documentation exists.
- Milestone 4: Moved to core.
7. Class Index
- Zend_Media_Exception
- Zend_Media_Asf
- Zend_Media_Asf_Exception
- Zend_Media_Asf_Object
- Zend_Media_Asf_Object_AdvancedContentEncryption
- Zend_Media_Asf_Object_AdvancedMutualExclusion
- Zend_Media_Asf_Object_BandwidthSharing
- Zend_Media_Asf_Object_BitrateMutualExclusion
- Zend_Media_Asf_Object_CodecList
- Zend_Media_Asf_Object_Compatibility
- Zend_Media_Asf_Object_Container
- Zend_Media_Asf_Object_ContentBranding
- Zend_Media_Asf_Object_ContentDescription
- Zend_Media_Asf_Object_ContentEncryption
- Zend_Media_Asf_Object_Data
- Zend_Media_Asf_Object_DigitalSignature
- Zend_Media_Asf_Object_ErrorCorrection
- Zend_Media_Asf_Object_ExtendedContentDescription
- Zend_Media_Asf_Object_ExtendedContentEncryption
- Zend_Media_Asf_Object_ExtendedStreamProperties
- Zend_Media_Asf_Object_FileProperties
- Zend_Media_Asf_Object_GroupMutualExclusion
- Zend_Media_Asf_Object_Header
- Zend_Media_Asf_Object_HeaderExtension
- Zend_Media_Asf_Object_Index
- Zend_Media_Asf_Object_IndexParameters
- Zend_Media_Asf_Object_LanguageList
- Zend_Media_Asf_Object_Marker
- Zend_Media_Asf_Object_MediaObjectIndex
- Zend_Media_Asf_Object_MediaObjectIndexParameters
- Zend_Media_Asf_Object_Metadata
- Zend_Media_Asf_Object_MetadataLibrary
- Zend_Media_Asf_Object_Padding
- Zend_Media_Asf_Object_ScriptCommand
- Zend_Media_Asf_Object_SimpleIndex
- Zend_Media_Asf_Object_StreamBitrateProperties
- Zend_Media_Asf_Object_StreamPrioritization
- Zend_Media_Asf_Object_StreamProperties
- Zend_Media_Asf_Object_TimecodeIndex
- Zend_Media_Asf_Object_TimecodeIndexParameters
- Zend_Media_Asf_Object_Unknown
- Zend_Media_Id3v1
- Zend_Media_Id3v2
- Zend_Media_Id3_Encoding
- Zend_Media_Id3_Exception
- Zend_Media_Id3_ExtendedHeader
- Zend_Media_Id3_Frame
- Zend_Media_Id3_Frame_AbstractLink
- Zend_Media_Id3_Frame_AbstractText
- Zend_Media_Id3_Frame_Aenc
- Zend_Media_Id3_Frame_Apic
- Zend_Media_Id3_Frame_Aspi
- Zend_Media_Id3_Frame_Comm
- Zend_Media_Id3_Frame_Comr
- Zend_Media_Id3_Frame_Encr
- Zend_Media_Id3_Frame_Equ2
- Zend_Media_Id3_Frame_Equa
- Zend_Media_Id3_Frame_Etco
- Zend_Media_Id3_Frame_Geob
- Zend_Media_Id3_Frame_Grid
- Zend_Media_Id3_Frame_Ipls
- Zend_Media_Id3_Frame_Isrc
- Zend_Media_Id3_Frame_Link
- Zend_Media_Id3_Frame_Mcdi
- Zend_Media_Id3_Frame_Mllt
- Zend_Media_Id3_Frame_Owne
- Zend_Media_Id3_Frame_Pcnt
- Zend_Media_Id3_Frame_Popm
- Zend_Media_Id3_Frame_Poss
- Zend_Media_Id3_Frame_Priv
- Zend_Media_Id3_Frame_Rbuf
- Zend_Media_Id3_Frame_Rva2
- Zend_Media_Id3_Frame_Rvad
- Zend_Media_Id3_Frame_Rvrb
- Zend_Media_Id3_Frame_Seek
- Zend_Media_Id3_Frame_Sign
- Zend_Media_Id3_Frame_Sylt
- Zend_Media_Id3_Frame_Sytc
- Zend_Media_Id3_Frame_Talb
- Zend_Media_Id3_Frame_Tbpm
- Zend_Media_Id3_Frame_Tcom
- Zend_Media_Id3_Frame_Tcon
- Zend_Media_Id3_Frame_Tcop
- Zend_Media_Id3_Frame_Tdat
- Zend_Media_Id3_Frame_Tden
- Zend_Media_Id3_Frame_Tdly
- Zend_Media_Id3_Frame_Tdor
- Zend_Media_Id3_Frame_Tdrc
- Zend_Media_Id3_Frame_Tdrl
- Zend_Media_Id3_Frame_Tdtg
- Zend_Media_Id3_Frame_Tenc
- Zend_Media_Id3_Frame_Text
- Zend_Media_Id3_Frame_Tflt
- Zend_Media_Id3_Frame_Time
- Zend_Media_Id3_Frame_Tipl
- Zend_Media_Id3_Frame_Tit1
- Zend_Media_Id3_Frame_Tit2
- Zend_Media_Id3_Frame_Tit3
- Zend_Media_Id3_Frame_Tkey
- Zend_Media_Id3_Frame_Tlan
- Zend_Media_Id3_Frame_Tlen
- Zend_Media_Id3_Frame_Tmcl
- Zend_Media_Id3_Frame_Tmed
- Zend_Media_Id3_Frame_Tmoo
- Zend_Media_Id3_Frame_Toal
- Zend_Media_Id3_Frame_Tofn
- Zend_Media_Id3_Frame_Toly
- Zend_Media_Id3_Frame_Tope
- Zend_Media_Id3_Frame_Tory
- Zend_Media_Id3_Frame_Town
- Zend_Media_Id3_Frame_Tpe1
- Zend_Media_Id3_Frame_Tpe2
- Zend_Media_Id3_Frame_Tpe3
- Zend_Media_Id3_Frame_Tpe4
- Zend_Media_Id3_Frame_Tpos
- Zend_Media_Id3_Frame_Tpro
- Zend_Media_Id3_Frame_Tpub
- Zend_Media_Id3_Frame_Trck
- Zend_Media_Id3_Frame_Trda
- Zend_Media_Id3_Frame_Trsn
- Zend_Media_Id3_Frame_Trso
- Zend_Media_Id3_Frame_Tsiz
- Zend_Media_Id3_Frame_Tsoa
- Zend_Media_Id3_Frame_Tsop
- Zend_Media_Id3_Frame_Tsot
- Zend_Media_Id3_Frame_Tsse
- Zend_Media_Id3_Frame_Tsst
- Zend_Media_Id3_Frame_Txxx
- Zend_Media_Id3_Frame_Tyer
- Zend_Media_Id3_Frame_Unknown
- Zend_Media_Id3_Frame_User
- Zend_Media_Id3_Frame_Uslt
- Zend_Media_Id3_Frame_Wcom
- Zend_Media_Id3_Frame_Wcop
- Zend_Media_Id3_Frame_Woaf
- Zend_Media_Id3_Frame_Woar
- Zend_Media_Id3_Frame_Woas
- Zend_Media_Id3_Frame_Wors
- Zend_Media_Id3_Frame_Wpay
- Zend_Media_Id3_Frame_Wpub
- Zend_Media_Id3_Frame_Wxxx
- Zend_Media_Id3_Header
- Zend_Media_Id3_Language
- Zend_Media_Id3_Object
- Zend_Media_Id3_Timing
- Zend_Media_Iso14496
- Zend_Media_Iso14496_Box
- Zend_Media_Iso14496_Box_Bxml
- Zend_Media_Iso14496_Box_Cdsc
- Zend_Media_Iso14496_Box_Co64
- Zend_Media_Iso14496_Box_Cprt
- Zend_Media_Iso14496_Box_Ctts
- Zend_Media_Iso14496_Box_Data
- Zend_Media_Iso14496_Box_Dinf
- Zend_Media_Iso14496_Box_Dref
- Zend_Media_Iso14496_Box_Edts
- Zend_Media_Iso14496_Box_Elst
- Zend_Media_Iso14496_Box_Free
- Zend_Media_Iso14496_Box_Frma
- Zend_Media_Iso14496_Box_Ftyp
- Zend_Media_Iso14496_Box_Full
- Zend_Media_Iso14496_Box_Hdlr
- Zend_Media_Iso14496_Box_Hint
- Zend_Media_Iso14496_Box_Hmhd
- Zend_Media_Iso14496_Box_Id32
- Zend_Media_Iso14496_Box_Iinf
- Zend_Media_Iso14496_Box_Iloc
- Zend_Media_Iso14496_Box_Ilst
- Zend_Media_Iso14496_Box_Imif
- Zend_Media_Iso14496_Box_Infe
- Zend_Media_Iso14496_Box_Ipmc
- Zend_Media_Iso14496_Box_Ipro
- Zend_Media_Iso14496_Box_Mdat
- Zend_Media_Iso14496_Box_Mdhd
- Zend_Media_Iso14496_Box_Mdia
- Zend_Media_Iso14496_Box_Mehd
- Zend_Media_Iso14496_Box_Meta
- Zend_Media_Iso14496_Box_Mfhd
- Zend_Media_Iso14496_Box_Mfra
- Zend_Media_Iso14496_Box_Mfro
- Zend_Media_Iso14496_Box_Minf
- Zend_Media_Iso14496_Box_Moof
- Zend_Media_Iso14496_Box_Moov
- Zend_Media_Iso14496_Box_Mvex
- Zend_Media_Iso14496_Box_Mvhd
- Zend_Media_Iso14496_Box_Nmhd
- Zend_Media_Iso14496_Box_Padb
- Zend_Media_Iso14496_Box_Pdin
- Zend_Media_Iso14496_Box_Pitm
- Zend_Media_Iso14496_Box_Sbgp
- Zend_Media_Iso14496_Box_Schi
- Zend_Media_Iso14496_Box_Schm
- Zend_Media_Iso14496_Box_Sdtp
- Zend_Media_Iso14496_Box_Sgpd
- Zend_Media_Iso14496_Box_Sinf
- Zend_Media_Iso14496_Box_Skip
- Zend_Media_Iso14496_Box_Smhd
- Zend_Media_Iso14496_Box_Stbl
- Zend_Media_Iso14496_Box_Stco
- Zend_Media_Iso14496_Box_Stdp
- Zend_Media_Iso14496_Box_Stsc
- Zend_Media_Iso14496_Box_Stsd
- Zend_Media_Iso14496_Box_Stsh
- Zend_Media_Iso14496_Box_Stss
- Zend_Media_Iso14496_Box_Stsz
- Zend_Media_Iso14496_Box_Stts
- Zend_Media_Iso14496_Box_Stz2
- Zend_Media_Iso14496_Box_Subs
- Zend_Media_Iso14496_Box_Tfhd
- Zend_Media_Iso14496_Box_Tfra
- Zend_Media_Iso14496_Box_Tkhd
- Zend_Media_Iso14496_Box_Traf
- Zend_Media_Iso14496_Box_Trak
- Zend_Media_Iso14496_Box_Tref
- Zend_Media_Iso14496_Box_Trex
- Zend_Media_Iso14496_Box_Trun
- Zend_Media_Iso14496_Box_Udta
- Zend_Media_Iso14496_Box_Url
- Zend_Media_Iso14496_Box_Urn
- Zend_Media_Iso14496_Box_Vmhd
- Zend_Media_Iso14496_Box_Xml
- Zend_Media_Iso14496_Exception
- Zend_Media_Mpeg_Abs
- Zend_Media_Mpeg_Ps
- Zend_Media_Mpeg_Abs_Frame
- Zend_Media_Mpeg_Abs_LameHeader
- Zend_Media_Mpeg_Abs_Object
- Zend_Media_Mpeg_Abs_VbriHeader
- Zend_Media_Mpeg_Abs_XingHeader
- Zend_Media_Mpeg_Exception
- Zend_Media_Mpeg_Object
8. Use Cases
9. Class Skeletons
| Zend_Media_Id3v1 |
|---|
| Zend_Media_Id3v2 |
|---|
11 Comments
comments.show.hideJul 02, 2009
Matthew Ratzloff
<p>Great work. Just change Zend_Media_Iso14496_Box_BXML to Zend_Media_Iso14496_Box_Bxml (et al) to conform to Zend Framework coding standards.</p>
Jul 02, 2009
Keith Pope
<p>Looks great to me <ac:emoticon ac:name="smile" /> I have been looking at WAV header manipulation lately, if I get it working I may add this to your component once its done.</p>
<p>I really like the IO component, will be very useful for all sorts of things!</p>
<p>Good work</p>
Aug 08, 2009
Sven Vollbehr
<p>I would appreciate if you can share your code once it is done. Could you send your implementation as a feature request to the project web page or mail it to me? Thanks!</p>
Jul 03, 2009
Tobias Petry
<p>Is getting MetaData of MP3s oder MPEG-videos a common problem in web applications (and therefore needed in a framework)?<br />
I think not.</p>
<p>Maybe it would be better placed in ZendX or a custom framework for media handling.</p>
<p>Just my two cents</p>
Aug 08, 2009
Sven Vollbehr
<p>I do not quite follow this argument. Well, frankly, I don't understand at all why this wouldn't be a common problem in today's web development. It is quite apparent that the web sites and even web applications have been going strongly towards adopting music, videos and other media in increasing manner in the past years. It is actually quite hard to find a portal nowadays that does not have requirements to list some kind of media files. I would even say that not having a media header parser in the standard library can be compared to not having the Captcha class for forms or Auth class for login. What would you do without it?</p>
<p>Well, anyways, as this is more or less a matter of opinion, we should maybe concentrate on the more eminent issue of defining the scope of the component. The Media component could still be extended further to cover even more of the common formats such as flash video, image formats, and more importantly to add support for making thumbnails of all of these.</p>
Sep 29, 2009
Matthew Ratzloff
<p>It's really about what the Zend team says they can maintain for their paid support customers. I think it is likely that this would become a ZendX component, which is in no way saying that it is not a useful, quite the contrary in fact.</p>
Jul 15, 2009
Marc Bennewitz (private)
<p>Looks good as a ZendX component.</p>
<p>-> I can give you a Help to read FLV's <ac:emoticon ac:name="wink" /></p>
Aug 08, 2009
Sven Vollbehr
<p>Your help is greatly appreciated! Could you send your implementation as a feature request to the project web page or mail it to me? Thanks!</p>
Jan 31, 2010
Maghiel Dijksman
<p>I wrote classes that can read id3v1 and id3v2(not all) tags,<br />
and information from mpeg audio files like:<br />
length<br />
bitrate<br />
samplerate<br />
mpeg layer and version<br />
channelmode<br />
etc.</p>
<p>It's far from perfect by maybe it could be some use?</p>
<p>(this is the first time i post here, i want to give back <ac:emoticon ac:name="wink" />)</p>
Jul 28, 2010
Dolf Schimmel (Freeaqingme)
<p>Doesn't it make more sense to put the file structures in xml files, and then create one generic class that can parse files based on the structures defined in the xml files?</p>
Aug 03, 2010
Ryan Mauger
<ac:macro ac:name="note"><ac:rich-text-body><p><strong>Community Review Team Recommendation</strong></p>
<p>The CR Team advises that this component be included in 1.11, but would really appreciate to see support for the FLV file format.</p></ac:rich-text-body></ac:macro>