一、了解结构体AVPacket与AVstream

AVPacket:
AVBufferRef *buf :buf指向一个空间,该空间里存放引用计数,packet每次copy的时候引用计数+1,每次删除时引用计数-1
int64_t pts; int64就是long long 长整形 8字节,pts用微秒做单位,有时候取很大
int64_t dts;
uint8_t *data;
int size;
int stream_index;
int flags;
AVPacketSideData *side_data;
int side_data_elems;
int64_t duration;
int64_t pos;
AVRational time_base;
av_packet_unref()将缓存空间的引用计数-1,并将Packet中的其他字段设为初始值。如果引用计数为0,自动的释放缓存空间。
av_packet_free()释放使用av_packet_alloc创建的AVPacket,如果该Packet有引用计数(packet->buf不为空),则先调用av_packet_unref(&packet)。

二、使用

 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);av_seek_frame(ic, videoindex, 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 == videoindex)cout << "视频" << endl;if (pkt->stream_index == audioindex)cout << "音频" << endl;av_packet_unref(pkt);//将缓存空间的引用计数-1,并将Packet中的其他字段设为初始值。如果引用计数为0,自动的释放缓存空间。}

AVPacket pkt = av_packet_alloc();*
先开辟一块空间用于存放AVPacket数据类型,再用指针pkt指向该空间。

int re = av_read_frame(ic, pkt);
读出当前流数据,并存于AVPacket中,
如果当前读到了视频packet,则只读出一packet,
如果当前读到了音频packet,根据音频格式读取固定的数据。
读取成功 流数据自动指向下一个packet,因此不需要一个变量来遍历所有帧
如果AVPacket包内存为空 读取失败,则读取无效,等待 av_read_frame()或者avformat_close_input()处理

av_seek_frame(ic, videoStream, seek_pos, AVSEEK_FLAG_BACKWARD|AVSEEK_FLAG_FRAME)

av_seek_frame
(ic, 打开的封装的上下文
videoindex,
用视频做seek,视频有B帧,为非线性播放, 音频为线性播放,所以如果用音频做seek,seek到的点对应的视频可能非关键帧,就会出现花屏的现象
pos,要seek到的位置
AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_FRAME);**
移动视频的进度条的话,因为时间点为离散的,所以可能没有pos这个时间点,此时设置参数为向后(左)找,并且找的是关键帧

播放器实战07 av_read_frame与av_seek_frame相关推荐

  1. 播放器实战28 总结

    至此,播放器的基本功能已经实现,进行一个总结: 一,仅进行播放时的函数调用流程 只做一个大致的梳理且不涉及seek等操作): 01.QT中的整个控件为QWidget类,Xplay2类为其继承,在mai ...

  2. vue实现音乐播放器实战笔记

    一.项目说明 该播放器的是基于学习vue的实战练习,不用于其他途径.应用中的全部数据来自于 QQ音乐 移动端(https://m.y.qq.com/),利用 jsonp 以及 axios 代理后端请求 ...

  3. 基于 Vue 的直播播放器实战

    原文地址:点击进入 前言 时下直播的盛行让很多人对直播技术产生浓厚的兴趣,orange 本人也不例外,本文借着实战的目的完成一个 demo,并没有深入的讲解直播技术的实现原理以及推流和拉流的实现,为什 ...

  4. vue 判断同一数组内的值是否一直_前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目

    项目名称:vue-fds_music 项目作者:符道胜 开源许可协议:Apache-2.0 项目地址:https://gitee.com/fudaosheng/vue-fds_music 项目简介 V ...

  5. 妙味课堂H5音乐播放器实战视频课程 ajax实战教程

    课程介绍: 本次课程涉及的知识点包括移动端H5.CSS3.JS.滑屏.HTTP协议.AJAX.跨域.前后端交互.PHP.mySql.jQuery--配合这些知识点,讲师写了一个H5播放器demo,用来 ...

  6. 一个简单的媒体文件播放器 2011.07.18

    这两天看 Directshow开发指南 ,一直在为filter的事情学习. 看到第五章的时候,有个播放器例子,研究了一下还不算难, 就跟着人家写了一遍. 相对来说,比直接用那个用 ActiveMovi ...

  7. 后端实体类接收数组_前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目...

    项目名称:vue-fds_music 项目作者:符道胜 开源许可协议:Apache-2.0 项目地址:https://gitee.com/fudaosheng/vue-fds_music 项目简介 V ...

  8. 前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目

    项目名称:vue-fds_music 项目作者:符道胜 开源许可协议:Apache-2.0 项目地址:https://gitee.com/fudaosheng/vue-fds_music 项目简介 V ...

  9. 播放器实战19 Xaudio打开音频

    1.xaudio.h #pragma once class xaudioplay {public:static xaudioplay* get();xaudioplay();//一定得是虚析构函数,d ...

最新文章

  1. 一文读懂并发与并行,同步与异步阻塞
  2. android反编译的方法
  3. JS删除String里某个字符的方法
  4. python封装继承多态_浅谈JavaScript的面向对象和它的封装、继承、多态
  5. apache php 3秒,php版本(5.3,5.5,7.0)及运行模式(fast-cgi/fpm,apache模块)之间性能对比测试...
  6. python输入hello输出olleh_Python小试牛刀(经典例题)[连载中]
  7. linux进程阻塞例子,一个Linux守候进程例子
  8. 阅读理解常规解题思路
  9. 如何在Pr中应用混合模式合成影片中的剪辑?
  10. 语音网关典型配置实例
  11. svn 仓库 本地 连接_建立Subversion仓库在本地如何操作?
  12. 明小子3.5检测网站应用
  13. 数字电视加密技术工作原理(EMM ECM)
  14. 机器学习笔记-阻尼牛顿法
  15. SushiSwap新任「主厨」对近期传闻的回应
  16. 问题解决:虚拟机centos7无法正常启动:XFS (vda3): Corruption of in-memory data detected. Shutting doum filesystem
  17. STM32无系统移植CanFestival小白教程
  18. 第三节、大秦帝国的连坐与链表(一)
  19. MLX90360LGO-ACD-000-RE 可编程位置传感器
  20. 【分享】修复SupeSite/XSpace4的日志编辑器的bug

热门文章

  1. TVS相关参数与选型
  2. svn 撤销已经add的文件
  3. 关于图文识别功能相关技术的实现
  4. 代码情诗——一份真情请查收
  5. NR PRACH (七)Type 2(2-step) RA 参数及相关规定
  6. python 学术论文,python论文_python 论文_python
  7. 如何解除word文档保护的方法
  8. 一文弄懂Flink网络流控及反压
  9. 哈工大教授车万翔:自然语言处理中的伪数据
  10. 做一个功能比较齐全的小程序商城选择好的系统很重要