All Projects → DigiDNA → Isobmff

DigiDNA / Isobmff

Licence: mit
C++ Library for ISO/IEC 14496-12 - ISO Base Media File Format (QuickTime, MPEG-4, HEIF, etc)

Programming Languages

cplusplus
227 projects

Projects that are alternatives of or similar to Isobmff

python-yamlable
A thin wrapper of PyYaml to convert Python objects to YAML and back
Stars: ✭ 28 (-82.17%)
Mutual labels:  format, file, codec
Hrconvert2
A self-hosted, drag-and-drop, & nosql file conversion server that supports 62x file formats.
Stars: ✭ 132 (-15.92%)
Mutual labels:  image, format, file
Silicompressor
A powerful, flexible and easy to use Video and Image compression library for Android.
Stars: ✭ 1,081 (+588.54%)
Mutual labels:  library, image, media
Ts3admin.class
The ts3admin.class is a powerful api for communication with Teamspeak 3 Servers from your website! Your creativity knows no bounds!
Stars: ✭ 103 (-34.39%)
Mutual labels:  library, file
Argumentum
C++ command line parsing library
Stars: ✭ 92 (-41.4%)
Mutual labels:  parser, library
File Icon
Get the icon of a file or app as a PNG image (macOS)
Stars: ✭ 100 (-36.31%)
Mutual labels:  image, file
Internettools
XPath/XQuery 3.1 interpreter for Pascal with compatibility modes for XPath 2.0/XQuery 1.0/3.0, custom and JSONiq extensions, XML/HTML parsers and classes for HTTP/S requests
Stars: ✭ 82 (-47.77%)
Mutual labels:  parser, library
Indicators
Activity Indicators for Modern C++
Stars: ✭ 1,838 (+1070.7%)
Mutual labels:  library, format
Simplepie
A simple Atom/RSS parsing library for PHP.
Stars: ✭ 1,389 (+784.71%)
Mutual labels:  parser, library
Commonmark Java
Java library for parsing and rendering CommonMark (Markdown)
Stars: ✭ 1,675 (+966.88%)
Mutual labels:  parser, library
Typin
Declarative framework for interactive CLI applications
Stars: ✭ 126 (-19.75%)
Mutual labels:  parser, library
Angular File Uploader
Angular file uploader is an Angular 2/4/5/6/7/8/9/10 + file uploader module with Real-Time Progress Bar, Responsive design, Angular Universal Compatibility, localization and multiple themes which includes Drag and Drop and much more.
Stars: ✭ 92 (-41.4%)
Mutual labels:  image, file
Rst
PHP library to parse reStructuredText documents
Stars: ✭ 90 (-42.68%)
Mutual labels:  parser, library
Laravel Filemanager Example 5.3
Demo integration for laravel-filemanager (https://github.com/UniSharp/laravel-filemanager).
Stars: ✭ 100 (-36.31%)
Mutual labels:  media, file
Sjmediacacheserver
A HTTP Media Caching Framework. It can cache FILE or HLS media. 音视频边播边缓存框架, 支持 HLS(m3u8) 和 FILE(mp4, mp3等).
Stars: ✭ 87 (-44.59%)
Mutual labels:  media, mp4
React Image File Resizer
Resize Local Images with React 🌄 🌅
Stars: ✭ 108 (-31.21%)
Mutual labels:  image, file
Releases
dahliaOS ISO releases
Stars: ✭ 125 (-20.38%)
Mutual labels:  iso, image
React Files
A file input (dropzone) management component for React
Stars: ✭ 126 (-19.75%)
Mutual labels:  image, file
Cat
Plain C library for parsing AT commands for use in host devices.
Stars: ✭ 77 (-50.96%)
Mutual labels:  parser, library
Packer Ubuntu 1404
DEPRECATED - Packer Example - Ubuntu 14.04 Vagrant Box using Ansible provisioner
Stars: ✭ 81 (-48.41%)
Mutual labels:  iso, image

ISOBMFF

Build Status Coverage Status Issues Status License Contact

C++ Library for ISO/IEC 14496-12 - ISO Base Media File Format (QuickTime, MPEG-4, HEIF, etc)

About

ISOBMFF is a cross-platform C++ library for reading/parsing files in the ISO Base Media File Format (ISO/IEC 14496-12).

The ISO Base Media File Format is a container format, used by many file types, including:

  • QuickTime (.mov)
  • MPEG-4 (.m4v, .m4a, etc)
  • 3GP (.3g2)
  • HEIF/HEIC (.heif, .heic, etc)
  • ... and many others

Support for editing/writing files is not available at the moment, but the library has been designed for this goal in mind, so writing support will eventually become available.

ISO Base Media File Format

ISO base media file format (ISO/IEC 14496-12 - MPEG-4 Part 12) defines a general structure for time-based multimedia files such as video and audio.
It is designed as a flexible, extensible format that facilitates interchange, management, editing and presentation of the media.
The presentation may be local, or via a network or other stream delivery mechanism.
The file format is designed to be independent of any particular network protocol while enabling support for them in general.
It is used as the basis for other media file formats (e.g. container formats MP4 and 3GP).

Source: Wikipedia

Building

macOS

An Xcode project is provided for convenience, containing the following targets:

  • ISOBMFF: The main cross-platform C++ library.
  • ISOBMFF-Dump: A cross-platform command-line utility for dumping files.

Note that you can also build the library with make, on the command line.

Windows

An VisualStudio solution is provided for convenience, containing the following targets:

  • ISOBMFF Static v120xp: A static library built with the V120XP toolset (VS 2013)
  • ISOBMFF Static v140xp: A static library built with the V140XP toolset (VS 2015)
  • ISOBMFF Static v141xp: A static library built with the V141XP toolset (VS 2017)
  • ISOBMFF DLL v120xp: A dynamic library (DLL) built with the V120XP toolset (VS 2013)
  • ISOBMFF DLL v140xp: A dynamic library (DLL) built with the V140XP toolset (VS 2015)
  • ISOBMFF DLL v141xp: A dynamic library (DLL) built with the V141XP toolset (VS 2017)
  • ISOBMFF-Dump: A cross-platform command-line utility for dumping files.

Linux/Unix

The library can be build with make, on the command line.

Library Usage

Parsing is done with the ISOBMFF::Parser class:

ISOBMFF::Parser parser;

try
{
    parser.Parse( "path/to/some/file" );
}
catch( ... )
{}

When the parser is done, an instance of ISOBMFF::File can be retrieved:

std::shared_ptr< ISOBMFF::File > file = parser.GetFile();

Boxes can then be retrieved the following way, from the file:

std::shared_ptr< ISOBMFF::Box > box = file->GetBox( "ftyp" );

If the box does not exist, it will return nullptr.

A typed box can be retrieved the following way:

std::shared_ptr< ISOBMFF::FTYP > ftyp = file->GetTypedBox< ISOBMFF::FTYP >( "ftyp" );

Here, nullptr will be returned if the box does not exist, or is not of the correct type.

Container boxes acts just the same:

std::shared_ptr< ISOBMFF::ContainerBox > moov = file->GetTypedBox< ISOBMFF::ContainerBox >( "moov" );
std::shared_ptr< ISOBMFF::MVHD         > mvhd = moov->GetTypedBox< ISOBMFF::MVHD         >( "mvhd" );

The parser also supports custom boxes:

parser.RegisterBox( "abcd", [ = ]( void ) -> std::shared_ptr< CustomBox > { return std::make_shared< CustomBox >(); } );

It will then create an instance of CustomBox when encountering an abcd box somewhere in the file.

The custom class needs at least to inherit from Box:

class CustomBox: public ISOBMFF::Box
{
    public:
        
        CustomBox( void ): Box( "abcd" )
        {}
        
        void CustomBox::ReadData( Parser & parser, BinaryStream & stream )
        {
            /* Read box data here... */
        }
        
        std::vector< std::pair< std::string, std::string > > CustomBox::GetDisplayableProperties( void ) const
        {
            /* Returns box properties, to support output... */
            return {};
        }
};

License

ISOBMFF is released under the terms of the MIT License.

Repository Infos

Owner:          DigiDNA
Web:            www.digidna.net
Blog:           imazing.com/blog
Twitter:        @DigiDNA
GitHub:         github.com/DigiDNA
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].