public:it:mp4

MP4

  • 14496-12 14496-14 14496-15 下载要收费了, csdn 解决
  • 14496-15 涉及h264 h265 流 的 stsd box 封装
    • 14496-15-2017 5.4.2 讲述 h264 的 avc1-avcC box 结构, avcC 主要是 AVCDecoderConfigurationRecord, 这个见 5.3.3.1.2
    • avc1 是 AVCSampleEntry , 继承 VisualSampleEntry
    • VisualSampleEntry 结构见 14496-12_2015 12.1.3.2
      	class VisualSampleEntry(codingname) extends SampleEntry (codingname){ 
      		 unsigned int(16) pre_defined = 0; 
      		 const unsigned int(16) reserved = 0; 
      		 unsigned int(32)[3] pre_defined = 0; 
      		 unsigned int(16) width; 
      		 unsigned int(16) height; 
      		 template unsigned int(32) horizresolution = 0x00480000; // 72 dpi 
      		 template unsigned int(32) vertresolution = 0x00480000; // 72 dpi 
      		 const unsigned int(32) reserved = 0; 
      		 template unsigned int(16) frame_count = 1; 
      		 string[32] compressorname; 
      		 template unsigned int(16) depth = 0x0018; 
      		 int(16) pre_defined = -1; 
      		 // other boxes from derived specifications 
      		 CleanApertureBox clap; // optional 
      		 PixelAspectRatioBox pasp; // optional 
      	}
       
      	aligned(8) abstract class SampleEntry (unsigned int(32) format) 
      	 extends Box(format){ 
      	 const unsigned int(8)[6] reserved = 0; 
      	 unsigned int(16) data_reference_index; 
      	}
  • H265 的 hev1 - hvcC box 结构 14496-15_2013 就有提及,在 8.4.1 章节, hvcC box 包含 `HEVCDecoderConfigurationRecord` 结构,具体见 8.3.3.1 章节
  • Compressorname in the base class VisualSampleEntry indicates the name of the compressor used with the value “\013HEVC Coding” being recommended (\013 is 11, the length of the string in

bytes).

  • HEVCDecoderConfigurationRecord 结构:
    	aligned(8) class HEVCDecoderConfigurationRecord { 
    		 unsigned int(8) configurationVersion = 1; 
    		 unsigned int(2) general_profile_space; 
    		 unsigned int(1) general_tier_flag; 
    		 unsigned int(5) general_profile_idc; 
    		 unsigned int(32) general_profile_compatibility_flags; 
    		 unsigned int(48) general_constraint_indicator_flags; 
    		 unsigned int(8) general_level_idc; 
    		 bit(4) reserved =1111’b; 
    		 unsigned int(12) min_spatial_segmentation_idc; 
    		 bit(6) reserved =111111’b; 
    		 unsigned int(2) parallelismType; 
    		 bit(6) reserved =111111’b; 
    		 unsigned int(2) chromaFormat; 
    		 bit(5) reserved =11111’b; 
    		 unsigned int(3) bitDepthLumaMinus8; 
    		 bit(5) reserved =11111’b; 
    		 unsigned int(3) bitDepthChromaMinus8; 
    		 bit(16) avgFrameRate; 
    		 bit(2) constantFrameRate; 
    		 bit(3) numTemporalLayers; 
    		 bit(1) temporalIdNested; 
    		 unsigned int(2) lengthSizeMinusOne; 
    		 unsigned int(8) numOfArrays; 
    		 for (j=0; j < numOfArrays; j++) { 
    			 bit(1) array_completeness; 
    			 unsigned int(1) reserved = 0; 
    			 unsigned int(6) NAL_unit_type; 
    			 unsigned int(16) numNalus; 
    			 for (i=0; i< numNalus; i++) { 
    				 unsigned int(16) nalUnitLength; 
    				 bit(8*nalUnitLength) nalUnit; 
    			 } 
    		 } 
    	}
  • mp4 的主要box:
  • fmp4 的moov box:
  • 组装fmp4的 moov box 必须获取视频流的 width, height, pps, sps
  • 获取 pps sps:
  • avc1 参考 ffmpeg 的 mov_write_video_tag 函数
  • public/it/mp4.txt
  • 最后更改: 2024/04/23 10:31
  • oakfire