Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.10.2010, 20:58
gold-concert gold-concert вне форума
Прохожий
 
Регистрация: 17.07.2010
Сообщения: 12
Репутация: 10
Восклицание Запуск плеера по сети

Надо написать сервер-клиент для запуска (вспроизведения, остановки) видео на удаленном компе. Как написать самый простой плеер я знаю, в инете полно исходников и уроков, а вот как управлять им по сети - ничего не могу найти.
Смотрел кучу форумов и ничего не нашел.
Надо с одного компа запускать видео одновременно на других. Требуется только управление написанным плеером.
Помогите кто знает. Плиз...
Ответить с цитированием
  #2  
Старый 27.10.2010, 02:03
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

мм... выбор файла тоже надо осуществлять по сети, или это можно сделать заранее, при установке и настройке? И для чего оно надо?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 27.10.2010, 11:57
gold-concert gold-concert вне форума
Прохожий
 
Регистрация: 17.07.2010
Сообщения: 12
Репутация: 10
По умолчанию

Цитата:
мм... выбор файла тоже надо осуществлять по сети, или это можно сделать заранее, при установке и настройке?

Я вообще думаю разумнее сделать файл-конфигурацию, в котором указано какому плееру (клиенту) какое видео запустить, а в сервере выбирается этот конфиг и запускается все что там прописано.
Для чего это надо? У нас кинотеатр небольшой, там три проектора составлены в одну панораму. Фильм разбит на три файла (девый, центр, правый).
Вот и требуется эти три файла запустить на трех компах одновренменно, чтобы картинка на какой-либо проекции не затупила...
Ответить с цитированием
  #4  
Старый 27.10.2010, 16:47
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Можно попробовать на каждом компе найти окно плеера и нажать кнопку "start" (см. FindWindow, MouseEvent или SetCursorPos+GetWindowFromPoint+SendMessage)
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 27.10.2010 в 16:50.
Ответить с цитированием
  #5  
Старый 28.10.2010, 22:05
gold-concert gold-concert вне форума
Прохожий
 
Регистрация: 17.07.2010
Сообщения: 12
Репутация: 10
По умолчанию

Умом понимаю как сделать, но вот знаний не хватает..
Надо как-то сделать форму с плеером WindowsMedia, думаю этого хватит для avi и через клиент-сервер сделать просто отправку команды Play. Но вот как работать с клиент-сервером - понятия не имею....
Ответить с цитированием
  #6  
Старый 29.10.2010, 20:37
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Пишешь клиента и сервера, хоть на WinSock. клиенты - на компах с проекторами. сервер - у тебя. Сначала подключаешься к серверу со всех трех компов, потом при нажатии на кнопку на сервере - отсылает всем троим например "1". Клиент же как только получает этот заветный "1" ставит мышь на кнопку PLAY в виндус медия плеере и жмет на нее.

пример на апи:
Сервер:
Код:
uses WinSock;

var 
    sServer: TSOCKET
    sClient: array[0..2] of TSOCKET;
    serverAddr, clientAddr: sockaddr_in;
    isize, i : integer;

...

begin
if WSAStartup(MAKEWORD(2, 0), aboutWSA) = 0 then
    ;

  sServer := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
  if sServer = INVALID_SOCKET then
  begin
    Form19.Memo1.Lines.add('Ошибка создания сокета');
    exit;
  end;

  imode := 1;
  iOcTLsocket(sServer, FIONBIO, imode);

  serveraddr.sin_addr.S_addr := htonl(INADDR_ANY);
  serveraddr.sin_family := AF_INET;
  serveraddr.sin_port := htons(12345);  // порт, любой

  if bind(sServer, serveraddr, sizeof(serveraddr)) = SOCKET_ERROR then
  begin
    Form19.Memo1.Lines.add('Ошибка бинд');
    exit;
  end;

  if listen(sServer, 4) = SOCKET_ERROR then
  begin
    Form19.Memo1.Lines.add('Ошибка прослушки');
    exit;
  end;

  Form19.Memo1.Lines.add('Server Started');

  isize := sizeof(clientaddr);

  for i:=0 to 2 do
  begin
    sClient[i]:=accept(sServer,clientaddr,isize)
    Form19.Memo1.Lines.Add('Подключен клиент '+inttostr(i));
  end;
end;

потом при нажатии кнопки пишешь
Код:
var i,j:byte;
...
j:=1;
for i:=0 to 2 do
   send(sClient[i],j,1,0);
...

Клиент:
Код:
uses WinSock;
...
var 
   addr:sockaddr_in;
   sClient:TSOCKET;
   isize:integer;
   j:byte;
...

begin
if WSAStartup(MAKEWORD(2, 0), aboutWSA) = 0 then
    ;
sClient:=socket(AF_INET, SOCK_STREAM,IPPROTO_IP);
if sClient = INVALID_SOCKET then
begin
  Form1.Memo1.Lines.Add('Ошибка создания сокета');
  exit;
end;
Dword(аddr.sin_addr.S_un_b) := inet_addr(PAnsiChar(st)); // st - строка с текстовым представлением IP-адреса типа '192.168.1.1'. З.Ы. лучше поискать другой метод :-) 
addr.sin_family := AF_INET;
addr.sin_port := htons(12345); // тот же порт, что на сервере

if (connect(sClient, addr, sizeof(addr)) = socket_error) then
  begin
    Form1.Memo1.Lines.Add('Ошибка подключения');
    exit;
  end;

isize := recv(sClient, j, 1, 0);
if j = 1 then
begin
//запускаем наш плеер
end;
end;

не пугаться - клиент будет выглядеть "зависшим" пока к нему не придут данные, а сервер - пока к нему не подключатся все три клиента.
Это простейший вариант на АПИ. Взято по большей части из книжки Фленова "Делфи глазами хакера".
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 29.10.2010 в 21:38.
Ответить с цитированием
  #7  
Старый 30.10.2010, 14:25
gold-concert gold-concert вне форума
Прохожий
 
Регистрация: 17.07.2010
Сообщения: 12
Репутация: 10
По умолчанию

Ого, спасиб. Сча буду разбираться. О всех удачах и неудачах напишу =)
Ответить с цитированием
  #8  
Старый 04.11.2010, 14:31
gold-concert gold-concert вне форума
Прохожий
 
Регистрация: 17.07.2010
Сообщения: 12
Репутация: 10
По умолчанию

УРА! Получилось. Правда немного не так как предлагали. Сделал на ClientSocket и ServerSocket. Пуск, стоп, пауза на ура.
Сейчас есть такая трабла. Мне как-то надо сделать плей-лист на серваке (там, где управляем плеерами).
Но сделать надо так, что есть список например:
Video 1
Video 2
Video 3 и т.д.
Но это значит, что если выбрать например Video 1, то на трех клиентах запустятся три разных файла (Video 1_1, Video 1_2, Video 1_3). Т.е. как-то где-то надо указать, какому клиенту какой файл запустить при выборе Video 2 из плей-листа. Не подскажите как сделать? Куда хоть копать...
Ответить с цитированием
  #9  
Старый 06.11.2010, 18:50
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

В принципе можно чтобы клиентам при нажатии на PLAY кидалось "VIdeo 1","Video 2","Video 3" и т.д. Соответственно каждый клиент, получив эту строку, дописывает к ней "_X" и запускает, где Х - номер клиента, записанный в файле Conf.cfg при установке программы. На мой взгляд самый простой способ.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:56.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter