|
|
@ -83,10 +83,11 @@ bool Cffmpeg_decode::open_input_file() {
|
|
|
|
av_dict_set(&avdic, "buffer_size", "4096000", 0);
|
|
|
|
av_dict_set(&avdic, "buffer_size", "4096000", 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", "5000000", 0); // 设置超时5秒
|
|
|
|
// 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", "ultrafast", 0); // faster
|
|
|
|
av_dict_set(&avdic, "threads", "auto", 0); // 自动开启线程数
|
|
|
|
av_dict_set(&avdic, "threads", "auto", 0); // 自动开启线程数
|
|
|
|
// 设置最大重试时间为1s,解决avformat_open_input打开空流时间过长问题
|
|
|
|
// 设置最大重试时间为1s,解决avformat_open_input打开空流时间过长问题
|
|
|
|
av_dict_set(&avdic, "max_interleave_delta", "1000000", 0);
|
|
|
|
av_dict_set(&avdic, "max_interleave_delta", "1000000", 0);
|
|
|
@ -94,9 +95,10 @@ bool Cffmpeg_decode::open_input_file() {
|
|
|
|
// av_dict_set(&avdic, "reconnect", "1", 0); // 开启自动重连
|
|
|
|
// av_dict_set(&avdic, "reconnect", "1", 0); // 开启自动重连
|
|
|
|
// av_dict_set(&avdic, "reconnect_streamed", "1", 0); // 对于流媒体自动重连
|
|
|
|
// av_dict_set(&avdic, "reconnect_streamed", "1", 0); // 对于流媒体自动重连
|
|
|
|
av_dict_set(&avdic, "reconnect_delay_max", "5",
|
|
|
|
av_dict_set(&avdic, "reconnect_delay_max", "5",
|
|
|
|
0); // 最大重连延时 5 秒f'f'f'f'f'f'f'f'f'f'f
|
|
|
|
0); // 最大重连延时 5 秒
|
|
|
|
// 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", "8000000",
|
|
|
|
|
|
|
|
// 0); // 超时时间(包括连接和数据传输的时间)设置为5s
|
|
|
|
// av_dict_set(&avdic, "probesize", "50000000", 0); // 增加探针大小,1MB
|
|
|
|
// av_dict_set(&avdic, "probesize", "50000000", 0); // 增加探针大小,1MB
|
|
|
|
// av_dict_set(&avdic, "analyzeduration", "5000000", 0); //
|
|
|
|
// av_dict_set(&avdic, "analyzeduration", "5000000", 0); //
|
|
|
|
// av_dict_set(&avdic, "keepalive", "1", 0);
|
|
|
|
// av_dict_set(&avdic, "keepalive", "1", 0);
|
|
|
@ -323,10 +325,11 @@ void Cffmpeg_decode::run() {
|
|
|
|
double elapsed_system_time = av_gettime() - first_frame_system_time;
|
|
|
|
double elapsed_system_time = av_gettime() - first_frame_system_time;
|
|
|
|
// 计算需要等待的时间(us)
|
|
|
|
// 计算需要等待的时间(us)
|
|
|
|
double wait_time = elapsed_pts_time - elapsed_system_time;
|
|
|
|
double wait_time = elapsed_pts_time - elapsed_system_time;
|
|
|
|
// qDebug() << "pull stream sleep time:"
|
|
|
|
qDebug() << "pull stream sleep time:"
|
|
|
|
// << QString::number(wait_time / 1000.0);
|
|
|
|
<< QString::number(wait_time / 1000.0);
|
|
|
|
if (wait_time > 0) {
|
|
|
|
if (wait_time > 0 && bPushStreamFlag) {
|
|
|
|
// av_usleep(wait_time); // 延时以同步 PTS
|
|
|
|
av_usleep(wait_time); // 延时以同步 PTS
|
|
|
|
|
|
|
|
// sleepMsec(wait_time);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 更新 previous_pts_time 为当前帧的 PTS
|
|
|
|
// 更新 previous_pts_time 为当前帧的 PTS
|
|
|
|
previous_pts_time = pts_time;
|
|
|
|
previous_pts_time = pts_time;
|
|
|
|