FFVCL - Delphi FFmpeg VCL Components [CCAVC - CodeCoolie Audio Video Components] ********************************************************************************* 2010.07.08 Converter 3.3 & Player 2.3 [支持 HTML5 视频] * VP8 编码器 * WebM 视频格式 [Converter] * 几个小的改动 [Player] * 新属性 Seeking * Seek() 方法新增参数 AWaitForSeekEnd * 几个小的改动 [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r24040) * FFmpeg svn-r24040 比 ffmpeg 0.6(svn-r23863) 版本高 * 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2010.06.15 Converter 3.2b & Player 2.2b [Converter] * 移除 PadXXX 选项, 请使用 pad filter * 几个小的改动 [Player] * 几个小的改动 [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r23486) * 本版本与之前的 FFmpeg DLLs 版本兼容 ********************************************************************************* 2010.04.18 Converter 3.2a & Player 2.2a [Converter] * 新属性 Terminated 和 Working * 修正拷贝元数据时死循环问题 [Player] * 以暂停参数打开文件时更新 PlayState 属性为 psPause [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r22866) * 本版本与之前的 FFmpeg DLLs 版本兼容 ********************************************************************************* 2010.03.26 Converter 3.2 & Player 2.2 [Converter] * 移除 Video Hook 功能 * 移除选项 UseMaxRecordingTime * 捕捉转换线程中的异常 * 新输出选项 InputSync: 同步读取输入源 * 其他小的改进和 BUG 修正 [Player] * 支持 Video Filters * 支持 DVDSUB 字幕 * 捕捉播放线程中的异常 * 终止播放时避免死锁 * 提高稳定性! * 提高性能! * 其他小的改进和 BUG 修正 * 因稳定性和性能都有所显著改进, 版本号直接从 2.0 升为 2.2 [ScreenCapture] * 修正调用 GetObject() Windows API 时一个令人费解的问题 (只在 Delphi 6, 7, 2005 出现) [VFWCapture] * 新的 VFW 捕捉插件, 可用于捕捉摄像头视频 [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r22626) * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2010.02.10 Converter 3.1 & Player 2.0 [AVProbe] * 新方法: DecodeNextKeyFrame(), DecodePreviousFrame(), DecodePreviousKeyFrame() [Converter] * 修正合并模式下错误的 fps 信息 * 修正 VideoHook 帧画面抖动 * 其他小的改进和 BUG 修正 [Player] * 公开属性 AudioDriver 和 VideoDriver * 支持 DirectDraw 视频驱动: 支持平滑/抗锯齿 * 暂停时候也可以立即显示 Seek 结果 * 新属性 Paused * 新属性 PlayState * Open() 方法新增参数 APaused * 改进多线程稳定性 * 避免 Seek 时候不正确的长时间延时 * 其他小的改进和 BUG 修正 [DLLs] * 使用 Windows msvcrt.dll 代替 myutil.dll * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r21650, 保留 video hooks) * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2009.12.24 Converter 3.0 & Player 1.4 * 请 FFVCL 2.x 用户注意 2.x 与 3.0 的接口不一致, 3.0 版不兼容 2.x 版. 升级中如遇到问题, 请先参考 Demo 程序。 * Changelog 只是简要说明, 更多信息请参考接口文档(DCU版) 以及 Demo 程序。 [FFVCL - FFmpegVCL(Converter)] [Options] * 新增选项 UseMaxRecordingTime * 将 TimeStart 和 TimeLength 的类型从 Integer 改为 Int64 (毫秒改为微秒) * 移除 TimeStart64 和 TimeLength64 选项 * 移除 VideoHookPTSs 选项 [Methods] * 新方法 Exchange() * 将 AddInputFile() 改为 AddTask() * 将 ClearInputFiles() 改为 ClearTasks() * 将 RemoveInputFile() 改为 RemoveTask() * 将 StartConvert() 改为 Start() * 将 BreakConverting() 改为 Stop() * 将 PauseConverting() 改为 Pause() * 将 ResumeConverting() 改为 Resume() [Events] * 移除 OnBeforeHook 事件 * 改动 OnCustomHook 事件参数 * 改动 OnPreviewBitmap 事件参数 * 改动 OnTerminate 事件参数 * 改动 OnProgress 事件参数 [Properties] * 新属性 TriggerEventInMainThread * 新属性 OutputFiles * 将 AVFileInfo 改为 AVProbes * 将 FilesCount 改为 TasksCount * 数组类型的属性从一维改为二维 [Others] * 其他小的改进和 BUG 修正 [AVProbe] * 将 AVProbe 类从 class(TObject) 改为 class(TComponent) * 新方法 Seek(), Decode(), CopyToBitmap 替换相应旧方法 * 新属性 FrameInfo 替换相应旧属性 * 改进定位准确性以及解码视频帧的性能 [FFLogger] * 新属性 TriggerEventInMainThread * 其他小的改进和 BUG 修正 [I/O add-ons] [FrameInput] * 新增的帧输入类型 - YUV * 其他小的改进 [FrameOutput] * 帧输出功能 * 支持的帧输出类型 - RGB, MJPEG, H264, YUV [WaveCapture] * 通过声卡进行录音, 作为音频输入源 [ScreenCapture] * 其他小的改进 [FFPlayer] * 新属性 TriggerEventInMainThread * 其他小的改进和 BUG 修正 [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r20880, 保留 video hooks) * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2009.09.30 Converter 2.5 & Player 1.3 * 支持 Delphi 2010 * 支持解码 Windows Media Audio Pro * 支持帧输入 (请参考 demo) * 支持屏幕录像 (请参考 demo) * 支持 libx264 preset (请参考 demo) * 新组件 FFLogger (请参考 demo) * 移除 FFmpegVCL 和 FFPlayer 的 OnLog 事件 * 移除 FFmpegVCL 的 LogLevel 属性 * 几个小的改进 * 几个 BUG 修正 * FFmpeg DLLs 基于官方最新代码编译(ffmpeg svn-r20090, 保留 video hooks) * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2009.08.22 Converter 2.4a & Player 1.2d * 修正合并超过 2 个文件时的 pts 错误 (Converter) * 修正捕获某些 av_log 时的死循环 (Player) ********************************************************************************* 2009.08.16 Converter 2.4 & Player 1.2c * 支持视频合并: 将多个不同格式的文件, 合并为一个文件 * FFPlayer 也可以捕获 av_log() 信息 * 大量重构: FFmpeg.pas 的 av_encode() 函数 * 几个小的改进 * 几个 BUG 修正 ********************************************************************************* 2009.07.27 Converter 2.3c & Player 1.2b * 动态库路径支持 Unicode * 输入输出文件名支持 Unicode * FFPlayer 增加新属性 AspectRatio (Player 1.2b) * TAVProbe 增加新函数 SeekAndReadFramePicture() * 几个小的改进 * 几个 BUG 修正 ********************************************************************************* 2009.07.11 Converter 2.3b & Player 1.2a Converter 2.3b * StartConvert(0) 在所有任务完成后才返回 Player 1.2a * 增加 VerticalFlip 属性, 即垂直翻转画面 * TAVProbe 增加属性 ReadFrameSuccess * 几个小的改进 * 几个 BUG 修正 ********************************************************************************* 2009.05.30 Converter 2.3a & Player 1.2 Converter 2.3a * 增加 TimeStart64 和 TimeLength64 选项来代表微秒精度 Player 1.2 * 增加 OnHook 事件 * 增强检测文件末尾 * 几个小的改进 ********************************************************************************* 2009.04.09 Player 1.1 * 增加 PlayTime 属性, 当播放到 PlayTime 时, 根据 RepeatType 属性循环播放或停止播放 * 增加 CurrentFrame 函数, 返回 Bitmap 格式的当前视频截图 * 更新 Stop 方法, 修正 PlayState 事件和 Position 事件中调用 Stop 方法的 BUG * 增加 AudioVolume 属性, 调节音量范围(0-128) * 增加 Mute 属性 * 修正打开某些文件失败后不能再打开其他文件的 BUG ********************************************************************************* 2009.03.25 Converter 2.3 & Player 1.0 * 支持转换预览位图事件接口. (property OnPreviewBitmap: TPreviewBitmapEvent) * 新的帮助类 TFFmpegLoader 用于加载动态库. * 新组件 TFFplay 用于播放媒体文件. (不是免费的) * 合并 FFVCLdsgn_Dx 和 FFVCLrtl_Dx 为 FFmpeg_Dx. * 几个小的改进... * FFmpeg DLLs 基于官方最新代码编译(ffmpeg 0.5). * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2008.12.18 Version 2.2c * 支持转换预览. ********************************************************************************* 2008.12.08 Version 2.2b * 名字从 CCAVC 改为 FFVCL. * 支持 Delphi 2009. * 没别的变动. ********************************************************************************* 2008.10.09 Version 2.2a * 运行时刻包漏掉了 Stream I/O Protocol 的相关单元. (EventStreamAdapter.dcu and StreamProtocol.dcu) * 没别的变动. ********************************************************************************* 2008.09.28 Version 2.2 * 新特性: 支持 Stream I/O Protocol, 即支持输入输出流. * 新组件 TEventStreamAdapter 用于关联输入输出流事件. * BUG 修正: 避免因 filter 导致的 crop & pad 处理错误. * FFmpeg DLLs 基于官方最新代码编译(SVN-r15442). * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2008.09.09 Version 2.1a * 改进: 当采样像素宽高比不可用时, 自动计算假定值. * BUG 修正: 输出文件大小为零时, 没有正常释放句柄以及删除. * BUG 修正: Video Filters 申请内存大小错误, SizeOf() 参数错误地使用了结构体指针类型. ********************************************************************************* 2008.09.05 Version 2.1 * 支持 Video Filters 选项 * 新增属性 AVFileInfo(TAVProbe) * LoadLibrary -> LoadLibraryEx 请参考 Dynamic-Link Library Search Order http://msdn2.microsoft.com/en-us/library/ms682586.aspx * XviD 编码速度提升 * FFmpeg DLLs 基于官方最新代码编译(SVN-r15216) * 因 FFmpeg 更新, 本次代码与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2008.08.24 Version 2.0b 1. 改进内容 * 增加 AudioTag 和 VideoTag 输出选项 2. BUG 修正: StartTime 选项溢出 3. 演示程序 BUG 修正: 剪切片段时设置起止时间的 BUG ********************************************************************************* 2008.08.05 Version 2.0a 0. 2.0 释放的太匆忙了:( 1. 改进内容 * 采用全局 Codec 锁, 以便支持创建多个控件实例. 2. BUG 修正: 在线程中不能捕捉到异常. * 因为在线程中不能捕捉到异常, 所以应该手工处理异常. 注意: OnTerminate 事件参数变了, 用以传递异常信息. ********************************************************************************* 2008.08.01 Version 2.0 Final 0. 本次属大版本升级, 改动较大, 因此给您带来的不便请谅解. 1. 改进内容 * 封装新类 TAVProbe 用于获取输入文件的详细信息、以及视频帧预览功能 * 支持标准外部 Video Hook 动态库, 并对标准 Video Hook 进行了增强, 详见 TOutputOptions 的 成员 BeforeHook 和 VideoHookPTSs 的注释, 以及 BeforeHookEvent 的注释 * 提供 OnCustomHook 事件, 不需要外部 Video Hook 动态库, 即可实现同样功能, 更简单易用, 更 灵活强大, 详见 TOutputOptions 的成员 CustomHook 的注释, 以及 CustomHookEvent 的注释 * 移除属性 AudioChannels, AudioSampleRate, FrameHeight, FrameWidth, FrameAspectRatio, FramePixFmt, FrameRate, 改为使用 AVProbe 获取更详尽的信息 * 修正多个文件转换时, 调用 BreakConverting 不能正常触发 OnTerminated 事件的 BUG * 修正截取片段的BUG, 将 TimeStart 选项由 TOutputOptions 的成员改为 TInputOptions 的成员 * 支持指定输入流和输出流的映射 2. 代码改动 * 核心类 TCustomFFmpegHlpr 改名为 TCustomFFmpeg, 源文件单元名称由 FFmpegHlpr.pas 改为 FFmpeg.pas * FFmpeg 库头文件的单元名加前缀 lib, 如 avcodec.pas 改为 libavcodec.pas 3. 提供 Delphi 写的 Video Hook 动态库源代码 4. FFmpeg DLLs 基于官方最新代码编译(SVN-r14494) 代码日期 2008.08.01 5. 因 FFmpeg 更新, 本次代码与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2008.06.09 Version 1.0 Final 1. 改进内容 * 基本实现 TOutputOptions.ExtOptions 的功能 * 增加属性 property FFmpegHlprs[Index: Integer]: TFFmpegHlpr; 从而可以获得 TCustomFFmpegHlpr 的属性, 即可获得输入文件的部分信息 property AudioChannels: Integer; property AudioSampleRate: Integer; property FrameHeight: Integer; property FrameWidth: Integer; property FrameAspectRatio: Single; property FramePixFmt: TAVPixelFormat; property FrameRate: TAVRational; * 将 procedure InitInputOptions(P: PInputOptions) 名字改为 InitOutputOptions(P: POutputOptions) * 增加 procedure InitInputOptions(P: PInputOptions) * 重命名 TPixelFormat 为 TAVPixelFormat, 以避免和 Delphi 的 Graphics.pas 中的 TPixelFormat 冲突 * 默认不支持 RealVideo DLL 解码功能, 如需要, 可定义工程编译指示字 REAL_DLL 即可 默认 RealVideo34Codec 属性不可用, LoadAVLib 方法中的 ALoadRealDLL 参数不可用 * 增加 LicenseDefines.inc 编译指示字包含文件, 用以影响 CCAVCLicense.pas 文件, 实现组件注册保护等 默认情况下, 这些代码不起作用, 完全不会影响到你的代码和程序 2. 核心代码 * CCAVConverter.pas 代码内部调整稍大 * FFmpegHlpr.pas 代码内部调整稍大 3. FFmpeg DLL 使用官方最新代码编译 代码日期 2008.06.09 4. 因 FFmpeg 更新, 本次代码与之前的 FFmpeg DLL 版本不兼容 目录 Src\FFmpeg_20080520 下的代码与旧版本兼容, 但建议升级, 旧版本不再维护 ********************************************************************************* 2008.05.20 Version 1.0 RC4 1. 改进内容 * 封装 av_log_callback, 统一由事件 OnLog 输出 * 属性 VerboseLevel 名称改为 LogLevel, 类型由 Integer 改为枚举 TLogLevel * 事件 OnLog 参数 ALogLevel 类型由 Integer 改为枚举 TLogLevel * 增加属性 InputOptions 和 OutputOptions, 用于功能扩展, 目前尚未进行测试 * 增加几个输出选项, 详见源码内 TOutputOptions 结构体定义以及注释 2. 核心代码 * avcodec.pas 添加 CodecID: CODEC_ID_PCM_DVD * CCRVCodec.pas 添加 RVTransform 调用时可能产生的异常处理 * CCAVConverter.pas 代码内部调整稍大 接口部分(属性, 事件, 等)做了调整, 见 1. 改进内容 将 TFFmpegHlpr 部分成员移至父类 TCustomFFmpegHlpr 内 * FFmpegHlpr.pas 添加由 TFFmpegHlpr 类转来的部分成员至 TCustomFFmpegHlpr 内 原数字形式的 log level 替换为对应常量 3. TOutputOptions 说明 输出选项都添加了注释, 不过是 FFmpeg 自己的注释, 需要自己去学习 FFmpeg 各种参数, 我现在也不是很了解 特别地, 增加了 ExtOptions 字符串选项, 便于灵活扩展, 格式定义如下: name1=value1#13#10 name2=value2#13#10 .....=......#13#10 其中 name 和 value 对应于 FFmpeg 命令行参数和值, 实例如 pix_fmt=yuv422p 4. FFmpeg DLL 使用官方最新代码编译 代码日期 2008.05.20 ********************************************************************************* 2008.05.11 Version 1.0 RC3 1. 主要调整了一下目录结构 工程文件放到了单独的子目录 Packages 里了 (由此带来的麻烦请谅解) 2. 核心代码 * AVUtilHlpr.pas 添加了一个函数指针 av_log_default_callback: Tav_log_default_callbackProc; (对于 FFmpeg 动态库的调用,全部采用动态加载,动态取得API入口地址的方式,如果有特殊需要,可参考头文件,自行加入未载入的API函数) * CCAVConverter.pas Bug Fix: 从基础类TCustomFFmpegHlpr派生的TFFmpegHlpr类,个别保护成员重复声明(如Faudio_volume),这是个Bug,将导致不能有效设置实际参数。 改进: 为了输出DLL封装库,对基础类TCustomAVConverter的部分成员(过程)进行了调整,从私有转为保护。 其他小的改动。 * FFmpegHlpr.pas 加了部分Demo DLL限制代码。 其他小的改动。 3. Demo 工程也一并附加在内了 Demo 程序也做了小改进,并加入码率参数。 (组件实际上已经封装了FFmpeg绝大部分常用参数,只是 Demo 程序没有全部展示,此部分请在自己的程序内自行完善) 4. 对于 FFmpeg 自身,以及容器和编码解码器的知识,我目前也知之甚少,互相交流,共同提高:) 组件的相关文档会尽快制作,请见谅。 ********************************************************************************* 2008.05.07 Version 1.0 RC2 ********************************************************************************* 2008.04.30 Version 1.0 RC1 ********************************************************************************* http://www.CCAVC.com CodeCoolie@CNSW