![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Надо написать сервер-клиент для запуска (вспроизведения, остановки) видео на удаленном компе. Как написать самый простой плеер я знаю, в инете полно исходников и уроков, а вот как управлять им по сети - ничего не могу найти.
Смотрел кучу форумов и ничего не нашел. Надо с одного компа запускать видео одновременно на других. Требуется только управление написанным плеером. Помогите кто знает. Плиз... |
|
#2
|
||||
|
||||
|
мм... выбор файла тоже надо осуществлять по сети, или это можно сделать заранее, при установке и настройке? И для чего оно надо?
|
|
#3
|
|||
|
|||
|
Цитата:
Я вообще думаю разумнее сделать файл-конфигурацию, в котором указано какому плееру (клиенту) какое видео запустить, а в сервере выбирается этот конфиг и запускается все что там прописано. Для чего это надо? У нас кинотеатр небольшой, там три проектора составлены в одну панораму. Фильм разбит на три файла (девый, центр, правый). Вот и требуется эти три файла запустить на трех компах одновренменно, чтобы картинка на какой-либо проекции не затупила... |
|
#4
|
||||
|
||||
|
Можно попробовать на каждом компе найти окно плеера и нажать кнопку "start" (см. FindWindow, MouseEvent или SetCursorPos+GetWindowFromPoint+SendMessage)
Последний раз редактировалось Bargest, 27.10.2010 в 16:50. |
|
#5
|
|||
|
|||
|
Умом понимаю как сделать, но вот знаний не хватает..
Надо как-то сделать форму с плеером WindowsMedia, думаю этого хватит для avi и через клиент-сервер сделать просто отправку команды Play. Но вот как работать с клиент-сервером - понятия не имею.... |
|
#6
|
||||
|
||||
|
Пишешь клиента и сервера, хоть на 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;не пугаться - клиент будет выглядеть "зависшим" пока к нему не придут данные, а сервер - пока к нему не подключатся все три клиента. Это простейший вариант на АПИ. Взято по большей части из книжки Фленова "Делфи глазами хакера". Последний раз редактировалось Bargest, 29.10.2010 в 21:38. |
|
#7
|
|||
|
|||
|
Ого, спасиб. Сча буду разбираться. О всех удачах и неудачах напишу =)
|
|
#8
|
|||
|
|||
|
УРА! Получилось. Правда немного не так как предлагали. Сделал на ClientSocket и ServerSocket. Пуск, стоп, пауза на ура.
Сейчас есть такая трабла. Мне как-то надо сделать плей-лист на серваке (там, где управляем плеерами). Но сделать надо так, что есть список например: Video 1 Video 2 Video 3 и т.д. Но это значит, что если выбрать например Video 1, то на трех клиентах запустятся три разных файла (Video 1_1, Video 1_2, Video 1_3). Т.е. как-то где-то надо указать, какому клиенту какой файл запустить при выборе Video 2 из плей-листа. Не подскажите как сделать? Куда хоть копать... |
|
#9
|
||||
|
||||
|
В принципе можно чтобы клиентам при нажатии на PLAY кидалось "VIdeo 1","Video 2","Video 3" и т.д. Соответственно каждый клиент, получив эту строку, дописывает к ней "_X" и запускает, где Х - номер клиента, записанный в файле Conf.cfg при установке программы. На мой взгляд самый простой способ.
|