Deltahun Ответов: 0

Как воспроизвести фрагмент потока 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.

0 Ответов