Merge branch 'master' into dev

This commit is contained in:
xiongguangjie 2023-12-15 14:36:54 +08:00
commit f0e97cf19a
4 changed files with 6 additions and 6 deletions

View File

@ -197,8 +197,8 @@ AMFValue Factory::getAmfByCodecId(CodecId codecId) {
Frame::Ptr Factory::getFrameFromPtr(CodecId codec, const char *data, size_t bytes, uint64_t dts, uint64_t pts) { Frame::Ptr Factory::getFrameFromPtr(CodecId codec, const char *data, size_t bytes, uint64_t dts, uint64_t pts) {
auto it = s_plugins.find(codec); auto it = s_plugins.find(codec);
if (it == s_plugins.end()) { if (it == s_plugins.end()) {
WarnL << "Unsupported codec: " << getCodecName(codec); // 创建不支持codec的frame
return nullptr; return std::make_shared<FrameFromPtr>(codec, (char *)data, bytes, dts, pts);
} }
return it->second->getFrameFromPtr(data, bytes, dts, pts); return it->second->getFrameFromPtr(data, bytes, dts, pts);
} }

View File

@ -104,7 +104,7 @@ bool MP4MuxerInterface::inputFrame(const Frame::Ptr &frame) {
case CodecH264: case CodecH264:
case CodecH265: { case CodecH265: {
// 这里的代码逻辑是让SPS、PPS、IDR这些时间戳相同的帧打包到一起当做一个帧处理 // 这里的代码逻辑是让SPS、PPS、IDR这些时间戳相同的帧打包到一起当做一个帧处理
track.merger.inputFrame(frame, [&](uint64_t dts, uint64_t pts, const Buffer::Ptr &buffer, bool have_idr) { track.merger.inputFrame(frame, [this, &track](uint64_t dts, uint64_t pts, const Buffer::Ptr &buffer, bool have_idr) {
int64_t dts_out, pts_out; int64_t dts_out, pts_out;
track.stamp.revise(dts, pts, dts_out, pts_out); track.stamp.revise(dts, pts, dts_out, pts_out);
mp4_writer_write(_mov_writter.get(), track.track_id, buffer->data(), buffer->size(), pts_out, dts_out, have_idr ? MOV_AV_FLAG_KEYFREAME : 0); mp4_writer_write(_mov_writter.get(), track.track_id, buffer->data(), buffer->size(), pts_out, dts_out, have_idr ? MOV_AV_FLAG_KEYFREAME : 0);

View File

@ -55,7 +55,7 @@ bool MpegMuxer::inputFrame(const Frame::Ptr &frame) {
case CodecH264: case CodecH264:
case CodecH265: { case CodecH265: {
// 这里的代码逻辑是让SPS、PPS、IDR这些时间戳相同的帧打包到一起当做一个帧处理 // 这里的代码逻辑是让SPS、PPS、IDR这些时间戳相同的帧打包到一起当做一个帧处理
return track.merger.inputFrame(frame, [&](uint64_t dts, uint64_t pts, const Buffer::Ptr &buffer, bool have_idr) { return track.merger.inputFrame(frame, [this, &track](uint64_t dts, uint64_t pts, const Buffer::Ptr &buffer, bool have_idr) {
_key_pos = have_idr; _key_pos = have_idr;
// 取视频时间戳为TS的时间戳 // 取视频时间戳为TS的时间戳
_timestamp = dts; _timestamp = dts;

View File

@ -111,7 +111,7 @@ void DecoderImp::onDecode(int stream, int codecid, int flags, int64_t pts, int64
onTrack(stream, Factory::getTrackByCodecId(codec, 8000, 1, 16)); onTrack(stream, Factory::getTrackByCodecId(codec, 8000, 1, 16));
} }
if (!ref.first) { if (!ref.first) {
WarnL << "not support codec :" << getCodecName(codec); WarnL << "Unsupported codec :" << getCodecName(codec);
return; return;
} }
auto frame = Factory::getFrameFromPtr(codec, (char *)data, bytes, dts, pts); auto frame = Factory::getFrameFromPtr(codec, (char *)data, bytes, dts, pts);
@ -119,7 +119,7 @@ void DecoderImp::onDecode(int stream, int codecid, int flags, int64_t pts, int64
onFrame(stream, frame); onFrame(stream, frame);
return; return;
} }
ref.second.inputFrame(frame, [&](uint64_t dts, uint64_t pts, const Buffer::Ptr &buffer, bool) { ref.second.inputFrame(frame, [this, stream, codec](uint64_t dts, uint64_t pts, const Buffer::Ptr &buffer, bool) {
onFrame(stream, Factory::getFrameFromBuffer(codec, buffer, dts, pts)); onFrame(stream, Factory::getFrameFromBuffer(codec, buffer, dts, pts));
}); });
} }