FFmpeg 是一个非常强大的视频/音频编码解码库。但是很可惜,人们很难将其应用到非 C/C++ 的工程中。因此我一年前将其重新封装为一个库并希望这一工作能够简化其在视频解码方面的应用——尤其是在 Delphi (或 Free Pascal) 中的应用。FFDec 库由一个 DLL (有可能按照授权方式不同分为两个版本) 和一个负责动态装载 DLL 的 Pascal 头文件。用户可以直接将其加入到自己的工程中进行编译。您可以访问在 SF.net 上 FFDec 的官方主页来取得最新的信息:
http://sourceforge.net/projects/ffdec/FFDec 几乎是直接对 FFmpeg 的原生 API 进行了转换封装。FFDec 的库函数在应用上也与 libAV* 函数十分接近。因此在使用 FFDec 之前,您有必要先了解一下 FFmpeg 的原理。此外抱歉的是,我近期内恐怕无法提供详细的 FFDec 的文档。不过您可以通过查看 DLL 源代码(它比你想象的要简单)以取得对 FFDec 工作原理的认知。依照集成的 FFmpeg 库的版本授权不同,FFDec 库分为 GPL 和 LGPL 版本。两个版本都可以按照统一的接口调用,只是 LGPL 版本所支持的文件格式要少一些。
http://sourceforge.net/projects/ffdec/FFDec 几乎是直接对 FFmpeg 的原生 API 进行了转换封装。FFDec 的库函数在应用上也与 libAV* 函数十分接近。因此在使用 FFDec 之前,您有必要先了解一下 FFmpeg 的原理。此外抱歉的是,我近期内恐怕无法提供详细的 FFDec 的文档。不过您可以通过查看 DLL 源代码(它比你想象的要简单)以取得对 FFDec 工作原理的认知。依照集成的 FFmpeg 库的版本授权不同,FFDec 库分为 GPL 和 LGPL 版本。两个版本都可以按照统一的接口调用,只是 LGPL 版本所支持的文件格式要少一些。
解决方案 »
- dxcomponentprinter打印stringgrid的问题
- 读取stream方法中,integer类型变量初值的诡异问题
- 头晕,散分。另请教个问题
- 请问,intraweb中property debughtml是什么错误?如何解决
- 怎么样才能随意在MSN上添加好友?
- 百分请教两个问题
- 当Excel文件.xls另存为.Txt文件后,如何从Txt中读取数据,急,在线等待
- 在Delphi中如何区别public和published的作用?
- 怎样调用.chm帮助文件?
- 如何在某一程序最小化时,我的程序也随着最小化!
- PB调用delphi的DLL时传字符串出现乱码
- C/S开发想转B/S,如何成功转型?
program testffdec;{$APPTYPE CONSOLE}uses
SysUtils, FFDecImport;var
decoder : HFFDecoder;
info : AVInfo;
packet : PAVPacket;
buffer : array [0..10000000] of Byte;
size : Integer;
begin
decoder := ffOpenFile('E:\test.asf', info);
packet := ffCreateAVPacket(True);
try
while ffRead(decoder, packet,
FFDEC_RAW_FRAME_TYPE_ANY) do
begin
if packet.stream_index
= info.audioStreamIndex then
begin
if ffDecode(decoder, packet,
@(buffer[0]), Length(buffer), size) then
// Play the decoded audio samples ...
WriteLn('audio: ', size);
end
else if packet.stream_index
= info.videoStreamIndex then
begin
if ffDecode(decoder, packet,
@(buffer[0]), Length(buffer), size) then
// Show the decoded
// picture (BGR24 format) ...
WriteLn('video: ', size);
end;
Sleep(100);
end;
finally
ffFreeAVPacket(packet);
ffClose(decoder);
end;
end.输出:
audio: 32768
video: 10000001
audio: 32768
audio: 32768
video: 10000001
video: 10000001
audio: 24576
video: 10000001
video: 10000001
video: 10000001
......好像视频没有解码出来,会是什么原因呢?
不过这个size参数确实是应该返回实际需要的缓冲区大小值的,我会在正式发布版中更正这个问题:)P.S. 哪位好心给我一个共享软件联盟论坛的邀请码-___-|||
嗯,例子会在下个版本发布时加进去的。
至于pthreadGC2.dll,你可以在这个页面下载到:http://arrozcru.no-ip.org/ffmpeg_builds/,往下翻一下就是10461版,你随便下载一个sdk包里头应该都有这个文件的:)