📄 mp4file.h
字号:
bool includeHeader = true, bool includePayload = true); 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 + -