解决 av_read_frame() 文件尾(end of file)

ffmpegav_read_frame阻塞的原因与解决方案 最近用到ffmpeg,想要av_read_frame立即返回,但是看网上的博客,都没有详细的解说,那就自己看源码。 两种方法: 设置回调打断函数和设置超时 超时,但是如果只设置该参数,依然会在av_read_frame中阻塞, av_dict_set(&inputDic, "stimeout", "2*1000*1000", 0); // milliseconds //打断回调 m_avformatCtx->interrupt_callback.callback = interru 阅读详情

一、问题描述

使用ffmpeg API进行h264编码时,av_read_frame()从缓存读取数据,会出现读取到文件尾的情况,截图如下:
读取文件尾截图

二、解决方案

  1. 预处理
    可参考:https://blog.csdn.net/Martin_chen2/article/details/103069058
  2. 修改探针大小
// 打开输入流时,修改探针probesize的大小
pVideoFormatCtx->probesize = BYTES_PER_FRAME * 8;
pVideoFormatCtx->pb = avio;
if (
FFmpeg源码分析:av_read_frame()读取音视频 FFmpeg使用av_read_frame()方法读取音频流、视频流、字幕流,得到AVPacket数据包。FFmpeg官方提供的samples有使用示例,或者在ffplay.c代码中:打开文件/网络流后,while循环调用av_read_frame()读取帧数据,也就是解封装demux过程,直到文件末尾EOF 阅读详情

相关推荐

FFmpeg 原生编译 & 开发环境完整限制,FFmpeg音视频开发环境搭建案例展示

Windows 下不能用 MSVC 直接编译 FFmpeg 源码,只能 MSYS2 MinGW 编译库;Qt MSVC / Qt MinGW 两套套件的 FFmpeg 库不能混用;编译必须 Bash + yasm/nasm,Qt、VS 自带环境均缺少依赖;MSVC 只能动态链接 FFmpeg dll,无法使用 MinGW 编译的静态 .a;FFmpeg 纯 C,Qt C++ 代码必须 extern "C" 包裹头文件,否则链接失败。

雪的季节 304

ffmpeg的错误集锦

avformat_find_stream_info faild, ret=-541478725 +0ms mediasoup:Worker (stdout) failed! End of file +0ms

sun007700的专栏 1031

FFmpeg学习 av_read_frame()函数分析

前言 本文分析av_read_frame函数,该函数在libavformat包下。 /** * Return the next frame of a stream. * This function returns what is stored in the file, and does not validate * that what is there are valid frames for the decoder. It will split what is * stored in the fi

baiiu 1563

ffmpeg-视频操作

代码示例 std::list<AVFormatContext*> ifmt_ctx_lst; void BeginSplitFile(const char* file, const char* out_file) { AVFormatContext* ifmt_ctx_item = nullptr; if ((avformat_open_input(&ifmt_ctx_item, file, 0, 0)) < 0) return; ifmt_ctx_lst.push_ba

daoer_sofu的专栏 323

JavaCV异常:av_read_frame()返回值为-541478725

av_read_frame()返回值为-541478725 码云(Gitee)主页:https://gitee.com/banmajio github主页:https://github.com/banmajio 个人博客:banmajio’s blog ffmpeg中的av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调 用...

banmajio的博客 4811

最简单的基于 FFmpeg 的视音频分离器

最简单的基于 FFmpeg 的视音频分离器

ProgramNovice的博客 2306

基于FFmpeg与GDExtension的Godot跨格式视频播放方案

视频解码是多媒体应用开发中的核心技术,其原理是将压缩的编码数据还原为原始的音画帧。现代视频编码标准如H.264/AVC和H.265/HEVC,凭借高压缩效率,已成为MP4、MKV等主流封装格式的基石。在游戏开发领域,灵活的视频播放能力对于过场动画、教程演示至关重要,它直接影响用户体验与内容呈现。Godot引擎内置的视频播放支持有限,主要面向Ogg Theora格式,这促使开发者寻求更通用的解决方案。通过集成FFmpeg这一强大的多媒体处理库,并利用Godot 4的GDExtension扩展机制,可以构建一个

weixin_34288121的博客 380

FFmpeg C/C++编程入门:从核心概念到实战转码与缩放

音视频编解码是多媒体处理的核心技术,它负责将原始的音视频数据压缩为便于存储和传输的格式,并在播放时还原。其原理主要基于空间冗余、时间冗余和感知冗余的压缩算法,例如H.264/AVC和AAC就是广泛应用的编解码标准。掌握编解码技术对于开发高性能的音视频应用至关重要,它能显著降低带宽和存储成本,提升用户体验。这一技术被广泛应用于视频会议、流媒体服务、视频编辑以及安防监控等场景。本文聚焦于FFmpeg这一强大的开源多媒体框架,它封装了丰富的编解码库和工具,是进行底层音视频处理的利器。通过理解其核心数据模型(如AV

weixin_30384217的博客 397

Windonws 视频存储及播放

windows 使用FFMpeg保存视频,播放视频

yuchunhai321的博客 78

C++实战解析FLV文件:从二进制字节流到音视频封装原理

音视频封装格式是多媒体数据处理的基础,它定义了音视频数据、元数据和时间戳等信息的组织方式,是播放、编辑和流媒体传输的核心。其原理在于通过特定的二进制结构(如文件头、数据标签)将编码后的音视频流打包成文件或传输流,确保数据的完整性和同步性。掌握封装格式的解析技术,对于开发播放器、转码工具和流媒体服务器具有重要价值,广泛应用于视频编辑、在线直播和媒体服务器等场景。本文以经典的FLV格式为例,通过C++实战解析,深入剖析其文件头、标签结构和时间戳同步机制,帮助读者理解关键帧、音频采样率等核心概念在字节流层面的具体

dingdi3021的博客 440

Android应用集成FFmpeg:从编译裁剪到JNI调用的完整实践指南

音视频处理是移动应用开发中的常见需求,其核心在于对多媒体数据的编解码、封装与滤镜处理。FFmpeg作为一套开源的音视频处理解决方案,通过其模块化设计(如libavcodec、libavformat、libavfilter)提供了强大的底层能力。在Android平台集成FFmpeg,并非简单移植,而是需要针对移动端ARM架构进行交叉编译,并通过JNI(Java Native Interface)桥接Java/Kotlin层与C/C++原生库。这一技术方案的价值在于实现了对音视频处理流程的彻底掌控,避免了第三方

weixin_30781107的博客 301

多媒体框架 FFmpeg 和 GStreamer

多媒体框架是一种软件框架,它在电脑上处理媒体数据并通过网络进行传播。一个良好的多媒体框架提供了直观的API和模块化的架构,这使得它易于添加对新的音频、视频和容器格式以及传输协议的支持。

wei_Embedded_z的博客 355

FFmpeg图解:av_read_frame()

FFmpeg图解:av_read_frame()

浪风一骑 1953

调用av_read_frame返回的错误码

首先上代码:[cpp] view plain copy#include &lt;stdio.h&gt;    #define MKTAG(a,b,c,d) ((a) | ((b) &lt;&lt; 8) | ((c) &lt;&lt; 16) | ((unsigned)(d) &lt;&lt; 24))      #define FFERRTAG(a, b, c, d) (-(int)MKTAG(...

博客 7675

ffmpeg读取文件时长

主要介绍的函数:estimate_timings,estimate_timings_from_pts,update_stream_timings.estimate_timings static void estimate_timings(AVFormatContext *ic, int64_t old_offset){    int64_t file_size;    /* get the fil...

evsqiezi 4455

ffmpeg源码分析:av_read_frame()

ffmpeg中的av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。 av_read_frame()的声明位于libavformat\avformat.h,如下所示。 /** * Return the next frame of a stream. * This funct...

yangguoyu8023的博客 1681

ffmpeg 推流报错 Error writing trailer of rtmp:// End of file

推流一段时间以后就会报这个错误,有没有人知道怎么解决呢?

越努力,越幸运 1652

FFmpeg 从seek闪退问题分析ts时长duration计算方法

背景HTTP点播seek闪退分析FFmpeg解析ts duration流程分析解决思路 背景 FFmpeg是非常优秀的开源框架,在使用其进行二次开发及适配的过程中,难免会遇到各种各样的问题。 这次要分析的问题是基于FFmpeg的播放器在HTTP点播seek的时候,出现闪退,从而引申出FFmpeg中ts流duration计算方法的分析。 HTTP点播seek闪退分析 从日志看,发现seek的位置是...

myvest的专栏 3635
上一篇: 开源webrtc服务器对比
下一篇: 音视频同步 ffmpeg 推流
终成一个大象
博客等级 码龄12年 1万+粉丝 125原创
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值