FFmpeg avformat_open_input() 函数返回错误protocol not found解决方法(实测有效!附简单FFMPEG的编解码流程)

简介: 我个人出现这个错误的时候是在打开文件时报的错误,开始以为我需要加上资源文件,那样QT确实能检测到文件的存在,但是在Debug中他是检测不到这个文件的。

我个人出现这个错误的时候是在打开文件时报的错误,开始以为我需要加上资源文件,那样QT确实能检测到文件的存在,但是在Debug中他是检测不到这个文件的。

解决方法

1. 忘加av_register_all();

2.在./configure时在后面加上 --enable-protocols

3.把视频文件放在你的Debug构建目录中,如果是Relese就放在Relese的构建目录中

image.gif 编辑

FFmpeg的简单编解码流程:

FFmpeg是一个开源的多媒体处理工具包,广泛应用于音视频的编解码、转码、流处理等多种场景。其编解码流程大致可以分为以下几个步骤:

1. 初始化与注册

  • 初始化FFmpeg:使用av_register_all()函数注册所有的编解码器、解复用器、复用器等组件。虽然在FFmpeg 3.0之后这个函数被标记为过时,但对简单应用来说仍可使用。推荐使用更精细的组件注册方法,如针对特定容器格式或编解码器。
  • 创建上下文:根据任务的不同,可能需要创建AVFormatContext(用于处理媒体容器)、AVCodecContext(用于编解码操作)等上下文结构。

2. 打开输入输出

  • 打开输入文件:使用avformat_open_input()函数打开输入文件,然后通过avformat_find_stream_info()获取输入文件的详细信息,包括流的数量、类型等。
  • 寻找流和编解码器:遍历输入文件中的流,使用avcodec_find_decoder()根据流的编解码器ID找到对应的解码器。如果是编码流程,则寻找编码器。
  • 创建编解码上下文:为每个需要处理的流创建一个AVCodecContext,并使用avcodec_open2()打开编解码器。

3. 解复用(Demuxing)

  • 读取数据包:通过av_read_frame()从输入文件中读取AVPacket,这些数据包可能包含视频帧、音频帧或其它数据。
  • 分配帧:为每个解码器创建AVFrame,用于存储解码后的原始数据。
  • 发送数据包到解码器:使用avcodec_send_packet()将AVPacket送入解码器进行解码。

4. 解码(Decoding)

  • 接收解码帧:调用avcodec_receive_frame()从解码器接收已解码的AVFrame。这一步可能需要循环调用,直到所有数据包被处理完或返回特定错误码指示没有更多帧。

5. (可选)处理解码后的数据

  • 缩放、滤镜、转码:根据需要,可以在这一步对解码后的数据进行处理,如图像缩放、添加滤镜效果或进行再次编码(转码)。

6. (编码流程)编码(Encoding)

  • 如果是编码流程,解码后的数据或原始数据将被送入编码器,通过类似的过程进行编码,最终生成编码后的AVPacket。

7. 复用(Muxing)

  • 创建输出上下文:使用avformat_alloc_output_context2()创建输出上下文,根据输出格式和文件名确定。
  • 添加流:为输出上下文添加流,使用avformat_new_stream(),并将编解码上下文关联到流上。
  • 写入头部信息:调用avformat_write_header()写入输出文件的头部信息。
  • 封装AVPacket:将编码后的AVPacket通过av_interleaved_write_frame()av_write_frame()写入输出文件。

8. 清理

  • 关闭上下文:完成所有操作后,使用avcodec_close()关闭编解码上下文,avformat_close_input()avformat_close_output()关闭输入输出上下文,释放所有资源。

希望可以帮到大家~

相关文章
|
2月前
|
Web App开发 编解码 安全
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
309 4
|
2月前
|
算法 数据处理 开发者
FFmpeg库的使用与深度解析:解码音频流流程
FFmpeg库的使用与深度解析:解码音频流流程
53 0
|
2月前
|
存储 编解码 vr&ar
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
277 0
|
17天前
|
存储
FFmpeg的流程
FFmpeg的流程
|
1月前
|
Linux 编解码 Python
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
AV1是一种高效免费的视频编码标准,由AOM联盟制定,相比H.265压缩率提升约27%。各大流媒体平台倾向使用AV1。本文介绍了如何在Linux环境下为FFmpeg集成AV1编解码库libaom、libdav1d和libsvtav1。涉及下载源码、配置、编译和安装步骤,包括设置环境变量以启用这三个库。
55 3
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
|
19天前
【已解决】ffmpy3.FFExecutableNotFoundError: Executable ‘ffmpeg‘ not found
【已解决】ffmpy3.FFExecutableNotFoundError: Executable ‘ffmpeg‘ not found
12 1
|
17天前
FFMpeg解复用流程
FFMpeg解复用流程
|
2月前
|
编解码 算法 C++
【ffmpeg 基础函数】详解FFmpeg中的av_packet_ref函数
【ffmpeg 基础函数】详解FFmpeg中的av_packet_ref函数
30 0
|
2月前
|
存储 编解码 缓存
【ffmpeg 移动视频流位置】深入理解FFmpeg:精细探讨seek操作和编解码上下文
【ffmpeg 移动视频流位置】深入理解FFmpeg:精细探讨seek操作和编解码上下文
101 0
|
7天前
|
编解码
FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作
《FFmpeg开发实战》书中3.4.3节讲解如何将H.264流封装成MP4。H.264流通常以SPS→PPS→IDR帧开始,这一说法通过雷霄骅的H264分析器得到验证。分析器能解析H.264文件但不支持MP4。ZLMediaKit服务器在遇到I帧时会自动插入SPS和PPS配置帧,确保流符合标准格式。若缺少这些帧,客户端拉流时会报错。FFmpeg开发实战:从零基础到短视频上线》书中提供了更多FFmpeg开发细节。
21 0
FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作

热门文章

最新文章