[FFmpeg-user] Creating MP4 with G711 audio
d.gordenin at ngslab.ru
d.gordenin at ngslab.ru
Thu Nov 21 11:41:32 EET 2024
Hello.
I'm trying to make a mp4 file from a video/audio stream. When audio is
AAC it works fine. But I cannot pack G711U audio.
|av_register_all(); avcodec_register_all();
av_log_set_callback(nullptr); av_format_context_ =
avformat_alloc_context(); if (!av_format_context_) { std::string
error_msg = "Failed to allocate avformat context";
log_->Error(error_msg); throw std::runtime_error(error_msg.c_str()); }
av_format_context_->oformat = av_guess_format("mp4", filename.c_str(),
NULL); strcpy(av_format_context_->filename, filename.c_str()); AVCodec*
codec = avcodec_find_encoder(AV_CODEC_ID_PCM_MULAW);
av_format_context_->oformat->audio_codec = codec->id; audio_stream_ =
avformat_new_stream(av_format_context_, codec); if (audio_stream_ ==
nullptr) { log_->Error("Can not create audiostream."); return false; }
AVCodecContext& codec_context = *audio_stream_->codec; if
(avcodec_copy_context(audio_stream_->codec,
av_format_context_->streams[1]->codec) != 0) { log_->Error("Failed to
Copy Context"); return false; } audio_stream_->time_base = { 1,
codec_context.sample_rate }; if (av_format_context_->oformat->flags &
AVFMT_GLOBALHEADER) codec_context.flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
log_->Info("Init output {}", filename);
av_dump_format(av_format_context_, 0, filename.c_str(), 1); int ret =
avio_open(&av_format_context_->pb, filename.c_str(), AVIO_FLAG_WRITE);
if (ret < 0) { log_->Error("Can not open file for writing."); return
false; } ret = avformat_write_header(av_format_context_, NULL); if (ret
< 0) { log_->Error("Can not write header."); return false; } |
Here avformat_write_header() returns -22. What's wrong here? Which data
should I supply to this function?
More information about the ffmpeg-user
mailing list