Я транслирую музыку из Интернета в фоновом агенте, используя собственный MediaStreamSource. В хороших сетевых условиях это работает нормально, но когда сетевое подключение неустойчиво, возникает странная проблема.
Когда дорожка начинает воспроизводиться, все проходит через первый вызов MediaStreamSource.GetSampleAsync(). Поскольку соединение нестабильно, если данных недостаточно, источник вызывает ReportGetSampleProgress(double) и возвращает результат, не сообщая о выборке. Это соответствует документации MSDN и примерам кода.
Любопытно, что дальнейших вызовов GetSampleAsync вообще нет! По мере того, как буферизация продолжается, источник продолжает ReportGetSampleProgress до тех пор, пока образец не будет готов, когда он вызывает ReportGetSampleProgress(1.0)
, чтобы указать полный буфер.
Я пробовал несколько подходов, в том числе:
ReportGetSampleCompleted
после завершения буферизации; это не удается, потому что события загрузки приходят в произвольные потоки, и этот метод, очевидно, чувствителен как к вызывающему потоку, так и к тому, находится ли вызов GetSampleAsync в стеке; неправильные обстоятельства вызова приводят к ошибкам COM.- В точном состоянии ошибки остановите и запустите BackgroundAudioPlayer: это не приведет к перезапуску потоковой передачи.
Как я могу возобновить потоковую передачу после того, как первоначальная ошибка при чтении образца зависла?