Class: FormatParser::MP4Parser
- Inherits:
-
Object
- Object
- FormatParser::MP4Parser
- Defined in:
- lib/parsers/mp4_parser.rb
Constant Summary collapse
- MAGIC_BYTES =
/^ftyp(iso[m2]|mp4[12]|m4[abprv] )$/i- BRAND_FORMATS =
{ 'isom' => :mp4, # Prohibited as a major brand by ISO/IEC 14496-12 sec 6.3 paragraph 2, but occasionally used. 'iso2' => :mp4, # Prohibited as a major brand by ISO/IEC 14496-12 sec 6.3 paragraph 2, but occasionally used. 'mp41' => :mp4, 'mp42' => :mp4, 'm4a ' => :m4a, 'm4b ' => :m4b, # iTunes audiobooks 'm4p ' => :m4p, # iTunes audio 'm4r ' => :m4r, # iTunes ringtones 'm4v ' => :m4v, # iTunes video }
- AUDIO_FORMATS =
iTunes video
Set[:m4a, :m4b, :m4p, :m4r]
- VIDEO_FORMATS =
Set[:mp4, :m4v]
- AUDIO_MIMETYPE =
'audio/mp4'- VIDEO_MIMETYPE =
'video/mp4'
Constants included from ISOBaseMediaFileFormat::Utils
ISOBaseMediaFileFormat::Utils::IDENTITY_MATRIX
Constants included from IOUtils
Instance Method Summary collapse
Methods included from ISOBaseMediaFileFormat::Utils
#dimensions, #duration, #frame_rate, #video_codecs
Methods included from IOUtils
#read_bytes, #read_fixed_point, #read_int, #safe_read, #safe_skip, #skip_bytes
Instance Method Details
#call(io) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/parsers/mp4_parser.rb', line 31 def call(io) @buf = FormatParser::IOConstraint.new(io) return unless matches_mp4_definition? box_tree = Measurometer.instrument('format_parser.mp4_parser.decoder.build_box_tree') do Decoder.new.build_box_tree(0xffffffff, @buf) end case file_format = file_format(box_tree) when VIDEO_FORMATS width, height = dimensions(box_tree) FormatParser::Video.new( codecs: video_codecs(box_tree), content_type: VIDEO_MIMETYPE, format: file_format, frame_rate: frame_rate(box_tree), height_px: height, intrinsics: box_tree, media_duration_seconds: duration(box_tree), width_px: width, ) when AUDIO_FORMATS FormatParser::Audio.new( content_type: AUDIO_MIMETYPE, format: file_format, intrinsics: box_tree, media_duration_seconds: duration(box_tree), ) else nil end end |
#likely_match?(filename) ⇒ Boolean
27 28 29 |
# File 'lib/parsers/mp4_parser.rb', line 27 def likely_match?(filename) /\.(mp4|m4[abprv])$/i.match?(filename) end |