private void WriteFlvTag(FlvTagType type, int timestampMillis, int reserveBytes, FlvTagWriter tagWriter) { int tagStartOffset = bufferOffset; int bodyLengthOffset = WriteFlvTagHeader(type, timestampMillis); int bodyStartOffset = bufferOffset; ReserveCapacity(reserveBytes); tagWriter(buffer, ref bufferOffset); WriteFlvTagBodyLengthAtOffset(bodyLengthOffset, bufferOffset - bodyStartOffset); WriteFlvTagTotalLenth(bufferOffset - tagStartOffset); }
public static FlvTag Create(FlvTagType type) { switch (type) { case FlvTagType.Audio: return(new FlvAudioTag()); case FlvTagType.Video: return(new FlvVideoTag()); case FlvTagType.ScriptData: return(null); default: throw new NotSupportedException(); } }
private int WriteFlvTagHeader(FlvTagType type, int timestampMillis) { ReserveCapacity(11); buffer[bufferOffset++] = (byte)type; int bodyLengthOffset = bufferOffset; bufferOffset += 3; buffer[bufferOffset++] = (byte)(timestampMillis >> 16); buffer[bufferOffset++] = (byte)(timestampMillis >> 8); buffer[bufferOffset++] = (byte)timestampMillis; buffer[bufferOffset++] = (byte)(timestampMillis >> 24); // Most significant bits after other 24 bits. buffer[bufferOffset++] = 0x00; buffer[bufferOffset++] = 0x00; buffer[bufferOffset++] = 0x00; return(bodyLengthOffset); }