Почему потоковая передача flac http не работает?

#windows #http #streaming #directshow #multimedia

#Windows #http #потоковая передача #директшоу #Мультимедиа

Вопрос:

У меня есть простое потоковое приложение http, которое принимает запрос GET URL и возвращает заголовок HTTP «content-type», а затем запрашивает данные файла. Он работает на локальном http-сервере.

Таким образом, я могу прослушивать в плеере (например)

http://localhost:8080/music/metallica.mp3

Он воспроизводится как обычный http-поток в любом проигрывателе (VLC, MPlayer, WMP, Winamp).

Однако, почему я пытаюсь транслировать FLAC таким образом, это не работает в MPlayer и WMP (я использую тип контента «audio / flac»).

Насколько я понимаю, проблема связана с фильтрами DShow (построитель графиков не может найти правильный исходный фильтр и / или подключить его к декодеру flac).

Не может ли кто-нибудь подсказать, где мне копать, прежде чем я начну отладку фильтров DShow? 🙂

UPD:

Я обнаружил, что установка точного размера потока (через длину содержимого) решает проблему. Однако я бы предпочел этого не делать. Есть идеи?

Ответ №1:

Потоковая передача из сетевого ресурса отличается от потоковой передачи из файла. Предполагается, что протокол потоковой передачи реализован между сервером и хостом проигрывателя, и Windows не предлагает отличную поддержку потокового клиента в DirectShow API из коробки: вам нужен дополнительный фильтр, который поддерживает этот вид потоковой передачи.

Комментарии:

1. хм… я делаю потоковую передачу через http 🙂 mp3 работает нормально, flac — нет. Поэтому я предполагаю, что декодер flac просто не может подключиться к исходному фильтру, который использует декодер mp3… но как это решить. Я не хочу писать source filter, потому что он зависит от платформы (потоковое приложение на Java) и требует установки.

2. Есть способы потоковой передачи через HTTP: это может быть протокол RTSP / RTP, туннелированный через HTTP, это может быть доступ к сетевому ресурсу таким образом, как если бы это был удаленный файл. В DiretShow нет стандартных фильтров для потоковой передачи HTTP.

3. Звучит логично, однако dshow может каким-то образом воспроизводить mp3-файлы из чистого Apache без какого-либо применяемого протокола поверх http-транспорта. GraphEdit доказывает это, когда я передаю ему http-url, он правильно отображает график.

4. Это не работает нормально. Возможно, он работает в Windows XP через фильтр, который больше не поддерживается, или у вас установлен сторонний фильтр.

5. URL-адрес по-прежнему воспроизводится в проигрывателе Windows Media в Windows 7, но он выполняется вне DirectShow: для его воспроизведения WMP использует Media foundation.