windows php怎么使用ffmpeg

windows php怎么使用ffmpeg,第1张

官网对FATE的介绍

FATE(FFmpeg Automated Testing Environment): ffmpeg回归测试的套件以及提供了一种在服务器上对测试结果进行聚合和展示的方式。

包含3部分内容:

FFmpeg公开服务器的测试结果: >

我用的是基于C++的ffmpeg开发,ffmpeg原本是针对linux下的GCC编译器,当然通过MinGW也可以在win下进行编译,但是需要安装额外的编译环境,你可以上chinavideo上去看看,那上面说的很清楚,的你所说的问题也不是很难,多看看开发文档就可以解决了。

FFmpeg在Windows系统下的编译过程,分四步:如下:1 配置编译环境2 下载FFMPEG的代码3 编译,获取FFMPEG库(头文件,lib,和DLL)4 在VC下配置,测试1 配置编译环境1)安装MSys下载文件:bash-31-MSYS-1011-snapshottarbz2msysCORE-1011-20080826targz解压msysCORE-1011-20080826targz,比如解压到X:\msys(以下内容都使用该路径描述,X为你安装的盘符)。解压bash-31-MSYS-1011-snapshottarbz2,产生一个名为bash-31的目录,在该目录下有一个子目录名为bin,其他的目录不需要关心。复制bin目录中的所有文件到D:\msys\bin,提示是否要覆盖shexe的时候,选择是。到“D:\msys\postinstall”目录下执行pibat,在出现的提示中输入n回车后(这个不搞错了),按任意键退出即可。2)安装MinGW下载文件:binutils-220-1-mingw32-bintargz(binutils-2191-mingw32-bintargz)gcc-core-345-20060117-3targz gcc-g++-345-20060117-3targzw32api-313-mingw32-devtargz  mingwrt-316-mingw32-devtargz(mingwrt-3152-mingw32-devtargz)mingwrt-316-mingw32-dlltargz(mingwrt-3152-mingw32-dlltargz)把它们全部解压到X:\msys\mingw。3)修改“msysbat”用文本编辑器打开D:\msys\msysbat,由于打算用MSVC++编译程序,所以需要有lib文件才能链接到FFmpeg的库,这些lib文件可以使用微软的工具链中lib命令产生。为此,机器上必须已经安装了微软的Visual Studio或是Visual C++。把下面一行加到msysbat的最前面,把路径替换成机器上vcvars32bat实际存在的路径,比如我的在“D:\program files\Microsoft Visual Studio 8\VC\bin”,于是就添加:call "D:\program files\Microsoft Visual Studio 8\VC\bin"

利用FFmpeg解析音视频流,音视频流可以来自一个标准的RTMP的URL或者是一个文件 通过解析得到音视频流,进一步就可以解码, 然后视频渲染在屏幕上,音频通过扬声器输出

利用FFmpeg框架中libavformat模块可以通过函数 av_read_frame 解析出音视频流的音视频数据,如果直接使用FFmpeg硬解,仅需要解析到AVPacket即可传给解码模块使用,如果使用VideoToolbox中的硬解, 对于视频数据,还需要获取其NALU Header中的(vps)sps, pps以便后续使用

使用流程

FFmpeg parse流程

下面的链接中包含搭建iOS需要的FFmpeg环境的详细步骤,需要的可以提前阅读

iOS手动编译并搭建FFmpeg

导入FFmpeg框架后,首先需要将用到FFmpeg的文件改名为mm, 因为涉及C,C++混编,所以需要更改文件名

然后在头文件中导入FFmpeg头文件

注意: FFmpeg是一个广为流传的框架,其结构复杂,一般导入都按照如上格式,以文件夹名为根目录进行导入,具体设置,请参考上文链接

21 注册FFmpeg

一般在程序中的main函数或是主程序启动的代理方法 - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 中初始化FFmpeg,执行一次即可

22 利用视频文件生成格式上下文对象

C++音视频开发学习资料 :点击领取 音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

23 获取Audio / Video流的索引值

通过遍历format context对象可以从 nb_streams 数组中找到音频或视频流索引,以便后续使用

24 是否支持音视频流

目前视频仅支持H264, H265编码的格式实际过程中,解码得到视频的旋转角度可能是不同的,以及不同机型可以支持的解码文件格式也是不同的,所以可以用这个方法手动过滤一些不支持的情况具体请下载代码观看,这里仅列出实战中测试出支持的列表

音频本例中仅支持AAC格式其他格式可根据需求自行更改

使用AVPacket这个结构体来存储压缩数据对于视频而言, 它通常包含一个压缩帧,对音频而言,可能包含多个压缩帧,该结构体类型通过 av_malloc() 函数分配内存,通过 av_packet_ref() 函数拷贝,通过 av_packet_unref() 函数释放内存

解析数据

int av_read_frame(AVFormatContext s, AVPacket pkt); : 此函数返回存储在文件中的内容,并且不验证解码器的有效帧是什么。它会将存储在文件中的内容分成帧,并为每次调用返回一个。它不会在有效帧之间省略无效数据,以便为解码器提供解码时可能的最大信息。

获取sps, pps等NALU Header信息

通过调用av_bitstream_filter_filter可以从码流中过滤得到sps, pps等NALU Header信息

av_bitstream_filter_init: 通过给定的比特流过滤器名词创建并初始化一个比特流过滤器上下文

av_bitstream_filter_filter: 此函数通过过滤buf参数中的数据,将过滤后的数据放在poutbuf参数中输出的buffer必须被调用者释放

此函数使用buf_size大小过滤缓冲区buf,并将过滤后的缓冲区放在poutbuf指向的缓冲区中。

注意: 下面使用new_packet是为了解决av_bitstream_filter_filter会产生内存泄漏的问题每次使用完后将用new_packet释放即可

可以根据自己的需求自定义时间戳生成规则这里使用当前系统时间戳加上数据包中的自带的pts/dts生成了时间戳

本例将获取到的数据放在自定义的结构体中,然后通过block回调传给方法的调用者,调用者可以在回调函数中处理parse到的视频数据

获取parse到的音频数据

因为我们已经将packet中的关键数据拷贝到自定义的结构体中,所以使用完后需要释放packet

parse完成后释放相关资源

C++音视频开发学习资料 :点击领取 音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

注意: 如果使用FFmpeg硬解,则仅仅需要获取到AVPacket数据结构即可不需要再将数据封装到自定义的结构体中

以上就是关于windows php怎么使用ffmpeg全部的内容,包括:windows php怎么使用ffmpeg、ffmpeg 如何调用本地摄像头 生成 m3u8、附加: FFmpeg概念理解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9701682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存