【问题标题】:delphi indy udp client and server Audio chatdelphi indy udp 客户端和服务器音频聊天
【发布时间】:2014-08-12 07:39:26
【问题描述】:

我正在创建项目以通过 Indy 组件和 Wave 音频组件进行多音频聊天,但我一直遇到错误。这是简单的代码,但我不知道如何修复它。

sendtocl 是我使用的客户端

procedure TForm1.recorderData(Sender: TObject; const Buffer: Pointer;
  BufferSize: Cardinal; var FreeIt: Boolean);
begin
  Freeit :=True;
  sendtocl.SendBuffer(Buffer^, Buffersize);
end;

我在编译时遇到了这个错误

没有可以使用这些参数调用的“SendBuffer”的重载版本

任何建议的修复?


“sentocl”是我的indyudpclient

procedure TForm1.recorderData(Sender: TObject; const Buffer: Pointer; BufferSize: Cardinal; var FreeIt: Boolean);
begin
  Freeit := True;
  sendtocl.SendBuffer(RawToBytes(Buffer^, Buffersize));
end;

这个来自 Remy lebeau 的固定代码解决了编译错误,但是当我尝试发送音频时,文本得到了巨大的数据,而网络上的其他客户端听不到声音,我认为它在 onread 上使用 indy 服务器我使用的组件是:

Wave音频,indy udp服务器和客户端,,,,使用delphi xe5

Remy 我可以通过 indyudp 客户端发送音频流吗? Wave音频中的样本是针对winsock的,但我真的迷失了如何用indy来做,你能给我参考一下吗?

【问题讨论】:

  • 我假设您从某个地方获得了代码,并且该代码来自与您使用的不同版本的 Indy。
  • 是的,我有一个建议。查看源代码(随 Delphi 一起分发的所有 Indy 版本都附带)并找出 SendBuffer 的正确参数类型,然后修复代码以使其使用正确的类型。由于您没有指明您使用的是哪个 Delphi 和 Indy 版本,甚至没有指明 sentocl 是什么类,所以不可能更具体。 (“sendtocl 是我使用的客户端”并不表示该“客户端”的类类型。)

标签: delphi audio


【解决方案1】:

如果您查看SendBuffer() 的声明,它需要TIdBytes 作为输入。您可以为此使用 Indy 的 RawToBytes() 函数:

procedure TForm1.recorderData(Sender: TObject; const Buffer: Pointer; BufferSize: Cardinal; var FreeIt: Boolean);
begin
  Freeit := True;
  sendtocl.SendBuffer(RawToBytes(Buffer^, Buffersize));
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2014-06-20
    • 2012-09-07
    相关资源
    最近更新 更多