Как воспроизвести фрагмент потока AAC с помощью naudio в C#?
Вместо загрузки всего загруженного аудиоконтента с Google Диска (расширение может быть m4a) Я хотел бы играть в качестве буферизованного контента (например, на YouTube, Spotify и т. д.).
Я использую диск API-интерфейс REST для того, чтобы скачать фрагмент.
//Maybe I should return MemoryStream public Stream GetStreamChunk(string fileId, RangeHeaderValue range) { var getrequest = driveService.Files.Get(fileId); var stream = new MemoryStream(); getrequest.DownloadRange(stream, range); return stream; }
Что я уже пробовал:
public long KB(long value) { return value * 1024; }
Прежде всего, я хотел бы сыграть просто кусок.
long from = 0; long to = KB(500); RangeHeaderValue range = new RangeHeaderValue(from, to); Stream stream = GetStreamChunk(file.Id, range); using (WaveStream aacStream = new BlockAlignReductionStream( WaveFormatConversionStream.CreatePcmStream( new StreamMediaFoundationReader(stream)))) { using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback())) { //aacStream.CurrentTime = new TimeSpan(0, 0, 0); waveOut.Init(aacStream); waveOut.Play(); } }
К сожалению, я получаю "System.Runtime.InteropServices.COMException" исключение при воспроизведении вызова():
В случае, если это поток: тип байтового потока данного URL-адреса не поддерживается. (Исключение из HRESULT: 0xC00D36C4)
В случае, если это MemoryStream: операция не разрешена для текущей позиции.
Gerry Schmitz
"Кусок" не является "допустимым" аудиофайлом; только если вы его "разделили". А "чанкинг" - это перебор для аудиофайла. Элемент Media используется для управления воспроизведением.
Deltahun
Спасибо! Загруженное содержимое может быть большими файлами. Есть ли какой-нибудь способ загрузить диапазон в виде разделенного потока?
Gerry Schmitz
Большинство коммерческих сайтов "сейчас" позволяют вам выбрать "сегменты" (промежутки времени) из выбранного контента. Содержимое разделяется на сервере, и загружается запрошенный "сегмент".
Deltahun
Есть ли какой-нибудь способ сделать этот метод с помощью google drive api? Возможно ли это только с собственным api?
С другой стороны, я не могу воспроизводить поток в wpf с помощью "Media Element" без SilverLight.