Потоковая передача с веб-камеры в одноранговой сети

Мне было интересно, возможно ли создать клиент (или веб-клиент), который может подключить двух пользователей, а затем отправляет их поток с веб-камеры друг другу. Это должно произойти без использования Red5 или любого другого сервера flash/media. Какой протокол я могу использовать? Какой апи и тд...


person dierre    schedule 26.01.2010    source источник
comment
На самом деле я некоторое время работал над этим со своим старшим дизайнером. Я не нашел хорошего решения. В итоге я извлек данные с веб-камеры с помощью DirectShow и отправил данные с помощью простого протокола UDP, который я создал (что-то вроде RTP).   -  person Will    schedule 27.01.2010


Ответы (4)


В качестве очень простого метода посмотрите учебники по UDP:

http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.aspx

Если UDP окажется слишком ненадежным (он не гарантирует, что данные прибудут туда, куда они отправляются), вы также можете попробовать TCP-соединения.

Однако одна из самых больших проблем, с которой вы столкнетесь, — это попытка пройти через NAT. Большинство брандмауэров будут блокировать входящие данные, если перед этим не будет установлено установленное соединение. Вы можете использовать UPnP, чтобы обойти это, но это, вероятно, потребует немного кода:

http://www.codeproject.com/KB/IP/upnpnattraversal.aspx

Надеюсь это поможет. С UDP вы смотрите примерно на 10 строк кода для отправки и получения данных, с TCP это немного больше, но надежнее. Google оба из них для получения дополнительной информации.

Оттуда это довольно просто. Вы получаете данные с веб-камеры. Сохраните его в MemoryStream (System.IO) как .jpg. Затем отправьте эти данные через TCP или UDP.

person Timothy Baldridge    schedule 26.01.2010

Скорее всего, вы захотите использовать TCP или UDP напрямую и отправлять/получать необработанные байты. Любые протоколы более высокого уровня будут просто ненужными накладными расходами.

person Peter    schedule 26.01.2010
comment
Стоит прочитать некоторые другие пункты ответов о NAT - по крайней мере одному из клиентов необходимо будет открыть надежный порт с известным адресом / номером, к которому может подключиться другой. - person Peter; 28.01.2010

Я хочу добавить одну вещь: чтобы два клиента, оба за своими брандмауэрами, общались друг с другом с помощью UDP, вам нужно выполнить обход NAT. Так работает Скайп.

статья STUN

person unclepaul84    schedule 26.01.2010

Adobe Stratus позволит вам это сделать.

person user478419    schedule 16.12.2010