2012-06-29 14 views
6

Dostaję pliki m38u do strumienia na kanał telewizyjny na żywo. Próbowałem otworzyć te pliki (ponieważ są to po prostu lista plików z typem mediów "MPEG/TS") i zbudować z nich listę odtwarzania. Ale przejścia między filmami są złe, przerywa się na sekundę lub dwie przed rozpoczęciem następnego wideo.Wskazówki dotyczące strumieniowania plików m38u do aplikacji w stylu Metro (WinRT)

Nie mam nic przeciwko napisaniu kodu po stronie serwera, żeby to rozwiązać, ale potrzebuję wskazówek.

Odpowiedz

0

nie wiem jak skonfigurować playlistę, ale myślę, że to jest, jak to zrobić:

  1. Masz MediaElement
  2. subskrybować zdarzenia MediaElement.MediaEnded
  3. You przeanalizuj plik m38u i ustaw pierwszy strumień z listy na MediaElement.Source.
  4. Obsługujesz MediaElement.MediaEnded i za każdym razem, gdy właśnie ustawiasz następny strumień z listy.

Czy to prawda? Jeśli tak, to Twój problem to krok 4. Za każdym razem, gdy ustawiasz nowe źródło - MediaElement żąda strumienia z serwera i buforów przynajmniej coś, co się rozpocznie, pokazuje wideo. Chyba dlatego widzisz przejścia 3 sekund. Oto, jak rozwiązać ten problem:

  1. Masz ten sam MediaElement.
  2. Musisz zaimplementować na swoim własnym interfejsie IRandomAccessStream, który może pobrać strumień do pamięci (jeśli nie jest naprawdę duży) lub na dysku, lub po prostu strumień bufora z określonym rozmiarem bufora.
  3. Analizujesz plik m38u, zainicjalizuj najpierw swój IRandomAccessStream i ustaw jako źródło.
  4. Kiedy na przykład pierwsze wideo w 90% czasu - musisz zainicjować drugi strumień z listy odtwarzania, zacznij pobierać go z IRandomAccessStream.
  5. Kiedy MediaElement.MediaEnded zostanie zwolniony - trzeba będzie buforowany strumień, który jest gotowy do MediaElement, więc po prostu trzeba ustawić strumień od kroku 4.
+0

Próbowałem to zrobić z lokalnych plików, to dało mi ta sama powolna wydajność przejścia – Ateik

+0

lokalne pliki czasami mogą być również zbyt wolne. Spróbuj użyć pamięci. Jeśli to nie zadziała, myślę, że będziesz musiał połączyć je na serwerze dla użytkownika. – outcoldman