我认为我使用的单元是错误的,因为我做了阅读过程:
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;
程序会编译,但是当您开始收到错误消息时:程序入口点RTMP_ReadData没有在库DLL help?中找到,但是这个函数是在模块中描述的,请帮助我找出一个不一致的地方。
如果信任依赖关系沃克,则库不运行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);
}
而在模块中,我使用的描述缺失了
我使用的模块使用了一个现有条目:
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;
她的名字被调用了,但在我看来,它包含了很多让我困惑的选项,与负载的功能无关。我该怎么处理这张唱片?
发布于 2012-10-10 12:51:27
根据我所有的研究,这个函数实际上被命名为RTMP_Read
。
例如,您可以使用依赖沃克检查DLL导出的函数。当然,库的最终来源应该是它所附带的C++头文件。
我的建议是开始学习如何使用使用C或C++的LIBRTMP。目前,您不知道错误是由于接口的错误转换造成的,还是由于调用不正确造成的。如果您继续使用Delphi,那么您将永远努力找出错误的原因。
但是,切换到C或C++,您已经有了链接到库所需的头文件。您可以编译RTMPDUMP附带的演示程序,并观察它们的工作方式。您可以将它们用作文档,因为LIBRTMP本身似乎没有(我无法找到)。
然后,一旦您了解了库是如何工作的,就开始移植它来完成Delphi。首先,创建使用库的最简单的C++程序。把它传送到德尔福。有一个运行的C++版本的程序进行比较,将有助于您隔离故障。
最终,您将有一个功能良好的Delphi转换接口。更重要的是,您将真正了解如何调用库。如果你继续沿着你目前的道路前进,你将取得非常缓慢的进展。
发布于 2013-05-26 11:56:12
函数RTMP_ReadData(var r:RTMP;buf:pcchar;size:cint):cint;cdecl;外部‘’'RTMP_Read';<- change。
https://stackoverflow.com/questions/12819760
复制相似问题