草庐IT

c++ - 使用 ffmpeg 解码 Wma

我是ffmpeg的新手,我尝试使用api-example.c来解码wma文件。但是当我运行程序时,它给了我一个错误提示“frame_len溢出”。有谁知道如何解决这个错误?这是我的代码:extern"C"{#include#include"../libavcodec/avcodec.h"#include}#include#include#include#include#defineINBUF_SIZE4096#defineAUDIO_INBUF_SIZE20480#defineAUDIO_REFILL_THRESH4096intmain(intargc,char*argv[]){avc

c++ - FFMpeg 将 RGB 图像编码为 H264

我正在开发一个DirectShow过滤器,它有2个输入引脚(1个用于音频,1个用于视频)。我正在使用FFMpeg的libavcodec/libavformat/libavutil将视频编码为H264,将音频编码为AAC,并使用RTP进行复用/流式传输。到目前为止,我能够使用libavcodec正确编码视频和音频,但现在我看到FFMpeg似乎也支持RTPmuxing。不幸的是,我找不到任何显示如何执行H264编码和RTP多路复用的示例代码。有人知道好的sample吗? 最佳答案 尝试检查HandBrake中的代码.具体来说,这个文件m

c++ - FFmpeg av_read_frame 和最大数据包大小

是否有可能检测到av_read_frame()可以读取的最大数据包(AVpacket)大小? 最佳答案 我最近也在找同样的东西。似乎av_read_frame在内部为每个编解码器/格式调用编解码器特定的read_packet函数。这反过来为每个数据包分配内存并根据编解码器/格式构成的最大限制释放它。因此,只要您有内存来支持(无效)流,您就应该没问题,并且限制特定于编解码器/格式解码器。[您可以找到在AVInputFormat中为每种格式定义的函数,如.read_packet]。 关于c+

c++ - 如何使用 libav* 将 KLV 数据包编码为 H.264 视频

目前我正在使用libav*对H.264视频进行编码。我想将KLVPackets添加到比特流,但不知道在哪里实现它。avcodec中有一个结构,但我不确定如何将它写入帧元数据typedefstruct{UIDkey;int64_toffset;uint64_tlength;}KLVPacket;当前FFMPEG代码(只留下相关代码):av_register_all();pOutputFormat=av_guess_format(NULL,fileName,NULL);pFormatCtx=avformat_alloc_context();pVideoStream=av_new_strea

c++ - 如何用ffmpeg按毫秒搜索?

我正在尝试使用ffmpeg以毫秒为单位搜索视频。我一直在尝试使用thisquestion中的代码,它使用avformat_seek_file(我将它与-1一起用于流编号和AVSEEK_FLAG_ANY标志)。调用之后,我尝试读取下一帧,即:if(av_read_frame(fmt_ctx,&pkt)>=0){intret=0;if(pkt.stream_index==video_stream_idx){/*decodevideoframe*/ret=avcodec_decode_video2(video_dec_ctx,frame,got_frame,&pkt);if(ret但是,检索

c++ - FFmpeg 库 : Exactly constant segment duration for HLS

我们正在使用FFmpeg库git-ee94362libavformatv55.2.100。我们的目的是使用HLS将两个流(视频和音频)混合到M3U8播放列表中。此外,我们希望每个TS片段文件的持续时间正好为3.0秒(帧速率为25fps)。为了实现它,我们尝试设置几个选项和属性,即:-分段时间-keyint_min-scenechange_threshold-gop_size-force_key_frames。我们的代码如下所示:AVCodecContext*codec_ctx=NULL;AVFormatContext*ofmt_ctx=NULL;intret=0,gopSize=(in

c++ - ffmpeg sws_scale 得到了从 YUV420P 到 RGB24 的失真图像

尝试使用将YUV420p转换为RGB24时,图像失真sws_scale.代码:ret=avcodec_decode_video2(video_dec_ctx,frame,got_frame,&pkt);if(retcoded_picture_number,"#"/*av_ts2timestr(frame->pts,&video_dec_ctx->time_base)*/);/*copydecodedframetodestinationbuffer:*thisisrequiredsincerawvideoexpectsnonaligneddata*/av_image_copy(video

c++ - FFmpeg av_read_frame 返回大小但没有数据?

我已经编写了一些C代码来访问ffmpeg并将其包装在C++/CLI(.NET管理)类中。该程序获取实时视频流并提取帧并将它们转换为PNG文件。不幸的是,保存到磁盘的图像总是黑色的(在Notepad++中打开它们显示它们充满了空值)。我正在使用程序集aformat/codec-55.dll以及开发头文件和库从ffmpeg-20131120-git-e502783-win64-dev进行编译。整个项目是使用ManagedC++(Cpp/cli).NET4.0for64-bit编译的。经过一些调查,问题似乎是av_read_frame正确填充了AVPacket->size值,但AVPAcke

c++ - OpenCV 和 GoPro - VideoCapture 流中的空帧

我有一台连接到视频采集卡(AverMediaGameBroadcasterHD)的GoProHero3+(黑色)。我只是想在OpenCV中获取视频流。使用罗技网络摄像头没有任何问题。使用的代码如下。VideoCapturecap;cap.open(0);waitKey(300);//cap.set(CV_CAP_PROP_FRAME_WIDTH,1280);//cap.set(CV_CAP_PROP_FRAME_HEIGHT,720);if(cap.isOpened()){cout对于GoPro,会发生以下情况:OpenCV能够打开VideoCapture(“已识别摄像头”)但无法读取

c++ - 编码解码器 YUV 到 RGB

我正在尝试使用libswscale将YUV帧转换为RGB。这是我的代码:AVFrame*RGBFrame;SwsContext*ConversionContext;ConversionContext=sws_getCachedContext(NULL,FrameWidth,FrameHeight,AV_PIX_FMT_YUV420P,FrameWidth,FrameHeight,AV_PIX_FMT_RGB24,SWS_BILINEAR,0,0,0);RGBFrame=av_frame_alloc();avpicture_fill((AVPicture*)RGBFrame,&FillV