MP4Muxer.h 1.61 KB
Newer Older
xiongziliang committed
1
/*
xiongziliang committed
2
 * Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
xiongziliang committed
3 4 5
 *
 * This file is part of ZLMediaKit(https://github.com/xiongziliang/ZLMediaKit).
 *
xiongziliang committed
6 7 8
 * Use of this source code is governed by MIT license that can be found in the
 * LICENSE file in the root of the source tree. All contributing project authors
 * may be found in the AUTHORS file in the root of the source tree.
xiongziliang committed
9 10 11 12 13
 */

#ifndef ZLMEDIAKIT_MP4MUXER_H
#define ZLMEDIAKIT_MP4MUXER_H

xiongziliang committed
14
#ifdef ENABLE_MP4
xiongziliang committed
15 16 17

#include "Common/MediaSink.h"
#include "Extension/AAC.h"
18
#include "Extension/G711.h"
xiongziliang committed
19 20
#include "Extension/H264.h"
#include "Extension/H265.h"
xiongziliang committed
21
#include "Common/Stamp.h"
xiongziliang committed
22
#include "MP4.h"
xiongziliang committed
23 24 25

namespace mediakit{

xiongziliang committed
26
class MP4Muxer : public MediaSinkInterface, public MP4File{
xiongziliang committed
27
public:
28 29
    typedef std::shared_ptr<MP4Muxer> Ptr;

xiongziliang committed
30 31
    MP4Muxer(const char *file);
    ~MP4Muxer() override;
xiongziliang committed
32 33 34 35 36

    /**
     * 添加已经ready状态的track
     */
    void addTrack(const Track::Ptr & track) override;
xiongziliang committed
37
    /**
xiongziliang committed
38
     * 输入帧
xiongziliang committed
39
     */
xiongziliang committed
40
    void inputFrame(const Frame::Ptr &frame) override;
xiongziliang committed
41 42

    /**
xiongziliang committed
43
     * 重置所有track
xiongziliang committed
44
     */
xiongziliang committed
45
    void resetTracks() override ;
xiongziliang committed
46

47 48 49 50 51
    /**
     * 手动关闭文件(对象析构时会自动关闭)
     */
    void closeMP4();

xiongziliang committed
52 53
private:
    void openMP4();
xiongziliang committed
54
    void stampSync();
xiongziliang committed
55

xiongziliang committed
56
private:
xiongziliang committed
57
    struct track_info {
58
        int track_id = -1;
59
        Stamp stamp;
60
    };
xiongziliang committed
61
    unordered_map<int, track_info> _codec_to_trackid;
62
    List<Frame::Ptr> _frameCached;
63 64
    bool _started = false;
    bool _have_video = false;
xiongziliang committed
65
    MP4File::Writer _mov_writter;
xiongziliang committed
66
    string _file_name;
xiongziliang committed
67 68 69
};

}//namespace mediakit
xiongziliang committed
70
#endif//#ifdef ENABLE_MP4
xiongziliang committed
71
#endif //ZLMEDIAKIT_MP4MUXER_H