FFMPEG 获取视频PTS

简介: FFMPEG 获取视频PTS

当视频不存在PTS信息时,用DTS代替PTS

PTS不存在时 打印出来是   -9223372036854775808

if(packet->dts == AV_NOPTS_VALUE && packet->pts && packet->pts != AV_NOPTS_VALUE){
      VideoPTS = packet->pts;
}else if(packet->dts != AV_NOPTS_VALUE){
       VideoPTS = packet->dts;
}else{
      VideoPTS = 0;
}
 
VideoPTS *= av_q2d(formatContext->streams[video_stream_index]->time_base);

音视频同步


三种方式:本质都是获取时间差然后让线程休眠  sleep usleep


音频向视频同步 获取PTS的差值


视频向音频同步


音视频向系统时钟同步


多线程解码

ffmpeg 内部avcodec_open2后, m_pVideoCodecContext->thread_count 的数量与cpu内核数相同。所以如果编解码视频数量过多,而且cpu内核数也很大,很容易将整个进程线程数变得很大。而当一个进程线程数大于1000后,该进程将被系统自动杀死。

因此可以在调用avcodec_open2函数之前 ,手动设置thread_count个数。

AVCodecContext *codecContext = avcodec_alloc_context3(videoDecoder);
codecContext->thread_count = 4;


C语言获取系统时间戳

毫秒级别

long long GetSysCurrentTime(){
    struct timeval tv;
    gettimeofday(&tv, NULL);
    long long milliseconds = (long long)tv.tv_sec * 1000 + (long long)tv.tv_usec / 1000;
    //LOGE(LOG_TAG,"start_time %lld",milliseconds);
    return milliseconds;
}



目录
相关文章
|
2月前
|
Web App开发 编解码 安全
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
285 4
|
2月前
|
存储 编解码 算法
深度探索:使用FFmpeg实现视频Logo的添加与移除(二)
深度探索:使用FFmpeg实现视频Logo的添加与移除
110 0
|
2月前
|
编解码 监控 计算机视觉
QT5.14.2 视频分帧:QT与FFmpeg的高效结合
QT5.14.2 视频分帧:QT与FFmpeg的高效结合
134 0
|
2月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(三)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
87 0
|
2月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(二)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
94 0
|
2月前
|
存储 编解码 调度
剖析ffmpeg视频解码播放:时间戳的处理
剖析ffmpeg视频解码播放:时间戳的处理
157 0
|
2月前
|
存储 编解码 vr&ar
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
237 0
|
12天前
|
Python
Python使用ffmpeg下载m3u8拼接为视频
Python使用ffmpeg下载m3u8拼接为视频
36 1
|
2月前
|
编解码 算法 vr&ar
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换(二)
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换
106 1
|
2月前
|
存储 编解码 算法
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换(一)
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换
161 1