![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ffmpeg
文章平均质量分 54
熊猫Ben
窥
展开
-
[记录一个bug]ffmpeg转码时间戳-伪代码版流程要点小记[已解决]
ffmpeg调试方法上代码(伪代码)(1)直接看transcode_step()(2)分解输入-process_input()(3)分解输出-reap_filters()解决问题时间戳日志示例原创 2021-10-22 21:49:45 · 1460 阅读 · 0 评论 -
关于硬编码在每一帧前都会出现SEI的问题
在硬编码的时候,会在每一帧前都有一个SEI 00 00 00 01 06用命令行测试也还是会有SEI,主要是比较占我使用的空间大小,影响我码率吧,二来也是看起来不爽。所以想把他去掉,其实不去掉好像也没啥影响。而测试了软编码没有,也确定了硬编码是可以不出现SEI的,所以找找源码到底是哪里出问题,怎么去掉SEI。当然是看nvenc.c了一看是以为是ff_nvenc_send_frame里的a53_cc导致的,设置为0之后仍不生效。int ff_nvenc_send_frame(...原创 2021-09-26 17:10:22 · 1275 阅读 · 0 评论 -
关于保存h264裸流没有SPS/PPS
日常我们测试的时候,都喜欢在推流前保存h264裸流进行分析,但是这里将h264在H264BSAnalyzer分析的时候,有的是分析不出来的。这个是因为如果在AVCodecContext中设置了AV_CODEC_FLAG_GLOBAL_HEADER标志,对于生成的视频文件(如mp4),在windows操作系统下,并以图标的方式查看该视频文件时,视频文件的图标将是视频文件的第一帧,从而起到预览的作用该变量主要出现在该函数的以下两个地方1 if (avctx->flags & AV_CO...原创 2021-09-26 16:56:36 · 1277 阅读 · 1 评论 -
[记录一个bug]硬编解出现I帧不对齐的情况[已解决]
在硬编解码的时候画质十分模糊,后面解析h264出来看,发现I帧不像我设置那样去对齐。我设置gop=50,但是出来的gop不一定是501、反复确认了参数是没问题的2、将muxing的生成frame的功能替换我的解码帧3、将代码抽象为demo,对比测试muxing百思不得其解,办法总比困难多,最终测试了几天,把缩放改为了sws后,I帧间隔居然正常了。终于可以把问题归到硬缩放里了。最终经过提醒,发现是对keyframe的设置有问题。由于我的软缩放代码是这样写的:sws_sca..原创 2021-09-26 16:49:40 · 306 阅读 · 0 评论 -
ffmpeg视频蒙版,在文字里显示视频
我这里还尝试了视频蒙版的功能,即在文字中显示视频,哈哈,特别好玩。可以查看我上一篇文章学习ffmpeg斜向倾斜文字水印功能,命令行实现,铺满全屏,可变文字原创 2021-08-26 11:50:00 · 1052 阅读 · 0 评论 -
ffmpeg斜向倾斜文字水印功能,命令行实现,铺满全屏,可变文字
最近要做一个视频叠加文字水印的功能,要求是水印斜向铺满全屏,并且文字水印是用户的名字即可变的。这个首先想到的是ffmpeg通过命令行自然是可完成的。发现使用滤镜的drawtext字段可以实现叠加文字,然而该字段drawtext并没有可以旋转角度的参数,这就十分头疼了。百度一番无果后,只能想到从别的地方生成一张做好斜向文字水印的图片,然后再叠加到视频上就可以,但是这样挺麻烦的,包括后期图片的传输控制等。但是经过一番研究之后,终于完成所需效果,先放我的成果图出来。(PS:这里...原创 2021-08-25 18:25:07 · 3795 阅读 · 21 评论 -
[记录一个bug]ffmpeg加入timestamp.h编译出错[已解决]
由于代码新增了av_ts2str()函数,提示需要包含timestamp.h文件,添加之后报错error: expected ‘)’ before ‘PRId64’原来这个宏定义给c用的,C++要用它,就要定义一个__STDC_FORMAT_MACROS宏显示打开它。c++使用PRID64,需要两步:包含头文件:<inttypes.h>定义宏:#define __STDC_FORMAT_MACROS,也可以通过编译时加-D__STDC_FORMAT_MACROS,或者在包含文原创 2021-08-23 10:48:19 · 1118 阅读 · 0 评论 -
分享关于如何检测视频流码率
由于项目需要检测媒体流的码率,有很多方法,但是不建议使用ffprobe进行检测root:~# ffprobe -v quiet -show_streams 1.flv|grep bit_ratebit_rate=128000max_bit_rate=N/A有2点原因1、ffprobe检测rtmp、http等流不一定能检测出码率。因为通过一些直播服务器,可能该数据会丢失。2、检测的码率是设置在媒体头的数据,不一定是真实码率。比如对推流参数的调整,即使ffprobe检测出来的是128K,原创 2021-08-07 16:36:39 · 6134 阅读 · 0 评论 -
编译最新Nvidia Video_Codec_SDK 11.0
编译Nvidia Video_Codec_SDK官方下载地址https://developer.nvidia.com/nvidia-video-codec-sdk/download下载需要注册会员,我已经下好上传了方便大家5积分自取=>解压后需要编译,cmake编译的时候有一些依赖库(centos可能参考这篇比较好https://blog.csdn.net/quantum7/article/details/106954231)Perhaps you should add t...原创 2021-07-31 16:27:13 · 2660 阅读 · 3 评论 -
[记录一个bug]ffmpeg 解码错误avcodec_send_packet AVERROR_EOF, Resource temporarily unavailable[已解决]
之前输入源是一个摄像机rtsp流,所以不存在这个问题。这次输入源换成一个文件循环推流的rtmp,在解码一段时间后出现解码失败的问题,而且不会恢复正常,一直错误下去avcodec_send_packet error AVERROR_EOF, Resource temporarily unavailable最终解决方法是在avcodec_receive_frame 做一个while循环,把里面的多余的帧取出来。估计是因为这个文件从尾循环到头,然后帧出现未知的问题所以需要这样处理吧。见过很多例.原创 2021-07-23 14:53:26 · 4161 阅读 · 4 评论 -
[记录一个bug]ffmpeg avfilter_graph_config段错误崩溃的问题[已解决]
avfilter前面的初始化都没问题,结果在avfilter_graph_config就崩溃了。找了好久,最终排查到了av_opt_set_int_list 设置buffersink_ctx的pix_fmt有问题,虽然在这里是没报错的我在里面是这样写的enum AVPixelFormat pix_fmts=AV_PIX_FMT_YUV420P;av_opt_set_int_list(buffersink_ctx, "pix_fmts", &pix_fmts,AV_PIX_FMT_NO原创 2021-07-22 11:37:24 · 962 阅读 · 0 评论 -
[记录一个bug]ffmpeg从GPU拷贝至CPU编码崩溃及Input picture width (x) is greater than stride (0)[已解决]
从显卡拷贝到CPU出现了一个错误,导致编码失败[libx264 @ 0x7fff940043c0] Input picture width (176) is greater than stride (0)思考了一下,本来从CPU的resize 里传递过来的frame是可以的过来正常编码的但是由于这次resize改用了GPU的,所以出现了这个问题。百度了一下,应该是某处参数不对,该初始化的都初始化了,还是没找到问题,思考了一下pix_fmt的传递我这次的传递的想法是这样的解码...原创 2021-07-22 11:04:39 · 1856 阅读 · 0 评论 -
FFmpeg 滤镜AVFilter编程——简单滤镜
一、认识滤镜ffmpeg里面的滤镜十分重要,功能也十分强大,除了我们所谓的滤镜,还有贴图、伸缩变形、拆解合并等功能。ffmpeg二、如何使用滤镜原创 2021-06-02 22:28:37 · 2457 阅读 · 3 评论 -
[问题](更新)如何自己打时间戳?
推流的时候,如果视频数据没有时间戳,如何自己打时间戳。条件就限定只有视频流,推流rtmp。待解决中,如果有人知道可以评论解答参考:音视频同步(播放)原理-朱伟刚FFMPEG音视频同步-音视频实时采集并编码推流-优化版本-qinyi_style音视频同步原理及实现- wusc'blogFFmpeg简易播放器的实现5-音视频同步-叶余ffplay源码分析4-音视频同步-叶余FFmpeg时间戳详解-叶余FFmpeg流媒体处理-收流与推流-叶余...原创 2020-11-26 10:39:06 · 643 阅读 · 5 评论 -
[记录一个bug]关于ffmpeg的av_interleaved_write_frame出现broken pipe/EOF 等问题[已解决]
最近在一次高并发测试中发现av_interleaved_write_frame经常返回 broken pipe /EOF /unknown errro 这种问题。运行的成功数是正常的一半,而且基本稳定在那个数值。跟阿里云也沟通过了,反馈是阿里云直播10秒没有拿到数据就主动关闭,这些都是客户端引起的问题导致服务端主动关闭的。像broken pipe,就是某端已经关闭这个链路,然后你再去往这个链路里送东西就会报这个错。但这个程序在别的电脑上运行没问题,而且推到本地直播服务器也没问题啊。后来我就把每.原创 2020-07-25 15:44:51 · 7552 阅读 · 11 评论 -
[记录一个bug]关于运行ffmpeg with cuda出错问题:Driver does not support the required nvenc API version..... [已解决]
当我在linux下编译好ffmpeg with cuda后,运行ffmpeg是可以的,但是一旦要开始转码,就报错Driver does not support the required nvenc API version. Required: 10.0 Found: 9.1查阅度娘https://blog.csdn.net/A199222/article/details/103233935后好像一般都说是:nv-codec-headers的版本是10.0,但是Nvidia driver版本只支原创 2020-07-25 15:32:38 · 7217 阅读 · 7 评论 -
[记录一个bug]av_hwdevice_ctx_create出现Cannot allocate memory(附带库运行时路径)[已解决]
新写的程序里调用ffmpeg的av_hwdevice_ctx_create()这个函数,出现Cannot allocate memory。但是另个程序一样的代码,居然是成功的。反复检查之后无果,就跳出去查了一下,看到一个问答:Have you tried to use ffmpg executables with the same libs that you using when you run the app?Have you tried to use ffmpg executables原创 2020-07-09 15:14:30 · 2829 阅读 · 1 评论 -
avio_open 阻塞很久且失败 Failed to resolve hostname xxx.xxx.com: Temporary failure in name resolu
最近编写ffmpeg推流时,采用到域名进行推流,发现用域名经常会在avio_open 里阻塞很久,而且失败率也很高。而用ip则不会。失败的话会出现:[tcp @ 0x7f5d24045000] Failed to resolve hostname xxx.xxx.com: Temporary failure in name resolution[rtmp @ 0x7f5d24045f40] Cannot open connection tcp://xxx.xxx.com:1935搜了很多关于原创 2020-05-09 14:19:07 · 2677 阅读 · 0 评论 -
FFmpeg设置视频的显示宽高比例display_aspect_ratio
最近采用ffmpeg编写代码的时候,发现视频播放的宽高比例不是我想要的,所以我需要调整显示的宽高比。一般采用ffplay播放视频的时候,会出现SAR和DAR其中他们之间的概念是DAR,Display_aspect_ratio,是指定该视频播放的时候,看到的视频比例。SAR,Sample Aspect Ratio,是指采集这个视频的比例,也就是存储像素点的比例。我发现在AVCo...原创 2020-04-22 21:12:43 · 6760 阅读 · 0 评论 -
vs2015 下使用qt 中,ffplay 的问题,vs编译特殊性?
如题,我在vs2015中使用qt,然后移植ffplay过来,调试很多次之后,编译终于过了。如下2个想解决的问题,和2个我的尝试解决的方案。1、播放时,伸缩窗口会使得播放界面闪烁,或者移动窗口使得界面不动了,当放开鼠标之后界面又继续正常播放了。2、ffplay中有很多全局变量,例如screen-width ,我只要把它放到VideoState中来进行传递,结果就是当你伸缩窗口的时候,画面就再也不动,...原创 2018-04-06 20:14:54 · 331 阅读 · 0 评论 -
将Qt 5.6 集成至 VS2015,并添加ffmpeg和SDL2的库
一、将Qt 5.6 集成至 VS2015vs2015+ffmpeg开发环境配置参考:将 Qt 5.6 集成至 VS2015安装完成VS2015后,进行Qt5.6的安装 http://download.qt.io/official_releases/qt/5.6/5.6.0/我的是5.6.0,64位系统,所以我选择qt-opensource-windows-x86-msvc2015_64-5.6.0...原创 2018-03-20 21:03:27 · 623 阅读 · 0 评论 -
3个平台下的ffmpeg——ffmpeg编译
ffmpeg编译 需要在3个平台(win\linux\arm)下使用ffmpeg的库,所以进行了ffmpeg的编译。其中ffmpeg的编译也有许多依赖,不同平台依赖的也不一样,少了一个依赖可能就少了一个功能了。 Windows下的ffmpeg: Win下的ffmpeg就懒得编译了,因为官网已经有现成的了。http://ffmpeg.zeranoe.com/build原创 2017-08-03 21:55:02 · 4787 阅读 · 0 评论 -
Rtsp拉流录制MP4
最近做了个项目,是rtsp拉流保存成MP4,由于之前已经完成本地录制,所以只要稍微改一下就可以了,顺便写个博客。 平台:ARM+linux 用到的库:ffmpeg一、首先是拉流拉流直接使用av_read_frame直接就可以。然后分辩其stream_index即可,video_stream_idx和audio_stream_idx是初始化input确定的。 我这里直接保存入队列,防止IO操作时原创 2017-07-12 21:47:00 · 2637 阅读 · 0 评论