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