遇到一个问题,因为厂家提供的获取视频流的方式为UDP。我获得了数据后,需要通过TCP的方式来发送。
但是现在程序完成以后,出现一个主要问题是通过转发后的数据,解码的时候出现了花屏的现象,我现在分析的结果是因为UDP发送的包顺序不一致,导致我通过TCP发送到解码的包的顺序也不一样。但是单独用解码看UDP不会出现花屏的现象,而用解码看TCP的时候,就出现了花屏的现象。大家帮我分析一下,该怎么来处理这个问题?
附上UDP接收数据然后转发的代码:
procedure TFrmMain.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
List:TList;
count,iFileSize:Integer;
AThread : TIdPeerThread;
tempStream:TMemoryStream;
begin
if AData.Size <0 then
Exit;
tempStream:=TMemoryStream.Create;
List:=IdTcpServer1.Threads.LockList;
try
try
//下面就是通过IdTcpServer1来发送数据的部分,这里的判断应该消耗的时间不多吧?会不会影响效率?
if tempflag then begin
if ((List.Count>0)) then begin
for count:=0 to List.Count-1 do begin
AThread := List.Items[0];
if (AThread.Connection.Connected) then begin
AThread.Connection.OpenWriteBuffer;
AThread.Connection.WriteStream(AData);
AThread.Connection.CloseWriteBuffer;
end;
end;
end;
end;
except
on E:Exception do
Memo1.Lines.Add(E.Message);
end;
finally
IdTcpServer1.Threads.UnlockList;
end; end; 我在网上找了好久类似的问题,一直没有得到解决,请大家帮忙看看!!!
但是现在程序完成以后,出现一个主要问题是通过转发后的数据,解码的时候出现了花屏的现象,我现在分析的结果是因为UDP发送的包顺序不一致,导致我通过TCP发送到解码的包的顺序也不一样。但是单独用解码看UDP不会出现花屏的现象,而用解码看TCP的时候,就出现了花屏的现象。大家帮我分析一下,该怎么来处理这个问题?
附上UDP接收数据然后转发的代码:
procedure TFrmMain.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
List:TList;
count,iFileSize:Integer;
AThread : TIdPeerThread;
tempStream:TMemoryStream;
begin
if AData.Size <0 then
Exit;
tempStream:=TMemoryStream.Create;
List:=IdTcpServer1.Threads.LockList;
try
try
//下面就是通过IdTcpServer1来发送数据的部分,这里的判断应该消耗的时间不多吧?会不会影响效率?
if tempflag then begin
if ((List.Count>0)) then begin
for count:=0 to List.Count-1 do begin
AThread := List.Items[0];
if (AThread.Connection.Connected) then begin
AThread.Connection.OpenWriteBuffer;
AThread.Connection.WriteStream(AData);
AThread.Connection.CloseWriteBuffer;
end;
end;
end;
end;
except
on E:Exception do
Memo1.Lines.Add(E.Message);
end;
finally
IdTcpServer1.Threads.UnlockList;
end; end; 我在网上找了好久类似的问题,一直没有得到解决,请大家帮忙看看!!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货