在Mac上使用clang在FFMPEG项目中包含<libavformat/avformat.h>的错误
我在运行$ cc -v playground/remuxing.c Apple LLVM version 9.0.0 (clang-900.0.39.2) Target: x86_64-apple-darwin16.7.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin "/Library/Developer/CommandLineTools/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.12.0 -Wdeprecat ed-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-v erifier -discard-value-names -main-file-name remuxing
24 2024-04-10
编程技术问答社区
将Rawvideo转为mp4容器
如何将RawVideo编解码器流式传输到MP4容器?错误是Could not find tag for codec rawvideo in stream #0, codec not currently supported in container. URL为video=Logitech HD Webcam C270,格式为dshow.文件名是说out.mp4 AVFormatContext* pInputFmtCtx = avformat_alloc_context(); AVInputFormat* inputFormat = av_find_input_format(Format); avformat_open_input(&pInputFmtCtx, url, inputFormat, null); if (avformat_find_stream_info(pInputFmtCtx, null) != -1) ... find stream index AVCod
30 2024-04-09
编程技术问答社区
FFMPEG使用sws_scale将YCbCr转换为RGB
我正在学习如何从此sws_scale(sws_ctx,(unsigned char const * const *)(frame->data),(frame->linesize), 0,codecContext->height,pFrameRGB->data,pFrameRGB->linesize); 这是我程序的结构 #include #include #include #include #include #include #include #include #include //gcc a.c -o a.o `pkg-config --cflags --libs libavfor
20 2024-04-09
编程技术问答社区
使用libswresample对音频进行重采样,从48000到44100
我正在尝试使用libswresample api将解码的音频框架从48kHz重新置于44kHz.我拥有的代码如下: // 'frame' is the original decoded audio frame AVFrame *output_frame = av_frame_alloc(); // Without this, there is no sound at all at the output (PTS stuff I guess) av_frame_copy_props(output_frame, frame); output_frame->channel_layout = audioStream->codec->channel_layout; output_frame->sample_rate = audioStream->codec->sample_rate; output_frame->format = audioStream->codec->sample_fm
22 2024-04-09
编程技术问答社区
我在哪里可以找到libav、ffmpeg等的现代教程?
我想在C中制作一个快速程序,该程序将打开视频,将每个帧保存为PPM,然后转储运动向量.我能找到的所有教程均来自十年前,并致电折旧或不存在的功能. 是否有任何良好的在线资源,网站,视频或教科书涵盖了做这类事情的现代方法? 解决方案 我已经与FFMPEG和Libav合作了几年,而且还没有发现最近的API级教程.有时,我只需要潜入来源即可弄清楚发生了什么以及如何使用它.此外,阅读CLI程序的来源(使用基础库)也可以提供信息. 实际上, ffmpeg 建议您仅读取源代码,即实际的OSS项目或其示例. 退后一步,您可以考虑 opencv ,该已被证明是有据可查的( books 存在!),并且具有更轻松的API.最后,ppm是一种简单的格式,您可能可以编写一个50行函数来自行保存像素,我找到了一个运动提取程序在这里. 其他解决方案 #include #include #include
42 2024-04-08
编程技术问答社区
FFmpeg:建立C代码的例子
我使用此链接配置并编译了FFMPEG库: 现在,我正在尝试构建FFMPEG提供的示例C代码: 示例 但是,当我运行进行安装检查或进行安装时(由/example/readme建议),我会收到这种消息: make:***没有规则来制作目标'/doc/示例/读数,需要 "安装示例".停止. 我认为这可能是由于规则不采用正确的makefile格式(我不确定它们是指读书人).我应该如何解决此问题并编译示例代码?我试图找到有关此的解决方案,但似乎没有太多在线信息. 谢谢. 解决方案 运行./configure && make -j4 examples在FFMPEG源目录中,然后以doc/examples查看编译示例. 需要make和pkg-config. 在ffmpeg源目录中删除编译示例make examplesclean 其他解决方案 nasm/Yasm找不到或太老.使用-disable-x86 asm用于残废的构建.如果您认为配置犯了一个错误
16 2024-04-07
编程技术问答社区
如何关闭libavformat的错误信息?
默认情况下,libavformat将错误消息写入stderr,例如: Estimating duration from bitrate, this may be inaccurate 如何将其关闭?或者更好的是,将其送到我自己的整洁伐木功能? 编辑:将stderr重定向到其他地方是不可接受的,因为我需要它出于其他记录目的,我只希望libavformat不写它. 解决方案 浏览代码,看来您可以通过为av_log函数编写自己的回调功能来更改行为. 从 libavutilililir "> libavutilililiL ">/log.h : 如果级别小于或相等,将指定的消息发送到日志 到当前的AV_LOG_LEVEL.默认情况下,所有记录消息均发送到 stderr. 可以通过设置其他AV_VLOG回调来改变此行为 功能. API提供了一个允许您定义自己的回调的函数: void av_log_set_callback(void (*)(void
18 2024-04-07
编程技术问答社区
如何用libavcodec/x264对h.264进行编码?
我正在尝试使用libavcodec/libavformat编码视频.音频效果很好,但是当我尝试编码视频时,我会收到以下错误: [libx264 @ 0x10182a000]broken ffmpeg default settings detected [libx264 @ 0x10182a000]use an encoding preset (vpre) 易于使用命令行FFMPEG修复,但我正在尝试在C中进行此操作. 我的选择是 AVStream *pVideoOutStream = av_new_stream(pOutFormatCtx, 0); AVCodecContext *pVideoOutCodecCtx = pVideoOutStream->codec; pVideoOutCodecCtx->codec_id = CODEC_ID_H264; pVideoOutCodecCtx->codec_type = C
14 2024-04-07
编程技术问答社区
在FFmpeg/LibAV中设置RTSP/UDP缓冲区大小
注意:我知道ffmpeg和libav是不同的图书馆.这是两个共同的问题. 免责声明:/a>标记为回答,但实际上没有提供适当的解决方案. UDP缓冲区大小不足会导致几个高分辨率视频流的破裂流.在libav/ffmpeg中,可以通过附加一些 options(buffer_size)对此. 但是,对于RTSP URL,这是不支持.. . 这些是我发现的唯一解决方案: 重建ffmpeg/libav在使用 nasty Hack 所需的价值,通过施放一些私人结构. 使用不同的解码库(提出了有关上述有关的解决方案,因此问题 ). 这些实际上都不是解决方案.据我发现,应该有可能使用API​​的 AVOptions AVOptions 找到并设置此值.否则, avdictionary . 很难在Libav或ffmpeg的整个文档中找到如何设置这些. 更新: 借助Libav Developer @lu_zero : 添加一个buffer_size
100 2024-04-04
编程技术问答社区
如何将CMSampleBuffer/UIImage转换成ffmpeg的AVPicture?
我正在尝试使用FFMPEG的Libav*库将iPhone的相机帧编码为H.264视频.我在这中发现了 苹果的文章我将其转换为ffmpeg的avpicture? 谢谢. 解决方案 回答我自己的问题: CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CVPixelBufferLockBaseAddress(pixelBuffer, 0); // access the data int width = CVPixelBufferGetWidth(pixelBuffer); int height = CVPixelBufferGetHeight(pixelBuffer); unsigned char *rawPixelBase = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer); // Do someth
18 2024-03-21
编程技术问答社区
复制avcodec参数
我正在尝试使用libav将MP4文件转换为MP3文件.基本上试图实现ffmpeg -i filename.mp4 filename.mp3的作用.我已经找到了 this 官方示例.但是,当我使用输入MP4和输出mp3运行它时,我会发现错误: 无效的音频流.恰好需要一个mp3音频流. 我根本不熟悉这个库,但我认为我将问题缩小到 this 行: ret = avcodec_parameters_copy(out_stream->codecpar, in_codecpar); 似乎可以复制视频文件的所有流,但是我们只需要一个用于MP3文件吗?我不知道.似乎没有一个功能仅复制与音频相关的参数.我检查了来源,avcodec_parameters_copy做一个简单的memcpy. 问题: 这是实际问题吗? 我该如何解决? 我是否在正确的轨道上实现从视频文件中提取音频的目标?我已经看过 this 问题(以及其他类似问题/15876974/10147399"> t
24 2024-03-19
编程技术问答社区
我怎样才能确定一个编解码器/容器组合是否与FFmpeg兼容?
我正在考虑重新装卸一些容器和视频,以便我提取最好的第一个音频流,然后将其存储在一个新容器中,例如仅存在音频流. FFMPEG的输出上下文是如此: AVFormatContext* output_context = NULL; avformat_alloc_output_context2( &output_context, NULL, "mp4", NULL ); 我有可接受的输出的入围名单,例如MP4,M4A等…本质上是Apple Audio File Services可读的MP4: kAudioFileAIFFType = 'AIFF', kAudioFileAIFCType = 'AIFC', kAudioFileWAVEType = 'WAVE', kAudioFileSoundDesigner2Type = 'Sd2f', kAudioFileNextType
14 2024-03-19
编程技术问答社区
使用libav*库进行FFMPEG音频转码
我正在使用FFMPEG库编写音频转编码应用程序. 这是我的代码 /* * File: main.cpp * Author: vinod * Compile with "g++ -std=c++11 -o audiotranscode main.cpp -lavformat -lavcodec -lavutil -lavfilter" * */ #if !defined PRId64 || PRI_MACROS_BROKEN #undef PRId64 #define PRId64 "lld" #endif #define __STDC_FORMAT_MACROS #ifdef __cplusplus extern "C" { #endif #include #include #
46 2024-03-19
编程技术问答社区
AV_SAMPLE_FMT_S16P和AV_SAMPLE_FMT_S16之间有什么区别?
当您从av_sample_fmt_s16p转换为av_sample_fmt_s16时会发生什么? AVFrame结构将如何包含平面和非平面数据? 解决方案 AV_SAMPLE_FMT_S16P是平面签名的16位音频,即每个样本的2个字节,对于AV_SAMPLE_FMT_S16> AV_SAMPLE_FMT_S16. 唯一的区别是每个通道的AV_SAMPLE_FMT_S16样本中都交错,即如果您有两个通道音频,则样品缓冲区看起来像 C1 C2 C1 C2 C1 C2 C1 C2 ... 其中c1是通道1的样本,c2是通道2的样品. 对于一个平面音频框架,您将拥有 之类的东西 C1 C1 C1 C1 .... C2 C2 C2 C2 .. 现在如何存储在AvFrame中: 对于平面音频: 数据[i]将包含通道I的数据(假设通道0是第一个通道). 但是,如果您的频道大于8,则可以在AVFrame的Extended_Data属性中找
16 2024-03-19
编程技术问答社区
ffmpeg、libav和avconv之间有什么异同?
当我在ubuntu上运行ffmpeg时,它显示了: $ ffmpeg ffmpeg version v0.8, Copyright (c) 2000-2011 the Libav developers built on Feb 28 2012 13:27:36 with gcc 4.6.1 This program is not developed anymore and is only provided for compatibility. Use avconv instead (see Changelog for the list of incompatible changes). 或显示(取决于Ubuntu版本): $ ffmpeg ffmpeg version 0.8.5-6:0.8.5-0ubuntu0.12.10.1, Copyright (c) 2000-2012 the Libav developers built on Jan 24 2013
26 2024-03-19
编程技术问答社区
如何将AV_SAMPLE_FMT_FLTP的采样率转换为AV_SAMPLE_FMT_S16?
我使用avcodec_decode_audio3使用FFMPEG将AAC解码为PCM.但是,它将解码为av_sample_fmt_fltp示例格式(PCM 32bit float Planar),我需要AV_Sample_fmt_s16(PCM 16位签名-S16LE). 我知道ffmpeg可以使用-sample_fmt轻松完成此操作.我想对代码做同样的事情,但我仍然无法弄清楚. audio_resample不起作用:错误消息失败:....转换失败. 解决方案 编辑2013年4月9日:弄清楚如何使用libswresample来做到这一点... ! 在过去2 - 3年的某个时候,FFMPEG的AAC解码器的输出格式从AV_Sample_fmt_s16更改为av_sample_fmt_fltp.这意味着每个音频通道都有自己的缓冲区,每个样本值是一个32位浮点值,从-1.0缩放到+1.0. 使用av_sample_fmt_s16数据中的数据是单个缓冲区,样品交
38 2024-02-17
编程技术问答社区
在xcode 4中使用libav*库构建时,出现非法文本重定向到non_lazy_ptr的错误。
我正在尝试构建一个简单的应用程序,该应用程序使用ffmpeg的libav*库中的xcode 4中的库并获取以下错误: ld:非法文本从/ffmpeg/temp/ffmpeg-builduni/lib/lib/libavcodec.a(ac3.o)in_ff_ac3_bit_bit_bit_alloc_calc_calc_psd insharchecture I386 我已经尝试运行ranlib -c libavcodec.a来解决此问题,但没有任何问题. 还有一件事:我的libav*库是脂肪二进制(i386 + x86_64). 有什么想法是什么? 解决方案 我有相同的错误.最后,我得到了解决方案 http://lists.apple.com/archives/archives/unix-porting/2008/jan/msg00027.html 只需添加其他链接标志: -read_only_relocs suppress *说明 * 两个汇编
8 2023-12-20
编程技术问答社区
ffmpeg退出状态 -1094995529
我正在开发一个应用程序,该应用程序使在Windows上,返回-1094995529> 的非传统退出状态的调用.此退出状态始终如一地给出,并且有一些次要讨论 为什么给出了这个值,在哪里记录了?我可以期望在允许退出状态更受限的Unix机器上这种状态会有所不同吗? 解决方案 来自ffmpeg的错误代码(来自avutil的error.h): 事实证明您指定的值是: #define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') -1094995529变为-0x41444e49,当您在ACSII中查看这些字母时,0x41 ='a',0x44 ='d',0x4e ='n和0x49 ='i'.由于宏/等,事情被逆转了,因此从#Define片段中可以看到的Adni成为Inda,是Averror_invaliddata定义的fferrtag('i'i','n','d',a'). 其余的错误代码都在该文件中,我在此处粘贴
14 2023-12-05
编程技术问答社区
Webm(VP8/Opus)文件的读取和回写
我正在尝试在C/C ++中开发WEBRTC模拟器.对于媒体处理,我计划使用 libav .我正在考虑以下步骤,以实现两个WEBRTC模拟器之间的媒体交换.假设我有两个WebRTC模拟器 a 和 b . 使用 av_read_frame api. 我假设我会得到编码的媒体(音频/视频)数据,我在这里更正吗? 将编码的媒体数据通过UDP插座发送到模拟器 b . 模拟器 b 作为RTP数据包接收UDP插座中的媒体数据. 模拟器 b 从刚接收的RTP数据包中提取音频/视频数据. 我假设在模拟器上提取的媒体数据 b 仅是编码数据(我在此处更正).我不想解码它.我想将其写入文件.稍后,我将播放文件以检查我是否做对了. 为了简化此问题,可以取出UDP套接字部分.然后,我的问题减少了从WebM输入文件中读取数据,获取编码媒体,准备数据包并使用 av_interleaved_write_frame_frame 或任何其他适当的API写入输出文件.我想使用libav做的所有这些事情.
54 2023-12-01
编程技术问答社区
将AVPackets混合成mp4文件
我正在开发一个工具,该工具从网络接收H.264实时流(发件人是硬件编码器),缓冲最后X分钟,并在触发时创建最后一个X分钟的视频文件. 我的工具能够接收实时流,还可以通过boost :: Serialization来缓冲Avpackets.此外,我能够加载缓冲avpackets. 但是,当我尝试创建/mux带有加载的AVPacket的视频文件(MP4)时,会在MP4文件或MP4-Header中出现错误. 我可以创建一个MP4文件,还可以使用Av_interleaved_write_frame()将数据包写入文件. MP4文件也具有合理的尺寸.因此,它接缝了将Avpacket写入文件. 但是,当我尝试使用像VLC这样的播放器打开MP4文件时,视频无法播放.播放器提供了一个错误:标头不正确,并且没有播放任何帧.但是我将带有writeheader()函数的标题写入avformatcontext. 我想原因是AvformatContext无法正确初始化,但以FFMPEG/LIB
32 2023-11-18
编程技术问答社区