Проблемы с воспроизведением данных AAC Raw на Silverlight (Windows Phone)

Мне нужно воспроизводить звук AAC LC, который поступает из прямой трансляции. Чтобы добиться этого, я реализовал MediaStreamSource.

Когда я получаю первые пакеты потока, я устанавливаю источник MediaElement в мой MediaStreamSource. Кажется, что все работает нормально: вызывается OpenMediaAsync -> сообщается с помощью ReportOpenMediaCompleted, затем вызывается GetSampleAsync -> сообщается с помощью ReportGetSampleCompleted, НО, при 10-м вызове GetSampleAsync ReportGetSampleCompleted вызывает NullReferenceException.

Вот мой CodecPrivateData:

var waveFormat = new AACWaveFormat();
waveFormat.FormatTag = 0xFF;
waveFormat.Channels = 2; // For my stream is always stereo
waveFormat.Frequency = 44100; //For my stream is always 44Khz
waveFormat.BitsPerSample = 16;  //For my stream is always 16bit
waveFormat.BlockAlign = waveFormat.Channels * waveFormat.BitsPerSample / 8; //is this true formula?
waveFormat.AverageBytesPerSecond = waveFormat.Frequency * waveFormat.BlockAlign; //is this true formula?  because usually this value is 176400 or 1411Kbps is this real value for sound?
waveFormat.ExtraDataSize = 2; //usually, but i read these values from first packet of stream
waveFormat.ExtraData = AudioSpecificConfig; //AudioSpecificConfig usually 2 bytes length, readed from stream.

Первый пакет потока всегда AACSequenceHeader - где я читаю мои CodecPrivateData и AudioSpecificConfig. Все остальное - AACRaw.

Мой CodecPrivateData выглядит такFF00020044AC000010B102000400100002001210,

Мой GetSampleAsync

protected override void GetSampleAsync(MediaStreamType mediaStreamType)
{
    var audioStreamDescription = new MediaStreamDescription(MediaStreamType.Audio, AudioStreamAttibutes);  //AudioStreamAttibutes is field that contains data filled on OpenMediaAsync step.
    //using (var memoryStream = new MemoryStream(AudioPackets[0].Data))
    var memoryStream = new MemoryStream(AudioPackets[0].Data);
    ReportGetSampleCompleted(new MediaStreamSample(audioStreamDescription, memoryStream, 0, AudioPackets[0].Data.Length, TimeSpan.FromMilliseconds(GetAudioSampleCalls++ * 32).Ticks, new Dictionary<MediaSampleAttributeKeys, String>()));  //throws NullReferenceException, when debugger stops i can be see that all passed params is not null!
}

Проблема здесь в том, что я не знаю никакой метки времени и не знаю, может ли это быть проблемой.

И наконец то, что Data поле? Data поле содержит все полученные аудио RawAAC как Byte[] что я извлекаю из AudioTag. (Увидеть E.4.2.2 AACAUDIODATA по адресу http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf)

0 ответов

Другие вопросы по тегам