|
|
@ -79,11 +79,13 @@ bool Cffmpeg_decode::open_input_file() {
|
|
|
|
av_dict_set(&avdic, "buffer_size", "2048000", 0);
|
|
|
|
av_dict_set(&avdic, "buffer_size", "2048000", 0);
|
|
|
|
// 设置超时断开连接时间,单位微秒//listen_timeout
|
|
|
|
// 设置超时断开连接时间,单位微秒//listen_timeout
|
|
|
|
// av_dict_set(&avdic, "listen_timeout", "200000", 0);
|
|
|
|
// av_dict_set(&avdic, "listen_timeout", "200000", 0);
|
|
|
|
av_dict_set(&avdic, "stimeout", "5000000", 0); // 设置超时5秒
|
|
|
|
av_dict_set(&avdic, "stimeout", "3000000", 0); // 设置超时3秒
|
|
|
|
av_dict_set(&avdic, "max_delay", "300000", 0); // 设置最大时延300ms
|
|
|
|
av_dict_set(&avdic, "max_delay", "300000", 0); // 设置最大时延300ms
|
|
|
|
av_dict_set(&avdic, "tune", "zerolatency", 0); // 实时编码
|
|
|
|
av_dict_set(&avdic, "tune", "zerolatency", 0); // 实时编码
|
|
|
|
av_dict_set(&avdic, "preset", "faster", 0); // ultrafast
|
|
|
|
av_dict_set(&avdic, "preset", "faster", 0); // ultrafast
|
|
|
|
av_dict_set(&avdic, "threads", "auto", 0); // 自动开启线程数
|
|
|
|
av_dict_set(&avdic, "threads", "auto", 0); // 自动开启线程数
|
|
|
|
|
|
|
|
// 设置最大重试时间为1s,解决avformat_open_input打开空流时间过长问题
|
|
|
|
|
|
|
|
av_dict_set(&avdic, "max_interleave_delta", "1000000", 0);
|
|
|
|
|
|
|
|
|
|
|
|
// av_dict_set(&avdic, "rtsp_flags", "prefer_tcp", 0); // 保持TCP连接
|
|
|
|
// av_dict_set(&avdic, "rtsp_flags", "prefer_tcp", 0); // 保持TCP连接
|
|
|
|
// av_dict_set(&avdic, "timeout", "500000", 0); // 超时时间设置为500ms
|
|
|
|
// av_dict_set(&avdic, "timeout", "500000", 0); // 超时时间设置为500ms
|
|
|
@ -196,9 +198,9 @@ void Cffmpeg_decode::run() {
|
|
|
|
// 推流使用
|
|
|
|
// 推流使用
|
|
|
|
firstDts = AV_NOPTS_VALUE; // 初始化第一帧的DTS
|
|
|
|
firstDts = AV_NOPTS_VALUE; // 初始化第一帧的DTS
|
|
|
|
startTime = av_gettime();
|
|
|
|
startTime = av_gettime();
|
|
|
|
int ret11 = 0;
|
|
|
|
|
|
|
|
// 读取数据包
|
|
|
|
// 读取数据包
|
|
|
|
while ((ret11 = av_read_frame(inputFormatCtx, inputPacket)) >= 0) {
|
|
|
|
while (av_read_frame(inputFormatCtx, inputPacket) >= 0) {
|
|
|
|
// ret = av_read_frame(inputFormatCtx, inputPacket);
|
|
|
|
// ret = av_read_frame(inputFormatCtx, inputPacket);
|
|
|
|
// if (ret < 0 || ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
|
|
|
|
// if (ret < 0 || ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
|
|
|
|
// qDebug() << "ret:" << QString::number(ret);
|
|
|
|
// qDebug() << "ret:" << QString::number(ret);
|
|
|
@ -314,9 +316,7 @@ void Cffmpeg_decode::run() {
|
|
|
|
if (m_saveVideoFlag) {
|
|
|
|
if (m_saveVideoFlag) {
|
|
|
|
saveDone();
|
|
|
|
saveDone();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (ret11 == AVERROR_EOF && errno == 0) {
|
|
|
|
|
|
|
|
qDebug() << "ret:";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// QCoreApplication::processEvents();
|
|
|
|
// QCoreApplication::processEvents();
|
|
|
|
qDebug() << "All video play done";
|
|
|
|
qDebug() << "All video play done";
|
|
|
|
}
|
|
|
|
}
|
|
|
|