FFDec——供Delphi使用的视频解码动态链接库

数字蛋糕 2008-05-06 08:32:26
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 版本所支持的文件格式要少一些。
...全文
937 15 打赏 收藏 举报
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
AT88088 2011-04-21
路过,学习一下,
  • 打赏
  • 举报
回复
dd_zhouqian 2008-06-17
帮顶,有空在来谈一下
  • 打赏
  • 举报
回复
xiesongwu126com 2008-05-20
沒搞過媒體編程啊,就路過下.......
  • 打赏
  • 举报
回复
3cs 2008-05-20
我也来试试
  • 打赏
  • 举报
回复
gyk120 2008-05-18
多谢楼主提供,晚上试试
  • 打赏
  • 举报
回复
数字蛋糕 2008-05-16
to shuihan20e:我已经给帖子加了分,嫩可以PM我了。

to uglyquasimodo:
嗯,例子会在下个版本发布时加进去的。
至于pthreadGC2.dll,你可以在这个页面下载到:http://arrozcru.no-ip.org/ffmpeg_builds/,往下翻一下就是10461版,你随便下载一个sdk包里头应该都有这个文件的:)
  • 打赏
  • 举报
回复
uglyquasimodo 2008-05-13
现在不用提供一个很完善的播放器,提供一个demo就可以了,ffplay也就是这么个东西嘛,相信有这么个小demo,会引起更多人的兴趣。
  • 打赏
  • 举报
回复
shuihan20e 2008-05-13
我可以邀请你,不过,多给我点分吧
  • 打赏
  • 举报
回复
uglyquasimodo 2008-05-13
现在关键是如果没有pthreadGC2.dll,你这个库加载不起来啊,还有MSVCR80.dll,可能你的开发环境有这些库所以没问题。就像我的开发环境中有MSVCR80.dll所以只提示找不到pthreadGC2.dll(后来我去下了一个)。
  • 打赏
  • 举报
回复
数字蛋糕 2008-05-13
谢谢你的建议!确实pthread并不是必须的库,但对于某些编码器仍然是需要的。

具体的原因请看这里:http://arrozcru.no-ip.org/ffmpeg_wiki/tiki-index.php?page=pthreads

ffdec在没有pthread.dll的前提下同样可以使用(其实我发布ffdec相关软件的时候从来没有发布过pthread.dll)。

至于改写ffmpeg等就有些困难了。首先ffdec不是ffmpeg的delphi版,它在设计的时候就确定只是用来解码的(当然以后有可能支持编码)。至于说到写一个Delphi版的播放器……照说我迟早会写这么个东西的,只是现下是在没有闲暇,所以只好厚颜请大家等待了。

在播放器面试之前,大家还是看我给出的那个例子吧。毕竟真正的播放器还涉及到其他的很多东西,比如数据缓存等……也许并不是像大家想象的那么简单。如果需要的人多的话,我或许会对FFdec作一次更高层的封装。
  • 打赏
  • 举报
回复
uglyquasimodo 2008-05-12
另外,你这个库依赖pthreadGC2.dll,应该是不用依赖的
  • 打赏
  • 举报
回复
uglyquasimodo 2008-05-12
建议你用delphi+ffDec改写ffmpeg、ffplay作为demo
  • 打赏
  • 举报
回复
数字蛋糕 2008-05-09
ffDec的视频部分我并没有完全测试过,哪位发现有问题可以在这个帖子或者SF的官方论坛提出。
  • 打赏
  • 举报
回复
数字蛋糕 2008-05-09
如果ffDecode返回为True的话,那么说明解码应该已经成功了。你可以查看一下缓冲区中的内容。
不过这个size参数确实是应该返回实际需要的缓冲区大小值的,我会在正式发布版中更正这个问题:)

P.S. 哪位好心给我一个共享软件联盟论坛的邀请码-___-|||
  • 打赏
  • 举报
回复
uglyquasimodo 2008-05-08
支持一下,测试结果如下:
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
......

好像视频没有解码出来,会是什么原因呢?
  • 打赏
  • 举报
回复
发帖
GAME,图形处理/多媒体

1176

社区成员

Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
帖子事件
创建了帖子
2008-05-06 08:32
社区公告
暂无公告