no commit message

This commit is contained in:
niandeng
2020-09-17 18:40:01 +08:00
parent 4382915d09
commit d957abceaa
283 changed files with 86935 additions and 63 deletions
+54
View File
@@ -0,0 +1,54 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mangui.hls.demux {
import flash.utils.ByteArray;
CONFIG::LOGGING {
import org.mangui.hls.utils.Log;
import org.mangui.hls.HLSSettings;
}
public class AVCC {
/** H264 profiles. **/
private static const PROFILES : Object = {'66':'H264 Baseline', '77':'H264 Main', '100':'H264 High'};
/** Get Avcc header from AVC stream
See ISO 14496-15, 5.2.4.1 for the description of AVCDecoderConfigurationRecord
**/
public static function getAVCC(sps : ByteArray, ppsVect : Vector.<ByteArray>) : ByteArray {
// Write startbyte
var avcc : ByteArray = new ByteArray();
avcc.writeByte(0x01);
// Write profile, compatibility and level.
avcc.writeBytes(sps, 1, 3);
// reserved (6 bits), NALU length size - 1 (2 bits)
avcc.writeByte(0xFC | 3);
// reserved (3 bits), num of SPS (5 bits)
avcc.writeByte(0xE0 | 1);
// 2 bytes for length of SPS
avcc.writeShort(sps.length);
// data of SPS
avcc.writeBytes(sps, 0, sps.length);
// Number of PPS
avcc.writeByte(ppsVect.length);
for each (var pps : ByteArray in ppsVect) {
// 2 bytes for length of PPS
avcc.writeShort(pps.length);
// data of PPS
avcc.writeBytes(pps, 0, pps.length);
}
CONFIG::LOGGING {
if (HLSSettings.logDebug2) {
// Grab profile/level
sps.position = 1;
var prf : int = sps.readByte();
sps.position = 3;
var lvl : int = sps.readByte();
Log.debug("AVC: " + PROFILES[prf] + ' level ' + lvl);
}
}
avcc.position = 0;
return avcc;
}
;
}
}