Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2018.03.18;
Скачать: [xml.tar.bz2];

Вниз

Видеотрансляция по сети   Найти похожие ветки 

 
zSvetik ©   (2010-01-16 23:32) [0]

Доброго времени суток. Помогите с:
Есть чат который умеет передавать файлы (не более 50 кб). Его нужно изменить, что бы Сервер передавал видео в сеть, а клиент, подключившись, мог воспроизводить это видео (без сохранение на хард).
Видео берется из файла (*.avi). Так же нужно увеличить допустимый объем передаваемого видео.

unit MainUnit;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, IdUDPServer, XPMan, IdBaseComponent, IdComponent, IdUDPBase,
 IdUDPClient, StdCtrls, IdSocketHandle;

type
 TMainForm = class(TForm)
   UDPClient: TIdUDPClient;
   UDPServer: TIdUDPServer;
   GroupText: TGroupBox;
   FileGroup: TGroupBox;
   SendEdit: TEdit;
   SendBtn: TButton;
   Memo: TMemo;
   SendFileBtn: TButton;
   FileEdit: TEdit;
   SetFile: TButton;
   OpenDialog: TOpenDialog;
   SaveDialog: TSaveDialog;
   procedure SetFileClick(Sender: TObject);
   procedure SendBtnClick(Sender: TObject);
   procedure UDPServerUDPRead(Sender: TObject; AData: TStream;
     ABinding: TIdSocketHandle);
   procedure SendFileBtnClick(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 MainForm: TMainForm;

implementation

{$R *.dfm}

(***************** РАБОТА НА СТОРОНЕ КЛИЕНТА **********************************)

procedure TMainForm.FormCreate(Sender: TObject);
var
s: string;
begin
 // здесь мы просим ввести IP адрес, по умолчанию стоит "localhost", так что если
 // мы ни чего не введем, то прогрмма будет общаться сама с сабой, ну а если
 // введем, то неплохобы позаботится о наличии на удаленном компьютере
 // запущенной копии нашей программы, для проверки работоспособности
 if InputQuery("Программа-пример по UDP",
 "Введите IP адрес удаленной машины, иначе будете разговаривать сами с сабой :)",s)=true then
 UDPClient.Host:=s;
end;

procedure TMainForm.SetFileClick(Sender: TObject);
begin
 // здесь просто указываем файл для отправки
 if OpenDialog.Execute then  FileEdit.Text:=OpenDialog.FileName;
end;

procedure TMainForm.SendBtnClick(Sender: TObject);
begin
 // здесь просто отправляем текстовое сообщение
 UDPClient.Send("text"+SendEdit.Text);
 SendEdit.Clear;
end;

procedure TMainForm.SendFileBtnClick(Sender: TObject);
var
 MemStream  : TMemoryStream;
begin
 // здесь отправляем файл
 // создаем поток в памяти
 MemStream:= TMemoryStream.Create;
 // загружаем файл в наш поток
 MemStream.LoadFromFile(FileEdit.Text);
 //

 // отправляем наш поток
 UDPClient.SendBuffer(MemStream.Memory^,MemStream.Size);
 // освобождаем память
 MemStream.Free;
end;

(***************** РАБОТА НА СТОРОНЕ СЕРВЕРА **********************************)

procedure TMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream;
 ABinding: TIdSocketHandle);
var
 // объявляем 2 потока, один для строк, другой для любой другой информации
 // в нашем случае для файлов (так же можно пересылать что угодно)
 StrStream  : TStringStream;
 MemStream  : TMemoryStream;
begin
 // здесь происходит обработка данных пришедших от клиента
 // на данном этапе есть маленькая логическая бомба, все что длинной до 255
 // я считаю текстом (стандартное ограничение строковой переменной) , а что
 // больше 255, то это уже файл, на самом деле и файл может весить 255,
 // это конечно редкость но может быть, как это исправить подумай сам (мне лень) :)
 if AData.Size<=255 then
 begin
   // итак к нам пришел текст, работаем с потоком строк
   // создаем строковый поток
   StrStream:=TStringStream.Create("");
   // читаем данные в этот поток из пришедшего потока
   StrStream.CopyFrom(AData, AData.Size);
   // добавляем данные в приемник, указывая перед этим от кого этот текст
   Memo.Lines.Add(ABinding.PeerIP+": "+copy(StrStream.DataString,5,length(StrStream.DataString)));
   // освобождаем память
   StrStream.Free;
 end else
 begin
   // итак к нам пришел файл, работаем с потоком в памяти
   MemStream:= TMemoryStream.Create;
   // загружаем файл в наш поток
   MemStream.CopyFrom(AData, AData.Size);
   // выводим диалог сохранения файла
   if SaveDialog.Execute then MemStream.SaveToFile(SaveDialog.FileName);
   // освобождаем память
   MemStream.Free;
 end;
end;

end.


 
Сергей М. ©   (2010-01-17 17:48) [1]

Есть велосипед, который изобретали и собирали для извоза одного причинного места  по городскому асфальту со скоростью 20 км/ч.
Его нужно изменить для езды четырех причинных мест по бездорожью и разгильдяйству со скоростью 80 км/ч.

Помогите с ?


 
Separator ©   (2010-01-29 12:49) [2]

Передача видео потока совершенна друга задача нежели передача файла. ПО UDP нельзя передать пакт больше 65 507 байт не разбивая на части. Так что думайте сами и для начала почитайте какую-нибудь умную информацию, да и в данном случае скорей всего использует не UDP протокол.


 
ZigZag   (2010-09-22 17:51) [3]

Ну конечно, взял чужой исходник и давай с ним каля баля, да? Если бы это был бы мой исходник, я бы обиделся... Кстати про велосипед круто придумано:)


 
DVM ©   (2010-09-24 11:49) [4]


> Separator ©   (29.01.10 12:49) [2]


> да и в данном случае скорей всего использует не UDP протокол.

Как раз UDP протокол чаще всего и используется протоколами RTSP/RTSP для передачи видео. RTP Multicast и RTP Unicast как раз используют UDP.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2018.03.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.001 c
2-1459610574
chuxlo
2016-04-02 18:22
2018.03.18
Командная строка


2-1458373007
Signal
2016-03-19 10:36
2018.03.18
Утечка памяти и как лечить, не пойму ничего IEBrowser


2-1456676881
Илья_666
2016-02-28 19:28
2018.03.18
Взаимодействие с компонентами


8-1243716518
v1ctar
2009-05-31 00:48
2018.03.18
Обработка изображений. Сегментация.


6-1263673971
zSvetik
2010-01-16 23:32
2018.03.18
Видеотрансляция по сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский