Official repository of the ISO Base Media File Format Reference Software

ISO Base Media File Format (ISOBMFF)

This repository is the official repository for the ISO Base Media File Format Reference Software.

The ISO base media file format is published by ISO as part 12 of the MPEG-4 specifications, ISO/IEC 14496-12. As such, it implements and conforms to part of MPEG-4. This part of MPEG-4 is used heavily by standards other than MPEG-4, and this reference software is often used by the reference software for those other standards, but still provides, in those contexts, an implementation "claiming conformance to MPEG-4".

Updates to the reference software can be submitted using Pull Requests but are subject to approval by MPEG, and a formal input contribution should be submitted to MPEG.

When possible, it is preferred that separate Pull Requests for fixes/enhancements to the build system and for fixes/enhancements to the software features.

Documentation

The general documentation of the public exported API is available at gh-pages and can also be generated locally with Doxygen by running:

doxygen Doxyfile

In addition, several How to use examples as well as the old version of the API (extracted from isofile.doc) are provided in the following Wiki.

Development

The repository contains the libisomediafile which is a library implementing the ISO base media file format. In addition, several tools to read and write files based on this specification are provided.

Requirements

Compiling

It is recommended to use cmake to build the software in this repository. However, this repository also contains old project files for some IDE's which are no longer maintained and are kept in the repository just to maintain compatibility with other software from MPEG.

Example of commands to build the entire toolset on a Linux platform.

git clone https://github.com/MPEGGroup/isobmff.git
cd isobmff
mkdir build && cd build
cmake ..
make

Cross platform

CMake allows to generate build scripts for different platforms. For instance:

cmake -G "Visual Studio 16 2019" -A ARM64

For more generators, please see CMake documentation.

Note also that certain IDE may be able to natively parse a CMakeLists.txt in which case there is no need to generate specific build scripts. Please refer to your IDE's documentation on how to best handle CMake-based projects.

Individual compilation

If you are only interested in certain tools, you can build them individually.

For instance, the libisomediafile can be built using make libisomediafile when using Unix Makefile.

For a complete list, please refer to the generated build scripts, for instance with Unix Makefile:

