![]() |
|
Модераторы: feodorv |
![]()
|
|
| Incinerated |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
Есть видео-поток:
можно ли его сразу передавать его кусками через сокеты? если можно то как? Если нельзя, то можно ли сами кадры передавать, т.е. дополним этот код следующим:
Можно ли теперь передавать по сети кадры на другой комп? |
||||
|
|||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: нет Всего: 17 |
а в чем проблема? берем байты по адресу frame и передаем.
только лучше, наверно, будет файл кусками передавать, а на той стороне уже декодировать (файл то все-таки сжат - меньше передавать). |
|||
|
||||
| Incinerated |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
есть 2 вопроса: 1. Как можно по байтово передавать frame. 2. Будет ли проигрыватся на клиентской стороне кусок файла? Ну я буду передавать кусками, он будет принимать, и будет ли он отображать корректно картинку? и вообще сможет ли он открыть файл. Но с файлом мне кажется будет пинг большой, т.к. скорее всего его нужно будет сохранять и переоткрывать функцией AVIStreamOpenFromFile(), а работа с жестким диском всегда медленнее чем с оперативкой, а у меня клиентов может быть хоть 20... Есть ли какие нибудь выходы из этой ситуации? |
|||
|
||||
| opjox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: нет Всего: 14 |
||||
|
||||
| Incinerated |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
работу с сокетами я знаю. Я не знаю как мне frame привести к нужному виду...Есть предположение - использовать memcpy... |
|||
|
||||
| opjox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: нет Всего: 14 |
С AVI прежде не работал, сейчас немого погуглив наткнулся на http://pmg.org.ru/nehe/nehe35.htm , а в нем на такой код (мои коментарии в /**/):
P.S. в ту статью не вчитывался, возможно выводы мои поспешны, но направление вроде верное |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: нет Всего: 17 |
извеняюсь, не доглядел... надо еще AVIStreamGetFrame вызвать, а потом можно передавать (т.е. передаем по фреймам) диск жалко, а сетевуху нет? или воспользоваться AVIStreamRead. я, правда, хз как оно все работает, сам этим не занимался, читаю MSDN... если AVIStreamRead читает данные в сжатом формате - то вообще замечательно. на сервере открываем файл, читаем его с помощью AVIStreamRead. передаем данные клиенту. на клиенте создаем стрим (CreateEditableStream) и пишим туда, что пришло с сокета (AVIStreamWrite). а потом открываем фреймы. |
|||
|
||||
| Incinerated |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
AVIStreamRead вроде бы что-то делает, т.е. преобразует в нужный мне формат, чтобы передать... А вот как назад это вопроизвести, пускай даже не по сети, просто на одиночном компьюетер, вот это проблема...Может я чего - то не понимаю или что нибудь не так делаю.
вот теоретически в pdata должна быть видео информация о авишке, т.е. тоже самое что и AviStreamInfo... Насколько я знаю структуру видео файлов, но при попытке преобразовать это в AVISTREAMINFO ничего не происходит, записывается NULL. Вообщем я вообще расстерялся, как это можно сделать:(... |
||||
|
|||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: нет Всего: 17 |
судя по параметрам это не так. я так понимаю, на сервере надо вызвать AviStreamInfo, получать от туда данные, передавать эту структуру клиенту после этого вызывать AVIStreamRead и передавать данные клиенту - это поидее кадры. на клиенте CreateEditableStream - создаем новый стрим EditStreamSetInfo - записываем инфу о стриме AVIStreamWrite - записываем кадры. дальше уже показываем этот стрим... |
|||
|
||||
| Incinerated |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
а на сервере мне что делать?! получается мне всю структуру AVISTREAMINFO разбивать на подполя и передавать каждое поле как число? потому что ка киначе сделать я не знаю... И дальше получается мне нужно вызывать функцию AviStreamRead и результат передавать, так? |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: нет Всего: 17 |
проще сделать так: AVISTREAMINFO asi; ... send(..., &asi, sizeof(asi)); можно было б уже попробывать а вообще чтобы понять как правильно передавать AVI, надо знать как правильно его отображать и как правильно его редактировать например, если вы из 2-х AVI файлов сможете склеить один новый, который будет показывать: 1-я секунда: первая секунда файла1 2-я секунда: первая секунда файла2 3-я секунда: вторая секунда файла1 ... то имху проблем с передачей у вас не будет, так что есть смысл покопать в эту сторону. |
|||
|
||||
| Incinerated |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
вообщем не очень все получается. Вот код.
вроде почти как бы получилось, а вроде и ничего, т.к. черный квадрат из буфера никак не пойдет, да и в стрим не записывается почему то, даже если получится pdata воспроизвести, то как записать в стрим не понятно. Может есть какие нибудь идеи? |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: нет Всего: 17 |
вот шо у меня получилось:
но вообще, это как-то тупа наверно. каждый раз открывать/закрывать файл... имху должен быть способ лучше. |
|||
|
||||
| Incinerated |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
вообщем вот что в итоге получилось, но во-первых показывает черный прямоугольник, и во-вторых каждый раз на разном этапе на строчке
result = AVIStreamWrite(pv1, z-stru1.samploffset, 1, stru.buffer, stru.bytes, AVIIF_KEYFRAME, NULL, NULL); вылетает красная ошибка. Почему я понять не могу. Вот сервер:
вот клиент
т.е. вроде бы тоже самое, только разбил на сервер и клиент и ни фига не фурычит:(. |
||||
|
|||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: нет Всего: 17 |
||||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |