2011-08-21 73 views
9

Napisałem usługę WCF, która przesyła pliki multimedialne. Teraz piszę aplikację WPF, która zużywa tę usługę i dopiero się dowiedziałem, że MediaElement nie przyjmuje obiektów Stream jako parametrów wejściowych dla właściwości source.Odtwarzanie strumieniowego wideo w WPF

Przez ostatnie dwa dni prowadziłem Googling i analizowałem różne opcje, w tym widoki Silverlight wewnątrz WPF, formanty VLC ActiveX, VideoRendererElement i WPFMediaKit. Niestety utrudniło mi brak dokumentacji i/lub przykładów i tak naprawdę nie poczyniono żadnych postępów. Nie pomaga też fakt, że to jest pierwszy raz, kiedy używam WPF. Mówiąc prościej, to, czego szukam, to coś, co zawiera dokumentację lub przykłady demonstrujące przesyłanie strumieniowe w WPF i, jeśli to możliwe, jest również łatwe do wdrożenia. Rozwiązanie nie musi być idealne; wszystko, czego potrzebuję, to coś, co działa.

Odpowiedz

5

Użytkownik może hostować HttpListener w aplikacji WPF i dostarczać strumień, który odbierasz z usługi WCF za pośrednictwem adresu URL obsługiwanego przez HttpListener do MediaElement.Source.

Inne opcje (chociaż wydaje się, że uznał je):

Nie wiem, czy jest to opcja dla Ciebie, ale istnieją biblioteki komercyjne do multimediów, w tym do odtwarzania wideo ze strumieni w WPF:

+0

Usługa WCF używa powiązań TCP i działa poza usługami IIS jako zarządzana usługa Windows. Czy mógłbym użyć TcpListener zamiast HttpListener, aby uzyskać adres URL strumienia przychodzącego? – rafale

+0

Zakładam, że twoja usługa WCF zwraca aa IStream - JEŻELI to założenie jest prawdziwe, to po prostu użyłbyś klasy proxy WCF, by pobrać Strumień, a następnie dostarczyć ten strumień do bibliotek, o których wspomniałem i lub "przekazać" do adresu URL http w twojej aplikacji z HttpListener i powiedz MediaElement, aby używał tego adresu URL http ... Zaleca się używanie jednej z bibliotek ... – Yahia

+0

Nigdy wcześniej nie używałam klasy HttpListener, więc nie do końca rozumiem, w jaki sposób przekazać strumień do adresu URL HTTP. Czy to masz na myśli? http://pastebin.com/iELVyybp – rafale

0

Jest sposobem osiągnięcia tego celu przy użyciu pseudofiles, czyli emulacja wywołań systemowych plików.

Po przejściu ścieżki odtwarzacz mediów najpierw otwiera plik (wywoływany jest CreateFile), a następnie odczytuje z niego dane (wywoływany jest plik ReadFile), przesuwa pozycję w pliku (wywoływany jest SetFilePointer).

Po prostu porusza się w pliku wideo i odczytuje wymagane bloki.

Na przykład tutaj opisane to podejście (plik połączeń tylko mapowane do odpowiednich metod iStream: ReadFile -> Read, SetFilePointer -> Szukajcie, CreateFile -> Clone itd.): http://boxedapp.com/encrypted_video_streaming.html

Powiązane problemy