首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >德尔福RTMP_Read错误?

德尔福RTMP_Read错误?
EN

Stack Overflow用户
提问于 2012-10-10 12:50:06
回答 2查看 890关注 0票数 1

我认为我使用的单元是错误的,因为我做了阅读过程:

代码语言:javascript
运行
复制
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;

程序调用:

代码语言:javascript
运行
复制
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;

程序会编译,但是当您开始收到错误消息时:程序入口点RTMP_ReadData没有在库DLL help?中找到,但是这个函数是在模块中描述的,请帮助我找出一个不一致的地方。

如果信任依赖关系沃克,则库不运行RTMP_ReadData。有一个函数RTMP_Read,根据消息来源:

链接

C的职能如下:

代码语言:javascript
运行
复制
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);
}

而在模块中,我使用的描述缺失了

我使用的模块使用了一个现有条目:

代码语言:javascript
运行
复制
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;

她的名字被调用了,但在我看来,它包含了很多让我困惑的选项,与负载的功能无关。我该怎么处理这张唱片?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-10 12:51:27

根据我所有的研究,这个函数实际上被命名为RTMP_Read

例如,您可以使用依赖沃克检查DLL导出的函数。当然,库的最终来源应该是它所附带的C++头文件。

我的建议是开始学习如何使用使用C或C++的LIBRTMP。目前,您不知道错误是由于接口的错误转换造成的,还是由于调用不正确造成的。如果您继续使用Delphi,那么您将永远努力找出错误的原因。

但是,切换到C或C++,您已经有了链接到库所需的头文件。您可以编译RTMPDUMP附带的演示程序,并观察它们的工作方式。您可以将它们用作文档,因为LIBRTMP本身似乎没有(我无法找到)。

然后,一旦您了解了库是如何工作的,就开始移植它来完成Delphi。首先,创建使用库的最简单的C++程序。把它传送到德尔福。有一个运行的C++版本的程序进行比较,将有助于您隔离故障。

最终,您将有一个功能良好的Delphi转换接口。更重要的是,您将真正了解如何调用库。如果你继续沿着你目前的道路前进,你将取得非常缓慢的进展。

票数 2
EN

Stack Overflow用户

发布于 2013-05-26 11:56:12

函数RTMP_ReadData(var r:RTMP;buf:pcchar;size:cint):cint;cdecl;外部‘’'RTMP_Read';<- change。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12819760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档