Skip to end of metadata
Go to start of metadata

<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 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

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.

2. References

3. Component Requirements, Constraints, and Acceptance Criteria

  • This component will structure information in various media file formats.
  • This component will provide means to read and write the header information of a supported media file.

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

]]></ac:plain-text-body></ac:macro>

]]></ac:plain-text-body></ac:macro>

Labels:
None
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. Jul 02, 2009

    <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>

  2. Jul 02, 2009

    <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>

    1. Aug 08, 2009

      <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>

  3. Jul 03, 2009

    <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>

    1. Aug 08, 2009

      <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>

      1. Sep 29, 2009

        <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>

  4. Jul 15, 2009

    <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>

    1. Aug 08, 2009

      <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>

  5. Jan 31, 2010

    <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>

  6. Jul 28, 2010

    <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>

  7. Aug 03, 2010

    <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>