pts:显示时间戳*time_base=以秒为单位的显示时间

#include <iostream>
extern "C"{
#include "libavformat/avformat.h"
}
using namespace std;
#pragma comment(lib,"avformat.lib")
#pragma comment(lib,"avutil.lib")
#pragma comment(lib,"avcodec.lib")
static double r2d(AVRational r)
{return r.den == 0 ? 0:(double)r.num / (double)r.den;
}
int main(int argc, char *argv[])
{cout << "Test Demux FFmpeg.club" << endl;const char *path = "001111.mp4";//初始化封装库av_register_all();//初始化网络库 (可以打开rtsp rtmp http 协议的流媒体视频)avformat_network_init();//参数设置AVDictionary *opts = NULL;//设置rtsp流已tcp协议打开av_dict_set(&opts, "rtsp_transport", "tcp", 0);//网络延时时间av_dict_set(&opts, "max_delay", "500", 0);//解封装上下文AVFormatContext *ic = NULL;int re = avformat_open_input(&ic,path,0,  // 0表示自动选择解封器&opts //参数设置,比如rtsp的延时时间);if (re != 0){char buf[1024] = { 0 };av_strerror(re, buf, sizeof(buf) - 1);cout << "open " << path << " failed! :" << buf << endl;getchar();return -1;}cout << "open " << path << " success! " << endl;//获取流信息re = avformat_find_stream_info(ic, 0);//总时长 毫秒int totalMs = ic->duration / (AV_TIME_BASE / 1000);cout << "totalMs = " << totalMs << endl;//打印视频流详细信息av_dump_format(ic,0,path,0);//音视频索引,读取时区分音视频int videoStream = 0;int audioStream = 1;cout << "streams count: " << ic->nb_streams << endl;//获取音视频流信息 (遍历,函数获取)for (int i = 0; i < ic->nb_streams; i++){AVStream *as = ic->streams[i];//音频 AVMEDIA_TYPE_AUDIOif (as->codecpar->codec_type == AVMEDIA_TYPE_AUDIO){audioStream = i;cout <<i<< "音频信息" << endl;cout << "sample_rate = " << as->codecpar->sample_rate << endl;
//            AVSampleFormat;cout << "format = " << as->codecpar->format << endl;cout << "channels = " << as->codecpar->channels << endl;cout << "codec_id = " << as->codecpar->codec_id << endl;cout << "audio fps = " <<r2d(as->avg_frame_rate)<<endl;//一帧数据?? 单通道样本数cout << "frame_size = " << as->codecpar->frame_size << endl;//1024 * 2 * 2 = 4096  fps = sample_rate/frame_sizecout << "codec_id = " << as->codecpar->codec_id << endl;cout << "format = " << as->codecpar->format << endl;}//视频 AVMEDIA_TYPE_VIDEOelse if (as->codecpar->codec_type == AVMEDIA_TYPE_VIDEO){videoStream = i;cout << i << "视频信息" << endl;cout << "width=" << as->codecpar->width << endl;cout << "height=" << as->codecpar->height << endl;cout << "format = " << as->codecpar->format << endl;//帧率 fps 分数转换cout<<"video fps = " <<r2d(as->avg_frame_rate)<<endl;cout << "codec_id = " << as->codecpar->codec_id << endl;cout << "format = " << as->codecpar->format << endl;}cout <<"----------------"<<endl;}//获取视频流videoStream = av_find_best_stream(ic, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);///ic->streams[videoStream]//malloc AVPacket并初始化AVPacket *pkt = av_packet_alloc();for (;;){int re = av_read_frame(ic, pkt);if(re!=0){//循环播放cout << "==============================end==============================" << endl;int ms = 1000; //三秒位置 根据时间基数(分数)转换long long pos = (double)ms/ (double)1000/r2d(ic->streams[pkt->stream_index]->time_base);cout << "pos" << pos << endl;cout << "num" << ic->streams[pkt->stream_index]->time_base.num;cout << "den" << ic->streams[pkt->stream_index]->time_base.den;av_seek_frame(ic, videoStream, pos, AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_FRAME);continue;}cout << "pkt->size = "<< pkt->size << endl;//显示的时间cout << "pkt->pts = " << pkt->pts << endl;//转换为毫秒,方便做同步cout << "pkt->pts ms = " << pkt->pts * (r2d(ic->streams[pkt->stream_index]->time_base)*1000) << endl;//解码时间cout << "pkt->dts = " << pkt->dts << endl;if (pkt->stream_index == videoStream){cout << "图像" << endl;}if (pkt->stream_index == audioStream){cout << "音频" << endl;}//释放,引用计数-1 为0释放空间av_packet_unref(pkt);}av_packet_free(&pkt);if (ic){//释放封装上下文,并且把ic置0avformat_close_input(&ic);}getchar();return 0;
}

