LIBRTMP Delphi RTMP_读取错误?
我认为我使用的单位是错误的,因为我做了阅读程序:LIBRTMP Delphi RTMP_读取错误?,delphi,delphi-xe2,rtmp,Delphi,Delphi Xe2,Rtmp,我认为我使用的单位是错误的,因为我做了阅读程序: procedure ReadStream (rtmp: RTMP; Stream: TStream); var Buffer: array [0 .. 16384-1] of Byte ;/ / 16kB buffer BytesRead: Integer; begin while True do begin BytesRead: = RTMP_ReadData (rtmp, @ Buffer [0], Size
procedure ReadStream (rtmp: RTMP; Stream: TStream);
var
Buffer: array [0 .. 16384-1] of Byte ;/ / 16kB buffer
BytesRead: Integer;
begin
while True do
begin
BytesRead: = RTMP_ReadData (rtmp, @ Buffer [0], SizeOf (Buffer));
if BytesRead = 0 then
exit;
Stream.WriteBuffer (Buffer [0], BytesRead);
end;
end;
过程调用:
var
MY_RTMP: RTMP;
URL_str: string;
MY_RTMPPacket: RTMPPacket;
URL_char: PAnsiChar;
F: TFileStream;
begin
F: = TFileStream.Create (ExtractFilePath (GetModuleName (0)) + 'Video.flv', fmCreate or fmOpenWrite);
URL_str: = 'rtmp :/ / localhost: 1935/Video/test.stream';
MY_RTMP: = RTMP_Alloc;
RTMP_Init (MY_RTMP);
RTMP_SetupURL (MY_RTMP, pcchar (URL_str));
RTMP_EnableWrite (MY_RTMP);
RTMP_Connect (MY_RTMP, MY_RTMPPacket);
RTMP_ConnectStream (MY_RTMP, 0);
ReadStream (MY_RTMP, F);
end;
程序会编译,但当您开始收到错误消息时:
在库DLL librtmp中找不到过程入口点RTMP\u ReadData?
但此功能在模块中有描述,请帮助我查找差异
如果信任依赖关系,则库不起RTMP_ReadData的作用。有一个函数RTMP_Read,根据来源:
C上的函数如下所示:
static int rtmp_read (URLContext * s, uint8_t * buf, int size)
{
LibRTMPContext * ctx = s-> priv_data;
RTMP * r = & ctx-> rtmp;
return RTMP_Read (r, buf, size);
}
在我使用的模块中,缺少描述
模块I使用现有条目:
RTMP_READ = record
buf: pcchar;
bufpos: pcchar;
buflen: cuint;
timestamp: uint32_t;
dataType: uint8_t;
flags: uint8_t;
status: int8_t;
initialFrameType: uint8_t;
nResumeTS: uint32_t;
metaHeader: pcchar;
initialFrame: pcchar;
nMetaHeaderSize: uint32_t;
nInitialFrameSize: uint32_t;
nIgnoredFrameCounter: uint32_t;
nIgnoredFlvFrameCounter: uint32_t;
end;
她调用了imee名称,但它包含很多让我困惑的选项,在我看来,这些选项与加载的功能无关。我该怎么处理这个记录呢?根据我所有的研究,这个函数实际上被命名为
RTMP\u Read
例如,您可以检查DLL导出的函数。当然,库的最终来源应该是它提供的C++头文件。
我的建议是开始学习如何使用C或C++使用LeopTMP。目前,您不知道错误是由于接口的错误翻译,还是由于接口调用错误。如果您继续使用Delphi,那么您将永远难以找出错误的原因
但是,切换到C或C++,并且已经有了连接到库所需的头文件。您可以编译RTMPDUMP附带的演示程序,并观察它们的工作方式。您可以将它们用作文档,因为LIBRTMP本身似乎没有文档(我找不到)
然后,一旦您了解了库的工作原理,就开始将其移植到Delphi中。首先,创建最简单的C++程序,使用库。把它移植到Delphi。有一个运行的C++版本来比较程序,可以帮助你隔离错误。最终,您将拥有一个功能强大的Delphi界面翻译。更重要的是,您将真正了解如何调用库。如果你继续沿着当前的道路走下去,你会取得非常缓慢的进展。函数RTMP\u ReadData(var r:RTMP;buf:pcchar;size:cint):cint;cdecl;外部“librtmp”名称“RTMP_Read”;我没有包含C++头文件。是的,函数名为
RTMP\u Read
。