📄 mp4file.h
字号:
MP4Timestamp GetRtpTimestampStart(
MP4TrackId hintTrackId);
void SetRtpTimestampStart(
MP4TrackId hintTrackId,
MP4Timestamp rtpStart);
void AddRtpHint(
MP4TrackId hintTrackId,
bool isBframe,
u_int32_t timestampOffset);
void AddRtpPacket(
MP4TrackId hintTrackId,
bool setMbit,
int32_t transmitOffset);
void AddRtpImmediateData(
MP4TrackId hintTrackId,
const u_int8_t* pBytes,
u_int32_t numBytes);
void AddRtpSampleData(
MP4TrackId hintTrackId,
MP4SampleId sampleId,
u_int32_t dataOffset,
u_int32_t dataLength);
void AddRtpESConfigurationPacket(
MP4TrackId hintTrackId);
void WriteRtpHint(
MP4TrackId hintTrackId,
MP4Duration duration,
bool isSyncSample);
u_int8_t AllocRtpPayloadNumber();
// edit list related
char* MakeTrackEditName(
MP4TrackId trackId,
MP4EditId editId,
const char* name);
MP4EditId AddTrackEdit(
MP4TrackId trackId,
MP4EditId editId = MP4_INVALID_EDIT_ID);
void DeleteTrackEdit(
MP4TrackId trackId,
MP4EditId editId);
u_int32_t GetTrackNumberOfEdits(
MP4TrackId trackId);
MP4Timestamp GetTrackEditStart(
MP4TrackId trackId,
MP4EditId editId);
MP4Duration GetTrackEditTotalDuration(
MP4TrackId trackId,
MP4EditId editId);
MP4Timestamp GetTrackEditMediaStart(
MP4TrackId trackId,
MP4EditId editId);
void SetTrackEditMediaStart(
MP4TrackId trackId,
MP4EditId editId,
MP4Timestamp startTime);
MP4Duration GetTrackEditDuration(
MP4TrackId trackId,
MP4EditId editId);
void SetTrackEditDuration(
MP4TrackId trackId,
MP4EditId editId,
MP4Duration duration);
bool GetTrackEditDwell(
MP4TrackId trackId,
MP4EditId editId);
void SetTrackEditDwell(
MP4TrackId trackId,
MP4EditId editId,
bool dwell);
MP4SampleId GetSampleIdFromEditTime(
MP4TrackId trackId,
MP4Timestamp when,
MP4Timestamp* pStartTime = NULL,
MP4Duration* pDuration = NULL);
/* end of MP4 API */
/* "protected" interface to be used only by friends in library */
u_int64_t GetPosition(FILE* pFile = NULL);
void SetPosition(u_int64_t pos, FILE* pFile = NULL);
u_int64_t GetSize();
u_int32_t ReadBytes(
u_int8_t* pBytes, u_int32_t numBytes, FILE* pFile = NULL);
u_int64_t ReadUInt(u_int8_t size);
u_int8_t ReadUInt8();
u_int16_t ReadUInt16();
u_int32_t ReadUInt24();
u_int32_t ReadUInt32();
u_int64_t ReadUInt64();
float ReadFixed16();
float ReadFixed32();
float ReadFloat();
char* ReadString();
char* ReadCountedString(
u_int8_t charSize = 1, bool allowExpandedCount = false);
u_int64_t ReadBits(u_int8_t numBits);
void FlushReadBits();
u_int32_t ReadMpegLength();
u_int32_t PeekBytes(
u_int8_t* pBytes, u_int32_t numBytes, FILE* pFile = NULL);
void WriteBytes(u_int8_t* pBytes, u_int32_t numBytes, FILE* pFile = NULL);
void WriteUInt(u_int64_t value, u_int8_t size);
void WriteUInt8(u_int8_t value);
void WriteUInt16(u_int16_t value);
void WriteUInt24(u_int32_t value);
void WriteUInt32(u_int32_t value);
void WriteUInt64(u_int64_t value);
void WriteFixed16(float value);
void WriteFixed32(float value);
void WriteFloat(float value);
void WriteString(char* string);
void WriteCountedString(char* string,
u_int8_t charSize = 1, bool allowExpandedCount = false);
void WriteBits(u_int64_t bits, u_int8_t numBits);
void PadWriteBits(u_int8_t pad = 0);
void FlushWriteBits();
void WriteMpegLength(u_int32_t value, bool compact = false);
void EnableMemoryBuffer(
u_int8_t* pBytes = NULL, u_int64_t numBytes = 0);
void DisableMemoryBuffer(
u_int8_t** ppBytes = NULL, u_int64_t* pNumBytes = NULL);
char GetMode() {
return m_mode;
}
MP4Track* GetTrack(MP4TrackId trackId);
MP4Duration UpdateDuration(MP4Duration duration);
MP4Atom* FindAtom(const char* name);
MP4Atom* AddChildAtom(
const char* parentName,
const char* childName);
MP4Atom* AddChildAtom(
MP4Atom* pParentAtom,
const char* childName);
MP4Atom* InsertChildAtom(
const char* parentName,
const char* childName,
u_int32_t index);
MP4Atom* InsertChildAtom(
MP4Atom* pParentAtom,
const char* childName,
u_int32_t index);
MP4Atom* AddDescendantAtoms(
const char* ancestorName,
const char* childName);
MP4Atom* AddDescendantAtoms(
MP4Atom* pAncestorAtom,
const char* childName);
protected:
void Open(const char* fmode);
void ReadFromFile();
void GenerateTracks();
void BeginWrite();
void FinishWrite();
void CacheProperties();
void RewriteMdat(FILE* pReadFile, FILE* pWriteFile);
const char* TempFileName();
void Rename(const char* existingFileName, const char* newFileName);
void ProtectWriteOperation(char* where);
void FindIntegerProperty(const char* name,
MP4Property** ppProperty, u_int32_t* pIndex = NULL);
void FindFloatProperty(const char* name,
MP4Property** ppProperty, u_int32_t* pIndex = NULL);
void FindStringProperty(const char* name,
MP4Property** ppProperty, u_int32_t* pIndex = NULL);
void FindBytesProperty(const char* name,
MP4Property** ppProperty, u_int32_t* pIndex = NULL);
bool FindProperty(const char* name,
MP4Property** ppProperty, u_int32_t* pIndex = NULL);
void AddTrackToIod(MP4TrackId trackId);
void RemoveTrackFromIod(MP4TrackId trackId);
void AddTrackToOd(MP4TrackId trackId);
void RemoveTrackFromOd(MP4TrackId trackId);
void GetTrackReferenceProperties(const char* trefName,
MP4Property** ppCountProperty, MP4Property** ppTrackIdProperty);
void AddTrackReference(const char* trefName, MP4TrackId refTrackId);
u_int32_t FindTrackReference(const char* trefName, MP4TrackId refTrackId);
void RemoveTrackReference(const char* trefName, MP4TrackId refTrackId);
void AddDataReference(MP4TrackId trackId, const char* url);
char* MakeTrackName(MP4TrackId trackId, const char* name);
u_int8_t ConvertTrackTypeToStreamType(const char* trackType);
void CreateIsmaIodFromFile(
MP4TrackId odTrackId,
MP4TrackId sceneTrackId,
MP4TrackId audioTrackId,
MP4TrackId videoTrackId,
u_int8_t** ppBytes,
u_int64_t* pNumBytes);
MP4Descriptor* CreateESD(
MP4DescriptorProperty* pEsProperty,
u_int32_t esid,
u_int8_t objectType,
u_int8_t streamType,
u_int32_t bufferSize,
u_int32_t bitrate,
u_int8_t* pConfig,
u_int32_t configLength,
char* url);
void CreateIsmaODUpdateCommandFromFileForFile(
MP4TrackId odTrackId,
MP4TrackId audioTrackId,
MP4TrackId videoTrackId,
u_int8_t** ppBytes,
u_int64_t* pNumBytes);
void CreateIsmaODUpdateCommandFromFileForStream(
MP4TrackId audioTrackId,
MP4TrackId videoTrackId,
u_int8_t** ppBytes,
u_int64_t* pNumBytes);
void CreateIsmaODUpdateCommandForStream(
MP4DescriptorProperty* pAudioEsdProperty,
MP4DescriptorProperty* pVideoEsdProperty,
u_int8_t** ppBytes,
u_int64_t* pNumBytes);
void CreateIsmaSceneCommand(
bool hasAudio,
bool hasVideo,
u_int8_t** ppBytes,
u_int64_t* pNumBytes);
protected:
char* m_fileName;
FILE* m_pFile;
u_int64_t m_orgFileSize;
u_int64_t m_fileSize;
MP4Atom* m_pRootAtom;
MP4Integer32Array m_trakIds;
MP4TrackArray m_pTracks;
MP4TrackId m_odTrackId;
u_int32_t m_verbosity;
char m_mode;
bool m_use64bits;
bool m_useIsma;
// cached properties
MP4IntegerProperty* m_pModificationProperty;
MP4Integer32Property* m_pTimeScaleProperty;
MP4IntegerProperty* m_pDurationProperty;
// read/write in memory
u_int8_t* m_memoryBuffer;
u_int64_t m_memoryBufferPosition;
u_int64_t m_memoryBufferSize;
// bit read/write buffering
u_int8_t m_numReadBits;
u_int8_t m_bufReadBits;
u_int8_t m_numWriteBits;
u_int8_t m_bufWriteBits;
};
#endif /* __MP4_FILE_INCLUDED__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -