C++程序  |  63行  |  2.04 KB

// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS.  All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.



#include "EbmlIDs.h"
#include "EbmlBufferWriter.h"
#include "WebMElement.h"

#include <stdio.h>
int main(int argc, char *argv[])
{
    //init the datatype we're using for ebml output
    unsigned char data[8192];
    EbmlGlobal ebml;
    ebml.buf = data;
    ebml.offset = 0;
    ebml.length = 8192;

    writeHeader(&ebml);
    {
        EbmlLoc startSegment;
        Ebml_StartSubElement(&ebml, &startSegment, Segment); //segment
        {
            //segment info
            EbmlLoc startInfo;
            Ebml_StartSubElement(&ebml, &startInfo, Info);
            Ebml_SerializeString(&ebml, 0x4D80, "muxingAppLibMkv");
            Ebml_SerializeString(&ebml, 0x5741, "writingAppLibMkv");
            Ebml_EndSubElement(&ebml, &startInfo);
        }

        {
            EbmlLoc trackStart;
            Ebml_StartSubElement(&ebml, &trackStart, Tracks);
            writeVideoTrack(&ebml, 1, 1, "V_MS/VFW/FOURCC", 320, 240, 29.97);
            //writeAudioTrack(&ebml,2,1, "A_VORBIS", 32000, 1, NULL, 0);
            Ebml_EndSubElement(&ebml, &trackStart);
        }

        {
            EbmlLoc clusterStart;
            Ebml_StartSubElement(&ebml, &clusterStart, Cluster); //cluster
            Ebml_SerializeUnsigned(&ebml, Timecode, 0);

            unsigned char someData[4] = {1, 2, 3, 4};
            writeSimpleBlock(&ebml, 1, 0, 1, 0, 0, someData, 4);
            Ebml_EndSubElement(&ebml, &clusterStart);
        }    //end cluster
        Ebml_EndSubElement(&ebml, &startSegment);
    }

    //dump ebml stuff to the file
    FILE *file_out = fopen("test.mkv", "wb");
    size_t bytesWritten = fwrite(data, 1, ebml.offset, file_out);
    fclose(file_out);
    return 0;
}