ffmpeg中av_set_parameters这个函数没有了 代替函数是哪个?
ffmpeg吧
全部回复
仅看楼主
level 1
函数avformat_write_header()函数失败 是什么原因?
2017年03月04日 08点03分 1
level 1
bool VideoRecodec::open_recodec(const QString &fileName, const QString &fmt)
{
close_recodec();
m_mutex.lock();
if(!m_readCtx)
{
m_mutex.unlock();
return false;
}
if((m_err = avformat_alloc_output_context2(&m_writeCtx, NULL, fmt.toLocal8Bit(), fileName.toLocal8Bit()) < 0))
{qDebug()<<"avformat_alloc_output_context2";
m_mutex.unlock();
return false;
}
for(int i = 0; i < m_readCtx->nb_streams; ++i)
{
AVCodecContext *icc = m_readCtx->streams[i]->codec;
if(!(icc->codec_type == AVMEDIA_TYPE_VIDEO) && !(icc->codec_type == AVMEDIA_TYPE_AUDIO))
continue;
AVStream *stream = avformat_new_stream(m_writeCtx, NULL);
if(!stream)
{qDebug()<<"avformat_new_stream";
m_mutex.unlock();
return false;
}
AVCodecContext *occ = stream->codec;
if(m_writeCtx->oformat->video_codec == AVMEDIA_TYPE_VIDEO)
{
m_writeVideoCodec = stream->codec;
m_writeVideoCodec->codec_id = m_writeCtx->oformat->video_codec;
m_writeVideoCodec->codec_type = AVMEDIA_TYPE_VIDEO;
m_writeVideoCodec->bit_rate = 400000;
m_writeVideoCodec->width = m_readVideoCodec->width;
m_writeVideoCodec->height = m_readVideoCodec->height;
m_writeVideoCodec->time_base.num = 1;
m_writeVideoCodec->time_base.den = 25;
m_writeVideoCodec->gop_size = 12;
m_writeVideoCodec->pix_fmt = AV_PIX_FMT_YUV420P;
if(m_writeVideoCodec->codec_id == AV_CODEC_ID_MPEG2VIDEO)
m_writeVideoCodec->max_b_frames = 2;
if(m_writeVideoCodec->codec_id == AV_CODEC_ID_MPEG1VIDEO)
m_writeVideoCodec->mb_decision = 2;
if(m_writeCtx->oformat->name == QString("mp4") || m_writeCtx->oformat->name == QString("mov") ||
m_writeCtx->oformat->name == QString("3gp"))
m_writeVideoCodec->flags |= CODEC_FLAG_GLOBAL_HEADER;
}
else
{
m_writeAudioCodec = stream->codec;
m_writeAudioCodec->codec_id = m_writeCtx->oformat->audio_codec;
m_writeAudioCodec->codec_type = AVMEDIA_TYPE_AUDIO;
m_writeAudioCodec->sample_rate = m_readAudioCodec->sample_rate;
m_writeAudioCodec->sample_fmt = m_readAudioCodec->sample_fmt;
m_writeAudioCodec->channels = m_readAudioCodec->channels;
m_writeAudioCodec->channel_layout = m_readAudioCodec->channel_layout;
}
AVCodec *codec = avcodec_find_encoder(occ->codec_id);
if((m_err = avcodec_open2(occ, codec, NULL)) < 0)
{qDebug()<<"avcodec_open2";
m_mutex.unlock();
return false;
}
}
if((m_err = avio_open(&m_writeCtx->pb, fileName.toLocal8Bit(), AVIO_FLAG_WRITE)) < 0)
{qDebug()<<"avio_open";
m_mutex.unlock();
return false;
}
if((m_err = avformat_write_header(m_writeCtx, NULL)) < 0)
{qDebug()<<"avformat_write_header";
m_mutex.unlock();
return false;
}
m_mutex.unlock();
return true;
}
2017年03月04日 08点03分 2
level 1
到avformat_write_header(m_writeCtx, NULL);这里失败 看网上好像要调用av_set_parameters这个函数
但是我下载的ffmpeg中没有这个函数 怎么弄?
2017年03月04日 08点03分 3
1