Лучший отвечающий
Реализация потоковой передачи видео по сети (WCF)

Вопрос
-
Немного воды...
Работаю с распознаванием лиц для диплома. Хочется поближе познакомиться с технологией WCF.
(если кратко, то хочу чтобы одно приложение подкачивало видео файл с локального компьютера - и передавало обрабатывающей программе (эмуляция видеопотока с камеры))
Для своих целей при обработки я буду использовать Emgu (Net обертка над openCV).
Суть:
И самое простое что пришло в голову - это передавать видео по кадрам - как раз удобно - можно будет принимать и сразу обрабатывать
Но хотелось бы узнать как это люди реализуют это по другому, best practies так сказать. Возможна ли передача потоком (я нашел такую в Silverlite - Smooth Streaming)
29 марта 2012 г. 19:08
Ответы
-
-
Здравствуйте.
Да скорей всего также и передают видео по фреймам (т.е. кадрам), сам фреймы скорей всего сжаты каким-либо кодеком, чтобы объем их был меньше. А вся передача данных идет общим потоком, из которого, например, по специальным разделителям выделяются кадры. Smooth Streaming заключается в том, что качество картинки динамически адаптируется под пропусную способность вашего канала связи.
Вот пример как происходит захват видео с веб камеры - Versatile WebCam C# library
Для связи [mail]
- Помечено в качестве ответа vvkuznetsov 30 марта 2012 г. 23:28
30 марта 2012 г. 8:49Модератор
Все ответы
-
Здравствуйте.
Да скорей всего также и передают видео по фреймам (т.е. кадрам), сам фреймы скорей всего сжаты каким-либо кодеком, чтобы объем их был меньше. А вся передача данных идет общим потоком, из которого, например, по специальным разделителям выделяются кадры. Smooth Streaming заключается в том, что качество картинки динамически адаптируется под пропусную способность вашего канала связи.
Вот пример как происходит захват видео с веб камеры - Versatile WebCam C# library
Для связи [mail]
- Помечено в качестве ответа vvkuznetsov 30 марта 2012 г. 23:28
30 марта 2012 г. 8:49Модератор -
-
> Возможна ли передача потоком
см. WCF Потоковая передача сообщений
пытаясь сделать потоковую передачу, я столкнулся с проблемой, что у меня не получается правильно настроить сервис - в настройках указываю одно, на деле получается другое.
Пример приведу на попытке создания WCF приложения (пробовал и для WCF приложения потока данных) либо в Тестовом клиенте WCF или в другом проекте добавляем ссылку на эту службу, и в уже сгенерированном файлике app.config увидеть что transferMode="Buffered"
и я постарался задокументировать все что я делал
и ссылка на тестовый проект (WcfStreamTest) https://skydrive.live.com/?cid=3302bd30fa4d7d41#cid=3302BD30FA4D7D41&id=3302BD30FA4D7D41%21107
несложный код (делал по http://msdn.microsoft.com/ru-ru/library/ms789010.aspx )
[ServiceContract] public interface IVideoTransfer { [OperationContract] bool SetData(Stream stream); } public class VideoTransfer : IVideoTransfer { public bool SetData(Stream stream) { throw new NotImplementedException(); } }
и файл Web.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IVideoTransfer" transferMode="Streamed" maxReceivedMessageSize="67108864"> </binding> </basicHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior> <!-- Чтобы избежать раскрытия сведений о метаданных, присвойте приведенному ниже параметру значение false и удалите конечную точку метаданных перед развертыванием --> <serviceMetadata httpGetEnabled="true"/> <!-- Чтобы при сбое получать подробные сведения об исключении для целей отладки, установите для нижеприведенного параметра значение true. Перед развертыванием установите значение false, чтобы избежать раскрытия информации об исключении --> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
в итоге мы получаем либо
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IVideoTransfer" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost:63618/IVideoTransfer.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IVideoTransfer" contract="ServiceReference1.IVideoTransfer" name="BasicHttpBinding_IVideoTransfer" /> </client> </system.serviceModel> </configuration>
либо можно еще посмотреть вот в таком виде
http://www.c-sharpcorner.com/uploadfile/afenster/wcf-streaming-large-data-files/ - тут тоже самое, только указаны немного другие настройки в Web.config
В общем я абсолютно не понимаю что я делаю не так.
- Изменено vvkuznetsov 31 марта 2012 г. 1:10 Добавил ссылку на исходный проект
31 марта 2012 г. 0:23 -
В принципе, можно даже забыть об этом - мне только сейчас в голову пришло, что я абсолютно не понимаю что бы я делал, если бы организовал потоковую передачу... Ее в конце концов можно руками написать. Но что делать с этими байтами - это же не набор картинок, я еще не знаю как с этим работать. Так что я думаю остановлюсь на первом варианте.
Но если кто-то хочет мне предложить - рад буду выслушать.
И да, хотелось бы понять в чем причина бага, описанного выше.
31 марта 2012 г. 0:49 -
я нашел хороший пример, где по сети передаются файлы в потоковом режиме.. но там описание wcf сервиса и его запуск происходит полностью в ручном режиме, - так что разобраться в случившемся это не помогает :(
http://www.abhisheksur.com/2010/09/progress-streamed-file-download-and.html
- Изменено vvkuznetsov 31 марта 2012 г. 2:43 нашел еще один пример
31 марта 2012 г. 1:30 -
> пытаясь сделать потоковую передачу, я столкнулся с проблемой, что у меня не получается правильно настроить сервис
см. Streaming over HTTP with WCF (есть пример)
31 марта 2012 г. 9:48