ffmpeg
文章平均质量分 69
zhoubotong2012
这个作者很懒,什么都没留下…
展开
-
FFmpeg对颠倒的RGB图像翻转显示
很多使用FFmpeg做解码的用户都可能遇到过一个问题,他们对解码出来的图像转为RGB格式之后显示图像是颠倒的。有些用户对其原因不大明白,其实原因跟RGB图像的存储方式有关。RGB图像即RGB位图有两种存储方式:一种是从上往下扫描,另一种是从下往上扫描。从上扫描的图像第一行的首地址即为图像Buffer的起始地址,而从下往上扫描的图像第一行的首地址为:buffer_data+ linesize*(h...原创 2019-11-29 10:12:14 · 2213 阅读 · 0 评论 -
Java/PHP/C#等语言如何调用ffmpeg/ffprobe获取音视频文件的信息并输出为JSON格式
我的这篇博文用FFmpeg获取视频流+音频流的信息(编码格式、分辨率、帧率、播放时长...)描述了用C++的方法调用FFmpeg API获得视音频文件的信息,但是如果你用其他语言:比如Java/PHP/C#等解释性语言开发的,虽然也可以通过一些转换好的库接口(比如JavaCV、Jave)间接调用FFmpeg,但是调用API的形式毕竟不大方便,特别是对FFmpeg API不熟悉的朋友。其实,通过命令...原创 2019-11-02 16:47:01 · 3444 阅读 · 1 评论 -
FFmpeg采集摄像头图像并推流(RTSP/RTMP)---开发总结
我的一篇博文《如何用FFmpeg API采集摄像头视频和麦克风音频。。。》已经介绍了如何从视音频采集设备获取数据,并且编码、保存文件到本地。但是,有些应用并不是把流保存成文件,而是需要发送到网络的,比如现在很典型的一种应用场景:把流推送到RTSP、RTMP、HLS服务器,由服务器转发给其他用户观看。很多开发者也是调用FFmpeg API来实现推流的,用FFmpeg 做一个推流器很简单,调用流程跟输...原创 2019-10-28 09:56:24 · 32776 阅读 · 12 评论 -
利用FFmpeg API进行字符叠加和加水印
前面两篇文章详细讲解了怎么叠加字幕和Logo,但是这两篇的例子主要是针对Windows平台的,用到大量Windows API,一些非Windows程序员想要移植到其他平台(如Linux、Android)可能还要费一番功夫。要在其他平台进行叠加字幕和Logo有什么比较通用的方案呢?其实FFmpeg已经集成了一个加水印滤镜功能,用跨平台的FFmpeg能够帮助我们轻松实现该功能。废话少说,先看看加水...原创 2019-10-14 13:55:12 · 4781 阅读 · 1 评论 -
怎么在视频上叠加字幕和Logo--技术实现2
上一篇博文介绍了渲染时叠加字幕的技术实现方法,而这一篇给大家讲解怎么用修改视频像素的方法叠加字幕和Logo。下面我把叠加字幕和Logo都统称为叠加OSD。图像有分YUV和RGB格式,每个像素都有一个坐标和地址,我们要在图像指定地方叠加OSD,其实就是修改这些地方某些像素的像素值。叠加字幕原理简单描述就是:在视频图像上指定位置的像素值用OSD前景的颜色值代替。什么是OSD前景颜色?对字幕来说,前...原创 2019-10-14 11:50:47 · 3521 阅读 · 1 评论 -
怎么在视频上叠加字幕和Logo--技术实现1
这篇文章我给大家讲解的这种字幕叠加和Logo叠加方法是在渲染视频的时候“画“上去的,其实是通过某种API将OSD和Logo绘制到显卡缓存,然后提交缓存到屏幕。我们知道渲染视频有几种常用的API:GDI,DirectDraw,D3D,OpenGL,SDL,其中SDL库是对前面几种API在不同平台上的封装,是一个大集合。我给大家演示的例子是针对Windows平台的,一般在Windows平台上我们会用...原创 2019-10-14 00:02:14 · 3396 阅读 · 0 评论 -
怎么在视频上叠加字幕和Logo--开题篇
视频叠加字幕和图标(在某些地方也叫叠加OSD)在很多场合都很有用,比如电视台在直播的节目上叠加台标;美女主播在直播时在视频上加上自己喜爱的饰物或大头贴以增加娱乐的气氛;电影播放时在视频下方显示中英文字幕。正因为叠加字幕和图标的技术用得比较广,在我们日常工作中可能经常被用到,所以我们作为程序员有必要掌握这种技术。一般地,视频制作、处理和发布的流程为:采集、编码、保存为文件,然后分享,而...原创 2019-10-14 00:01:52 · 2258 阅读 · 1 评论 -
VLC接收RTP流的SDP文件写法
接收RTP流我们经常用VLC来进行测试,但是对于RTP,如果直接在VLC的网络协议框输入RTP地址来播放是播放不了的,如下图,会提示"SDP required"的错误信息。因为VLC打开RTP流需要一个SDP文件,SDP文件定义了流的一些信息比如视频编码格式,帧率,接收端的IP、端口号等。关于SDP文件的格式网上有详细的介绍,这里就不作详细说明了。反正,打开一个流,播放器需要根据SDP...原创 2019-01-31 11:28:28 · 8419 阅读 · 1 评论 -
查看视频文件格式信息的工具--MediaInfo
MediaInfo是一个用来分析视频和音频文件编码和内容信息的工具。免费开源,支持众多视频和音频文件格式,具有树状结构、文本、XML、网页等多种查看方式,信息可导出为文本,CSV,HTML等文件。该工具非常好用,可以验证保存的视频文件的格式是否合法,可以帮助开发者了解文件的详细信息。下面是该工具的一些截图:使用方法:这个工具是集成到Windows资源管理器的,要查看一个媒体文件...原创 2019-01-31 11:49:49 · 14200 阅读 · 0 评论 -
使用FFmpeg命令行进行UDP、RTP推流(H264、TS),ffplay接收
我们在开发网络程序时经常用到UDP或RTP来发送和接收流媒体,而开发程序完毕需要搭建一个环境测试,这时候可能你需要一个推流端或接收端。对于推流端,我们可以借助FFmpeg工具轻松完成该功能,只需要敲一条命令后就可以实现发流,并且支持多种网络协议(UDP/RTP/RTSP/RTMP)。而接收端我们可以使用ffplay,这个程序也是在FFmpeg工具包的Bin目录里面。大家可以根据自己需要使用这两个工...原创 2019-01-31 10:43:56 · 222219 阅读 · 8 评论 -
如何发送和接收RTP封包的H264,用FFmpeg解码
这篇文章给大家介绍怎么打包H264分片到RTP包,并且实现一个播放程序演示接收RTP包和用FFmpeg解码。为了让大家更了解H264打包成RTP的细节,有必要罗嗦一下向大家介绍一些相关的基础知识,下面分三节介绍,其中前面两节是基础知识,第三节重点讲解怎么实现RTP包的发送和接收,以及怎么用FFmpeg解码显示。一、H264的组成结构H264以NALU(NALunit)为单位来支持编码数据在...原创 2019-01-16 18:10:06 · 11474 阅读 · 3 评论 -
如何发送和接收RTP包,用FFmpeg分离、解码
RTP是网络上进行流媒体传输的一种常用协议,现在有很多封装RTP协议的开源库,比如:ortp, jrtplib,而其中最有名的要数jrtplib,本文给大家演示怎么用jrtplib开发一个带RTP发送和接收功能的应用程序,但这篇文章不会讲述jrtplib的基本用法知识,如果你要了解更多关于这个库的用法,可以参考这篇文章:http://www.cnblogs.com/yuweifeng/p/755...原创 2019-01-16 12:07:38 · 13314 阅读 · 5 评论 -
用FFmpeg实现的RTMP接收类
现在很多直播都用到RTMP来传输,而接收RTMP用FFmpeg比较常见(当然也有用其他库的)。FFmpeg对RTMP接收有比较完善实现了,API使用方法也很简单,大多数流程跟文件流处理一样,但是一些区别的地方。下面大概说一下用FFmpeg怎么实现RTMP接收功能,后面再附上封装类的代码。1. 初始化和打开流。 这是第一步要做的工作,打开了流后才能往下接收数据,打开流需要调用F...原创 2019-01-10 10:36:23 · 3641 阅读 · 0 评论 -
如何用FFmpeg+Win32实现一个简单的音频播放器
这个音频播放器是别人写的,我看到代码结构比较清晰,代码量比较精简,所以就拿来作为一个例子给大家讲解一下。这个播放器的界面是用Win32开发的,界面很简单,上面是菜单栏,下面是一个播放进度条,界面截图如下: 这个播放器使用FFmpeg来解析音频文件格式和解码音频,播放音频用到了DirectSound。这里要说一下播放音频的方法,在Windows平台,播放音频的方法有很多,比较常用的是:Dir...原创 2018-02-25 13:14:25 · 1331 阅读 · 0 评论 -
用FFmpeg保存JPEG图片
//函数作用:将解码出来的YUV数据保存成JPG图像//out_file_name -- JPEG图像保存路径//w, h -- 图像宽高//linesize -- 图像的Y分量宽度(一般4字节对齐)//Y, U, V -- 指向图像Y,U,V三个平面的指针//int EncodeAndSaveJPEG(const char* out_file_name, int w, int h, ...原创 2018-02-21 10:47:19 · 8344 阅读 · 0 评论 -
降低FFmpeg的编码延时
之前用FFmpeg的H264编码器发现编码出来的视频延时很大,在解码器一端优化各种可能产生延时的地方之后,延时还是有一秒,上网一查发现很多人遇到相同的问题,不过好在看到一个帖子给出了这个问题的解决方法。 原来,FFmpeg的H264编码器为了提高编码的图像质量,默认会缓冲多帧图像,这个缓冲帧数跟GOP大小有关。我程序设置GOP等于100,结果缓冲了20多帧。为了降低编码延时,可以添加-p...原创 2018-02-21 12:27:24 · 8147 阅读 · 0 评论 -
降低FFmpeg的解码延时
不知大家有没有发现FFmpeg长时间解码会出现延时增大(特别是在丢包的情况下)?如果在播放本地文件,这个问题是没有影响的。但是如果播放的是实时流,则图像的延时就越来越大。本人是做安防监控的,很多招标项目对解码器的图像延时都有要求:不能高于250毫秒。所以,对实时性要求高的场合,要尽量降低图像的延时。 网络摄像头从采集图像到通过网络传输到客户端解码的过程中都会产生延时,一般延时有...原创 2018-02-21 14:08:50 · 10438 阅读 · 3 评论 -
启动FFmpeg.exe进程完成通过命令行可以实现的功能
FFmpeg的功能很强大,包含编码,解码,各种输入输出格式的处理,但是使用它的API来实现功能有点困难,有没有更简单的方式?通常API能做的功能FFmpeg的官方工具即ffmpeg.exe都已经实现了,我们可以通过命令行直接调用ffmpeg.exe进程来完成。我的博客上跟这个话题相关的一篇文章《Java/PHP/C#等语言如何调用ffmpeg/ffprobe获得视音频文件的信息并输出为...原创 2018-02-21 19:46:42 · 8132 阅读 · 0 评论 -
新版FFmpeg编解码音频的问题
很多人写的老程序还是用FFmpeg的旧版本,但一升级到新版本就遇到很多问题,首先是某些API不能用了,编译不通过,不过这个问题还是算比较容易解决的,遇到最头疼的一个问题是对音频的处理。以前FFmpeg编码和解码接受的音频格式多数是S16(AV_SAMPLE_FMT_S16),是Packed Format格式,就是左右两个声道是连续排列的,而FFmpeg新版本引进了新的排列格式AV_SA...原创 2018-02-22 11:32:11 · 1726 阅读 · 0 评论 -
如何让FFMPEG生成的MP4文件做到边下载边播放
一般通过FFmpeg生成的MP4文件如果没有经过特殊处理在播放的时候是要下载完整个文件才能播放,但是我们想将文件用于点播,比如放到Darwin RTSP Server的媒体目录里让访问的客户端播放,必须让它支持边下载边播放。将MP4文件转成可以逐渐播放的操作叫做“流化”,那如何对一个MP4文件进行“流化”呢?我们可以借助ffmpeg带的一个命令行工具--qt-faststart。 qt...原创 2018-02-22 11:46:00 · 7162 阅读 · 1 评论 -
如何用FFmpeg读取内存的PS/TS流,分离出视频和音频
之前做一个项目遇到一个问题:从网络中收到PS/TS流,需要从中分离出视频和音频,但是FFmpeg只支持标准的几种输入流协议(RTP/HTTP/RTSP/MMS),而我们的协议它不支持,所以就不能够用它来直接做接收。那能否由自己来接收数据然后让FFmpeg读取内存中的数据呢?答案当然是可以的,这就需要用到FFmpeg的探测流格式的功能,主要是用到了两个API: avio_alloc_cont...原创 2018-02-22 21:14:20 · 6141 阅读 · 1 评论 -
如何用FFmpeg将输出的TS流写到内存
最近需要实现一个功能:利用FFmpeg将编码出来的视频流和音频流混合封装成TS格式,然后通过自定义协议将TS流发送出去。因为发送协议是自己定义的,FFmpeg不支持这种网络协议,不能用它内置的协议。后来发现原来FFmpeg也支持将输出的流回调到给上层去处理,下面简单讲一下实现的流程。 首先,我们按照把流输出到文件的方式来处理,但是有小小的不同,下面是初始化输出流的代码:A...原创 2018-02-21 20:56:29 · 5849 阅读 · 7 评论 -
Release模式下加载FFmpeg提示“无法定位程序输入点XXX与动态链接库XXX.dll ”的问题解决
之前遇到一个很奇怪的问题:我的一个程序在Debug模块下运行没问题,而在Release模式下运行报错了,启动程序的时候提示“无法定位程序输入点CoTaskMemFree 于动态链接库avcodec-56.dll”,这个程序引用了FFmpeg的DLL,我开始以为是DLL的问题,但是之前用这些DLL都没有出现错误啊!我检查了编译选项多次也没发现什么问题。后来通过上网搜,终于在一篇博文中找到了答案...转载 2018-02-23 20:04:43 · 5401 阅读 · 0 评论 -
如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能
之前一直用Directshow技术采集摄像头数据,但是觉得涉及的细节比较多,要开发者比较了解Directshow的框架知识,学习起来有一点点难度。最近发现很多人问怎么用FFmpeg采集摄像头图像,事实上FFmpeg很早就支持通过DShow获取采集设备(摄像头、麦克风)的数据了,只是网上提供的例子比较少。如果能用FFmpeg实现采集、编码和录制(或推流),那整个实现方案就简化很多,正因为这个...原创 2018-02-19 22:08:02 · 57335 阅读 · 50 评论 -
ffmpeg,ffplay在windows下的编译
由于FFMpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译。要想使用FFMpeg,最先要解决的问题就是在Windows下配置一个类似Linux的编译环境,将FFMpeg编译为二进制库以后,再利用其进行进一步开发。 MSVC++并不严格的遵循C标准,所以整个编译过程必须使用MSy...转载 2018-03-03 12:05:01 · 3379 阅读 · 0 评论 -
用FFmpeg获取视频流+音频流的信息(编码格式、分辨率、帧率、播放时长...)
我们经常需要知道一个媒体文件所包含的媒体流的信息,比如文件格式、播放时长、码率、视音频编码格式,视频分辨率,帧率,音频属性等信息。如何使用FFmpeg API获取这些信息呢?下面我会给出一个完善的类,这个类封装了FFmpeg读取文件信息的相关的API,读者只需要调类的方法就可以获得相关的信息。这个类能够读取媒体文件的哪些信息呢?假如我们给出一个媒体文件(MP4,AVI,MKV。。。),里面至少...原创 2018-02-20 20:15:05 · 49763 阅读 · 18 评论