mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-19 06:42:21 +08:00
Support multi audio/video track
This commit is contained in:
@@ -61,7 +61,8 @@ void MP4Demuxer::onVideoTrack(uint32_t track, uint8_t object, int width, int hei
|
||||
if (!video) {
|
||||
return;
|
||||
}
|
||||
_track_to_codec.emplace(track, video);
|
||||
video->setIndex(track);
|
||||
_tracks.emplace(track, video);
|
||||
if (extra && bytes) {
|
||||
video->setExtraData((uint8_t *)extra, bytes);
|
||||
}
|
||||
@@ -72,7 +73,8 @@ void MP4Demuxer::onAudioTrack(uint32_t track, uint8_t object, int channel_count,
|
||||
if (!audio) {
|
||||
return;
|
||||
}
|
||||
_track_to_codec.emplace(track, audio);
|
||||
audio->setIndex(track);
|
||||
_tracks.emplace(track, audio);
|
||||
if (extra && bytes) {
|
||||
audio->setExtraData((uint8_t *)extra, bytes);
|
||||
}
|
||||
@@ -134,8 +136,8 @@ Frame::Ptr MP4Demuxer::readFrame(bool &keyFrame, bool &eof) {
|
||||
}
|
||||
|
||||
Frame::Ptr MP4Demuxer::makeFrame(uint32_t track_id, const Buffer::Ptr &buf, int64_t pts, int64_t dts) {
|
||||
auto it = _track_to_codec.find(track_id);
|
||||
if (it == _track_to_codec.end()) {
|
||||
auto it = _tracks.find(track_id);
|
||||
if (it == _tracks.end()) {
|
||||
return nullptr;
|
||||
}
|
||||
Frame::Ptr ret;
|
||||
@@ -166,15 +168,16 @@ Frame::Ptr MP4Demuxer::makeFrame(uint32_t track_id, const Buffer::Ptr &buf, int6
|
||||
}
|
||||
}
|
||||
if (ret) {
|
||||
ret->setIndex(track_id);
|
||||
it->second->inputFrame(ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
vector<Track::Ptr> MP4Demuxer::getTracks(bool trackReady) const {
|
||||
vector<Track::Ptr> MP4Demuxer::getTracks(bool ready) const {
|
||||
vector<Track::Ptr> ret;
|
||||
for (auto &pr : _track_to_codec) {
|
||||
if (trackReady && !pr.second->ready()) {
|
||||
for (auto &pr : _tracks) {
|
||||
if (ready && !pr.second->ready()) {
|
||||
continue;
|
||||
}
|
||||
ret.push_back(pr.second);
|
||||
|
||||
Reference in New Issue
Block a user