ffmpeg制作视频播放器(六)读取视频帧,音频帧相关推荐

  1. ffmpeg制作视频播放器(十五)XPlay2 音视频参数获取和复制

    XDemux.cpp //获取视频参数 返回的空间需要清理 avcodec_parameters_free AVCodecParameters *XDemux::CopyVPara() {mux.lo ...

  2. ffmpeg制作视频播放器(十四)XPlay2 read接口

    XDemux.cpp新增 AVPacket *XDemux::Read() {mux.lock();if (!ic) //容错{mux.unlock();return 0;}AVPacket *pkt ...

  3. ffmpeg制作视频播放器(十三)XPlay2 open接口

    main.cpp #include "XPlay2.h"#include <QApplication> #include <iostream> using ...

  4. QT软件开发-基于FFMPEG设计视频播放器-GPU硬解、OpenGL渲染、解码音频完整例子(六)

    QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...

  5. QT软件开发-基于FFMPEG设计视频播放器-软解图像(一)

    QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...

  6. QT软件开发-基于FFMPEG设计视频播放器-解码音频(三)

    QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...

  7. QT软件开发-基于FFMPEG设计视频播放器-GPU硬解、OpenGL渲染(四)

    QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...

  8. javacv和FFmpeg实现视频播放器的制作,和视音同步操作;

    最近用javaCV的ffmpeg包的FFmpegFrameGrabber帧捕捉器对捕捉到的音频帧和视频帧做了同步的播放.采用的同步方法是视频向音频同步. 具体的思路如下: (1)首先介绍ffmpeg是 ...

  9. OpenCV C++案例实战二十一《制作视频播放器》

    OpenCV C++案例实战二十一<制作视频播放器> 前言 一.源码 二.效果 总结 前言 本文将使用OpenCV C++ 制作简易视频播放器,用于实现视频播放基本功能. 1.通过创建滑动 ...

最新文章

  1. 皮一皮:女友在意的点....是包子!
  2. 用linux下常用命令wget进行整站下载(递归下载至本地)
  3. cordova 强制竖屏
  4. 两条平行导线同向电流_电磁学(9)——磁场对电流的作用,安培力
  5. python 入门基础-如何学习Python,以及新手如何入门?
  6. 解读阿里巴巴Java手册:为什么不建议使用Executors创建线程池?
  7. PPT转换为PDF后,图片背景变成了黑色的解决方法
  8. ccf201412-3集合竞价
  9. SpringBoot官方开发工具,热部署和远程调试真带劲
  10. python 换页符_python分页字符串
  11. 中国科技大学网络视频课程软件设计模式(自主模式)
  12. python系列教程143——行缩进
  13. 在金之塔上用 Python 对期货固定止损止盈 委托挂条件单或实时价格追踪的实现
  14. sql:查询选修了全部课程的学生姓名
  15. 关于GPS 转换实用地图算法
  16. 【爬虫】学习:App数据的爬取
  17. slackware linux,seamonkey引起的rpm2tgz问题
  18. 医院wifi解决方案怎么样
  19. 超级详细的注释C语言简单实现童年小游戏:贪吃蛇
  20. 基于S32K144平台实现两种软件定时器

热门文章

  1. 浅析技能音效制作思路
  2. Mysql 慢SQL分析工具pt-query-digest介绍
  3. 模拟房间冲击响应(Room Impulse Response,RIR),AI去混响
  4. 注册表查看计算机硬件,计算机硬件注册表修改实例(一)
  5. Python主要用来做什么?
  6. 微服务项目之电商--17.商品规格数据结构SPU和SKU
  7. 彩色图像与无色图像、消色差、图像的空间频率成分(chromatic information achromatic information、spatial frequency component)
  8. 猫猫新开通了新浪微博,欢迎小伙伴们来关注哟
  9. ASP木马提升权限的N种方法
  10. C++实现查询对方ip地址,确定真实地理位置!