From e992b29e2d52a098f23ba8391f2a278edc36ab17 Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Fri, 21 Jun 2024 21:05:39 +0800 Subject: [PATCH] Mux h264 and g711a ok. --- utils/MediaBase/src/FfmpegMuxStream.cpp | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/utils/MediaBase/src/FfmpegMuxStream.cpp b/utils/MediaBase/src/FfmpegMuxStream.cpp index e9963a9..e99f3f2 100644 --- a/utils/MediaBase/src/FfmpegMuxStream.cpp +++ b/utils/MediaBase/src/FfmpegMuxStream.cpp @@ -191,7 +191,6 @@ void FfmpegMuxStream::GetVideoStream(const void *data, const size_t &size, const } void FfmpegMuxStream::GetAudioStream(const void *data, const size_t &size, const StreamInfo &streamInfo) { - return; AVPacket *packet = nullptr; packet = av_packet_alloc(); packet->data = (unsigned char *)data; @@ -212,8 +211,10 @@ void FfmpegMuxStream::GetAudioStream(const void *data, const size_t &size, const LogInfo("Error during decoding\n"); break; } - ConvertAudioFrame(mFrameVideo, mCodecAudioContext, &mAudioSt); - write_frame(mOc, mAudioSt.enc, mAudioSt.st, mFrameAudio, mAudioSt.tmp_pkt); + mFrameAudio->pts = mAudioSt.next_pts; + mAudioSt.next_pts += mFrameAudio->nb_samples; + ConvertAudioFrame(mFrameVideo, mAudioSt.enc, &mAudioSt); + write_frame(mOc, mAudioSt.enc, mAudioSt.st, mAudioSt.frame, mAudioSt.tmp_pkt); break; } av_packet_unref(packet); @@ -255,7 +256,7 @@ bool FfmpegMuxStream::add_stream(OutputStream *ost, AVFormatContext *oc, const A case AVMEDIA_TYPE_AUDIO: c->sample_fmt = (*codec)->sample_fmts ? (*codec)->sample_fmts[0] : AV_SAMPLE_FMT_FLTP; c->bit_rate = 64000; - c->sample_rate = 44100; + c->sample_rate = 8000; if ((*codec)->supported_samplerates) { c->sample_rate = (*codec)->supported_samplerates[0]; for (i = 0; (*codec)->supported_samplerates[i]; i++) { @@ -361,9 +362,9 @@ bool FfmpegMuxStream::open_video(AVFormatContext *oc, const AVCodec *codec, Outp } bool FfmpegMuxStream::open_audio(AVFormatContext *oc, const AVCodec *codec, OutputStream *ost, AVDictionary *opt_arg) { - AVCodecContext *c; - int nb_samples; - int ret; + AVCodecContext *c = nullptr; + int nb_samples = 0; + int ret = 0; AVDictionary *opt = nullptr; c = ost->enc; @@ -545,13 +546,7 @@ bool FfmpegMuxStream::InitCodecAudio(enum AVCodecID codecId, AVCodec **codec, AV int FfmpegMuxStream::write_frame(AVFormatContext *fmt_ctx, AVCodecContext *c, AVStream *st, AVFrame *frame, AVPacket *pkt) { - int ret; - if (c == nullptr) { - LogError("c is null\n"); - } - if (frame == nullptr) { - LogError("frame is null\n"); - } + int ret = 0; // send the frame to the encoder ret = avcodec_send_frame(c, frame); if (ret < 0) {