我有一个服务器,它使用 VLC 使用 UDP 将视频多播到 IP 192.168.139.1和端口1234,并使用具有相同 IP 和端口 5004 的 RTP。我可以在客户端 PC 上使用 VLC 来查看正在使用的视频地址udp://@192.168.139.1:1234或rtp://@192.168.139.1:5004。
我的任务是编写一个可以捕获此视频并将其保存到文件的应用程序。为此,我尝试TIdIPMCastClient
在 C++ Builder 10.3 中使用。
这是我到目前为止所做的一个片段:
void __fastcall TForm1::Start(TObject* Sender)
{
FOutFile = new TFileStream(Edit3->Text, fmCreate | fmShareDenyWrite);
MCastClient->MulticastGroup = Edit1->Text; // 192.168.139.1
MCastClient->DefaultPort = Edit2->Text.ToIntDef(1234); // 1234
MCastClient->Active = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MCastClientIPMCastRead(TObject *Sender, const TIdBytes AData, TIdSocketHandle *ABinding)
{
if((nullptr != FOutFile) && (0 < AData.Length))
{
FOutFile->Write((void*)&AData, AData.Length);
StatusBar1->SimpleText = IntToStr(AData.Length);
}
}
但是将192.168.139.1分配给MulticastGroup
属性 ofTIdIPMCastClient
会抱怨它不是有效的组地址。
所以这是我的问题:
侦听和捕获UDP数据流的正确方法是什么?
还可以
TIdIPMCastClient
捕获RTP数据吗?如果是,我是否需要为此做任何特别的事情?如果不是,我可以使用另一个组件吗?