|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Запуск плеера по сети
Надо написать сервер-клиент для запуска (вспроизведения, остановки) видео на удаленном компе. Как написать самый простой плеер я знаю, в инете полно исходников и уроков, а вот как управлять им по сети - ничего не могу найти.
Смотрел кучу форумов и ничего не нашел. Надо с одного компа запускать видео одновременно на других. Требуется только управление написанным плеером. Помогите кто знает. Плиз... |
#2
|
||||
|
||||
мм... выбор файла тоже надо осуществлять по сети, или это можно сделать заранее, при установке и настройке? И для чего оно надо?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
Цитата:
Я вообще думаю разумнее сделать файл-конфигурацию, в котором указано какому плееру (клиенту) какое видео запустить, а в сервере выбирается этот конфиг и запускается все что там прописано. Для чего это надо? У нас кинотеатр небольшой, там три проектора составлены в одну панораму. Фильм разбит на три файла (девый, центр, правый). Вот и требуется эти три файла запустить на трех компах одновренменно, чтобы картинка на какой-либо проекции не затупила... |
#4
|
||||
|
||||
Можно попробовать на каждом компе найти окно плеера и нажать кнопку "start" (см. FindWindow, MouseEvent или SetCursorPos+GetWindowFromPoint+SendMessage)
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось 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; не пугаться - клиент будет выглядеть "зависшим" пока к нему не придут данные, а сервер - пока к нему не подключатся все три клиента. Это простейший вариант на АПИ. Взято по большей части из книжки Фленова "Делфи глазами хакера". jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось 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 при установке программы. На мой взгляд самый простой способ.
jmp $ ; Happy End! The Cake Is A Lie. |