我目前正在使用Hauppauge WinTV950Q的实时视频输入,这为我提供了实时视频输入。
我正在使用libav*
和Qt
库,并在Linux上C/C++
编程。我使用推荐的avcodec_open_input()
来打开和处理(转码)用于移动设备的输入。我希望能够在我的移动设备上观看电视,并且能够远程切换频道。到目前为止一切正常。
我唯一的问题是打开输入需要5到20秒。对于我的用例来说哪个慢,我会在1-3秒之间延迟。我以前用于第一次测试的v4l2-API实际上设法在1-3秒之间获得切换时间,我不能使用它,因为我需要进行一些转码,所以我可以在我的移动设备上使用视频数据。
有没有办法改善avformat_open_input()
来电的开放时间?也许在打开输入之前需要设置库中的一些全局变量?
const char* filename = "/dev/dvb/adapter0/dvr0";
int main(void)
{
/*Qt-Variables*/
QTime timer;
/*General AV-IO*/
int i, videoStream, audioStream, frameFinished;
AVFormatContext *ptrFormatContext;
AVPacket ptrPacket;
/*Audio related*/
AVCodecContext *aCodecCtx;
AVCodecContext *aTargetCodecCtxt;
AVCodec *aCodec;
AVCodec *aTargetCodec;
uint8_t *audio_samples;
int frame_size_ptr;
// AVSampleFormat ptrSampleFormats[2] = {AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32};
/*Video related*/
AVCodecContext *ptrCodecCtxt;
AVCodecContext *vTargetCodecCtxt;
AVCodec *ptrCodec;
AVCodec *vTargetCodec;
AVFrame *ptrFrame;
/*Default Initialization of Variables*/
audioStream = videoStream = -1;
audio_samples = NULL;
/*Registering and initialization of the libav* codecs, formats, filter etc.*/
qDebug("Registering Codecs, Filter, Formats, Media Libraries etc...");
timer.start();
av_register_all();
avcodec_register_all();
qDebug()<<"Elapsed(ms): "<<timer.elapsed();
/*Assigning a memory array to the Format Context and the Frame for the Video decoding, now we can start working*/
qDebug("Allocating Codec Context and Frames for main Input...");
timer.start();
ptrFrame = avcodec_alloc_frame();
ptrFormatContext = avformat_alloc_context();
qDebug()<<"Elapsed(ms): "<<timer.elapsed();
/*Opening the Live Video Input, sometimes very slow.*/
qDebug("Trying to open the Input...");
timer.start();
if(avformat_open_input(&ptrFormatContext, filename, NULL, NULL) != 0 )
{
qDebug("Error opening the input");
exit(-1);
} else qDebug()<<"Elapsed(ms): "<<timer.elapsed();
Registering Codecs, Filter, Formats, Media Libraries etc...
Elapsed(ms): 0
Allocating Codec Context and Frames for main Input...
Elapsed(ms): 0
Trying to open the Input...
Elapsed(ms): 14752
答案 0 :(得分:0)
不确定这是否对您有帮助,我是一个libavcodec n00b:)
尝试将ptrFormatContext上的max_analyze_duration设置为较低的值...
我已经成功地使用它来加速实时mjpeg流的开放