$ make help
The following are some of the valid targets for this Makefile:
... all (the default if no target is provided)
... clean
... depend
... rebuild_cache
... edit_cache
... libuniDrcBitstreamDecoderLib
... libwavIO
... libreadonlybitbuf
... libwriteonlybitbuf
... TLibDecoder
... TLibCommon
... libisomediafile
... makeAudioMovieSample
... playAudioMovieSample
... DRC_to_MP4
... MP4_to_DRC
... hevc_muxer
... hevc_demuxer
... hevc_extractors
... protectAudioMovie
... libisoiff
... isoiff_tool
... WAV_to_MP4
... MP4_to_WAV
Comments
  • Fix build issue for VS2008

    Fix build issue for VS2008

    Hello, I'm Daniel Richter from Fraunhofer IIS, mainly working in the Audio WG on the MPEG-H 3D Audio reference software. I noticed that for VS2008 the isobmff reference software is not compiling with the 3D Audio reference software. Therefore I request to adapt the corresponding libisomedia.vcproj file to fix this issue. Kind regards, Daniel

  • How to get the 'avc1' sample entry from sampleDescription (stsd)?

    How to get the 'avc1' sample entry from sampleDescription (stsd)?

    Hi,

    I try many different ways but still can not get the avc1 box information such as width, height, and extensionList point to avcC.

    First, I open the file and get moov and then get track... and so on. err = ISOOpenMovieFile( &moov, filename, MP4OpenMovieNormal ); err = ISOGetMovieIndTrack( moov, trackNumber, &trak ); err = ISOGetTrackMedia( trak, &media );

    Then, I get sampleDescription box. stsd = (MP4SampleDescriptionAtomPtr) stbl->SampleDescription;

    Then, I want get the avc1 box in stsd. But stsd only have method call: getEntry( struct MP4SampleDescriptionAtom *self, u32 entryNumber, struct GenericSampleEntryAtom **outEntry )

    The problem is the outEntry is GenericSampleEntryAtom, but I may need to use MP4VisualSampleEntryAtom as output. If that possible way to transfer GenericSampleEntryAtom to MP4VisualSampleEntryAtomPtr? Or is there is other way to get avc1 box information?

    Thanks!

  • Submodule issue: Failed to clone 'IsoLib/HM'

    Submodule issue: Failed to clone 'IsoLib/HM'

    I just noticed that git://hevc.kw.bbc.co.uk/git/jctvc-hm.git seems to be down. Therefore HM submodule can not be cloned when attempting to build IsoLib

    $ cmake .. -- ... -- Detecting CXX compile features - done -- Submodule update Submodule 'IsoLib/HM' (git://hevc.kw.bbc.co.uk/git/jctvc-hm.git) registered for path 'IsoLib/HM' Cloning into '/Users/podborski/projects/isobmff/IsoLib/HM'... fatal: unable to connect to hevc.kw.bbc.co.uk: hevc.kw.bbc.co.uk[0: 132.185.142.226]: errno=Operation timed out

    fatal: clone of 'git://hevc.kw.bbc.co.uk/git/jctvc-hm.git' into submodule path '/Users/podborski/projects/isobmff/IsoLib/HM' failed Failed to clone 'IsoLib/HM'. Retry scheduled Cloning into '/Users/podborski/projects/isobmff/IsoLib/HM'... fatal: unable to connect to hevc.kw.bbc.co.uk: hevc.kw.bbc.co.uk[0: 132.185.142.226]: errno=Operation timed out

    Moving it to github would be great I guess.

  • Compile errors in test_main

    Compile errors in test_main

    [ 95%] Building CXX object test/CMakeFiles/unit_tests.dir/test_main.cpp.o
    In file included from /usr/include/signal.h:328,
                     from /home/bradh/coding/isobmff/test/./catch.hpp:8042,
                     from /home/bradh/coding/isobmff/test/test_main.cpp:2:
    /home/bradh/coding/isobmff/test/./catch.hpp:10830:58: error: call to non-‘constexpr’ function ‘long int sysconf(int)’
    10830 |     static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ;
          |                                                          ^~~~~~~~~~~
    In file included from /usr/include/x86_64-linux-gnu/bits/sigstksz.h:24,
                     from /usr/include/signal.h:328,
                     from /home/bradh/coding/isobmff/test/./catch.hpp:8042,
                     from /home/bradh/coding/isobmff/test/test_main.cpp:2:
    /usr/include/unistd.h:640:17: note: ‘long int sysconf(int)’ declared here
      640 | extern long int sysconf (int __name) __THROW;
          |                 ^~~~~~~
    In file included from /home/bradh/coding/isobmff/test/test_main.cpp:2:
    /home/bradh/coding/isobmff/test/./catch.hpp:10889:45: error: size of array ‘altStackMem’ is not an integral constant-expression
    10889 |     char FatalConditionHandler::altStackMem[sigStackSize] = {};
          |                                             ^~~~~~~~~~~~
    make[2]: *** [test/CMakeFiles/unit_tests.dir/build.make:76: test/CMakeFiles/unit_tests.dir/test_main.cpp.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:822: test/CMakeFiles/unit_tests.dir/all] Error 2
    make: *** [Makefile:91: all] Error 2
    

    This is on Kubuntu with g++ (Ubuntu 11.2.0-19ubuntu1) 11.2.0.

  • CMake scripts for the entire repo

    CMake scripts for the entire repo

    This PR provides CMake scripts to build the reference software library and tools.

    It does not yet remove the legacy scripts, i.e. makefiles, vs studio and xcode.

    This will be done at a later stage when compilation will be validated on these platforms.

  • CMakeLists.txt for libisomediafile

    CMakeLists.txt for libisomediafile

    Hi isobmff maintainers, In the past I had problems building libisomediafile on Windows with recent versions of Visual Studio. I couldn't find a cmake list, so I wrote this one. Tested the build on Linux, Windows and Mac. Currently, I use it with the MPEG-4 audio reference software.

    Best, Daniel

  • test the VVC subpicture track

    test the VVC subpicture track

    Hi Dimitri

    I wrote a piece of code based on test_01_sample, but because the second section is too complicated, the corresponding track cannot be parsed correctly. Can you check it out for me?

    Thank you Pengjian

  • MPEG-D USAC and MPEG-H 3D Audio support / edit list handling

    MPEG-D USAC and MPEG-H 3D Audio support / edit list handling

    I solved some issues with the integration of the libisomediafile into the reference software of MPEG-D USAC and MPEG-H 3D Audio: I added missing source code files to Visual Studio 2008 and Visual Studio 2012 project files. Additionally I solved a bug when writing the edit list. In case the trackStartTime equals 0 the elst should be written when the media duration equals the track duration.

  • drc_in_isom: outdated API usage of uniDrcBitstreamDecoder_api.h in MPEG-D part 4

    drc_in_isom: outdated API usage of uniDrcBitstreamDecoder_api.h in MPEG-D part 4

    compilation error:

    ./src/DRCData.c: In function ‘initDRCData’:
    ../src/DRCData.c:68:14: error: too few arguments to function ‘initUniDrcBitstreamDec’
         drcErr = initUniDrcBitstreamDec(drcData->hUniDrcBsDecStruct, sampleRate, framesize);
                  ^~~~~~~~~~~~~~~~~~~~~~
    In file included from ../src/DRCData.h:39:0,
                     from ../src/DRCData.c:24:
    ../../../external/Part04-Dynamic_Range_Control/trunk/modules/uniDrcModules/uniDrcBitstreamDecoderLib/include/uniDrcBitstreamDecoder_api.h:53:1: note: declared here  initUniDrcBitstreamDec(HANDLE_UNI_DRC_BS_DEC_STRUCT hUniDrcBsDecStruct,
    
  • OMAF extensions

    OMAF extensions

    This request includes support for new atoms defined in OMAF FDIS as needed extensions to ISO/IEC 14496-12 and ISO/IEC 14496-15. Support for restricted schemes (which was already in ISO/IEC 14496-12 but not implemented in the reference software) was also added. Also added a Visual Studio solution for hevc_extractor code.

    Please squash all commits into a single one when merging.

  • New media and entity groups

    New media and entity groups

    Based on the work done for 23090-10 we identified several missing features in libisomedia. This PR also includes a few other bugfixes.

    Short summary of this PR:

    • Add sample entries, handlers and media headers for new media (volumetric and haptic, ISOBMFF 7th edition)
    • EntityToGroup implementation provided by Nokia (thank you)
    • Fraunhofer HHI reported a bug regarding large files (mdat box which uses size=1 and unsigned int(64) largesize) which is also addressed by this PR
  • Adds missing files to legacy build system

    Adds missing files to legacy build system

    Recently added files to the isobmff repository have only been added to the cmake build system and not the legacy build system (Makefile, vcxproj). This leads to failing compilation in environments using the legacy build system.

    The proposed changes add the missing files to the legacy build system.

  • How to add DRC data?

    How to add DRC data?

    Hi team,

    Can you please share an example mp4 file with loudness box -- ludt data?

    Or can you please share an example of drcInputBitStream.bit, so that we can run DRC_to_MP4?

    It is confusing for me about how to add ludt data.

    Thanks in advance!

  • Improve testing using conformance files

    Improve testing using conformance files

    During MPEG 135 it was suggested to add more tests based on conformance files from Part 32.

    In the first step we could fetch conformance files from mpeg server and check if the reference software can successfully open all of them.

    In the next step we should continue improving tests by parsing deeper in the files...

🎥 mpv is a free (as in freedom) media player for the command line.
🎥 mpv is a free (as in freedom) media player for the command line.

mpv is a free (as in freedom) media player for the command line. It supports a wide variety of media file formats, audio and video codecs, and subtitle types.

Jan 5, 2023
TIP (translate it, please) is a plugin for VLC media player that helps you to study languages by watching videos.

vlc-tip-plugin TIP (translate it, please) is a plugin for VLC media player that helps you to study languages by watching videos. Features The plugin a

Oct 11, 2022
Jellyfin Desktop Client based on Plex Media Player
Jellyfin Desktop Client based on Plex Media Player

Desktop client using jellyfin-web with embedded MPV player. Supports Windows, Mac OS, and Linux. Media plays within the same window using the jellyfin-web interface unlike Jellyfin Desktop. Supports audio passthrough. Based on Plex Media Player.

Jan 1, 2023
A clone of Media Player Classic reimplemented in Qt.
A clone of Media Player Classic reimplemented in Qt.

Media Player Classic Qute Theater A clone of Media Player Classic reimplemented in Qt. Media Player Classic Home Cinema (mpc-hc) is considered by many

Jan 6, 2023
media server based on c++11, support webrtc/rtmp/httpflv/websocket flv

cpp_media_server A media server is writen by C++11, and the network io is writen by Boost.Asio. It support rtmp/httpflv/websocket(flv)/webrtc. preinst

Jun 30, 2022
Smartstreaming is a high-performance and scalable streaming media server.

1. introduction Smartstreaming is a high-performance and scalable streaming media server. 2. design | io | Coroutine | | transport | tcp/udp/srt/quic

Jan 7, 2022
Free and open-source media player written in C++

Liquid Media Player Free and open-source media player written in C++. Currently in development. Build Guide Windows Install the MSYS2 Building Platfor

Sep 20, 2022
Video stabilization is a software-based approach in real-time to eliminating environmental effects (wind, heavy vehicle etc.) and enhance the visual performance that degrade video streaming quality.
Video stabilization is a software-based approach in real-time to eliminating environmental effects (wind, heavy vehicle etc.) and enhance the visual performance that degrade video streaming quality.

Video Stabilization Contents General Info Installation To Do General Info Video stabilization is a software-based approach in real-time to eliminating

Nov 23, 2022
A homebrew software suite for video game consoles developed to help in the evaluation of upscalers, upscan converters

A homebrew software suite for video game consoles developed to help in the evaluation of upscalers, upscan converters, line doublers and of course TV processing of 240p video. The Wii and Dreamcast versions have modes for 480i and 480p evaluation as well.

Dec 31, 2022
This repository contains applications used in my Gameboy LCD video.

Gameboy LCD stuff This repository contains applications used in my Gameboy LCD video. Pin naming LCD pin naming used in this repository matches the Ga

Jan 6, 2023
ffmpeg supporting EVC codec and file formats.

ffevc ffmpeg supporting EVC codec and file formats. MPEG-5 Essential Video Coding (EVC) integration with FFmpeg project. It is supported under Linux a

Nov 23, 2022
Example how to use ffmpeg to decode video file.

FFMpeg-decode-example Example how to use ffmpeg to decode video file. Link to article about decode with FFMpeg. Russian article. Example shows you the

Nov 16, 2022
The Dolby MP4 streaming muxer (dlb_mp4base) is a software implementation of a muxer of fragmented or unfragmented ISO base media file format (mp4)

The Dolby MP4 streaming muxer (dlb_mp4base) is a software implementation of a muxer of fragmented or unfragmented ISO base media file format (mp4). It supports muxing of Dolby Digital (AC-3), Dolby Digital Plus (E-AC-3), and Dolby AC-4 audio formats as well as Dolby Vision.

Dec 21, 2022
The Dolby MP4 streaming demuxer (dlb_mp4demux) is a software implementation of a demuxer of fragmented or unfragmented ISO base media file format (mp4).

The Dolby MP4 streaming demuxer (dlb_mp4demux) is a software implementation of a demuxer of fragmented or unfragmented ISO base media file format (mp4). It supports demuxing of Dolby Digital (AC-3), Dolby Digital Plus (E-AC-3), and Dolby AC-4 audio formats as well as Dolby Vision. It is designed for use on architectures with limited resources.

Dec 20, 2022
The OpenEXR project provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the motion picture industry.
The OpenEXR project provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the motion picture industry.

OpenEXR OpenEXR provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the mot

Jan 6, 2023
✔️The smallest header-only GUI library(4 KLOC) for all platforms
✔️The smallest header-only GUI library(4 KLOC) for all platforms

Welcome to GUI-lite The smallest header-only GUI library (4 KLOC) for all platforms. 中文 Lightweight ✂️ Small: 4,000+ lines of C++ code, zero dependenc

Jan 8, 2023
Kodi is an award-winning free and open source software media player and entertainment hub for digital media
Kodi is an award-winning free and open source software media player and entertainment hub for digital media

website • docs • community • add-ons Welcome to Kodi Home Theater Software! Kodi is an award-winning free and open source software media player and en

Jan 2, 2023
Reference Implementations of P0267, the proposed 2D graphics API for ISO C++

P0267 Reference Implementation Please read the LICENSE before cloning or forking the code as there is important information there! Please see the wiki

Dec 3, 2022
TengineGst is a streaming media analytics framework, based on GStreamer multimedia framework, for creating varied complex media analytics pipelines.
TengineGst is a streaming media analytics framework, based on GStreamer multimedia framework, for creating varied complex media analytics pipelines.

TengineGst is a streaming media analytics framework, based on GStreamer multimedia framework, for creating varied complex media analytics pipelines. It ensures pipeline interoperability and provides optimized media, and inference operations using Tengine Toolkit Inference Engine backend, across varied architecture - CPU, iGPU and VPU.

Dec 17, 2022
A virtual network Differential GNSS server-client project using Precise Point Positioning (PPP). Global coverage. Without physical base station construction needed. An open-source virtual base station approach.
A virtual network Differential GNSS server-client project using Precise Point Positioning (PPP). Global coverage. Without physical base station construction needed. An open-source virtual base station approach.

Virtual-Network-DGNSS-Project This project is the software implementation for a publicly available, open-source, client/server VN-DGNSS implementation

Oct 24, 2022