Когда я пытаюсь транслировать звук с моего микрофона, мне нужно получить его через MediaStreamSource
.Поэтому сначала мне нужно реализовать MediaStreamSource
для волнового формата pcm, который я получаю от своего микрофона.Есть по крайней мере два метода, которые, я думаю, мне нужно реализовать.Сначала
protected override void OpenMediaAsync() {
// Create description
Dictionary<MediaStreamAttributeKeys, string> streamAttributes = new Dictionary<MediaStreamAttributeKeys, string>();
streamAttributes[MediaStreamAttributeKeys.CodecPrivateData] = output.CodecPrivateData;
audioDesc = new MediaStreamDescription(MediaStreamType.Audio, streamAttributes);
// register stream
Dictionary<MediaSourceAttributesKeys, string> sourceAttributes = new Dictionary<MediaSourceAttributesKeys, string>();
List<MediaStreamDescription> availableStreams = new List<MediaStreamDescription>();
availableStreams.Add(audioDesc);
sourceAttributes[MediaSourceAttributesKeys.Duration] = TimeSpan.FromMinutes(0).Ticks.ToString(); // whatever I put here I get the same result.
sourceAttributes[MediaSourceAttributesKeys.CanSeek] = false.ToString();
ReportOpenMediaCompleted(sourceAttributes, availableStreams);
}
Это работает очень хорошо.Мои CodecPrivateData '01000100401F0000803E0000020010000000' (PCM 1 канал 16 бит 8 кГц).Этот метод вызывается установкой источника следующим образом:
WaveMediaStreamSource WaveStream = new WaveMediaStreamSource(output);
mediaElement.SetSource(WaveStream);
mediaElement.Play();
После Play()
абсолютно ничего не происходит.Я бы предложил, чтобы mediaElement хотя бы раз вызвал метод GetSampleAsync()
из MediaStreamSource
.Но это не так.Я заметил, что MediaElement
больше не вызывает MediaStreamSource
.
В то время как OpenMediaAsync
mediaElement.CurrentState
равен Opening
.После этого он превращается в Playing
, но не играет.И тогда оно больше не меняется и остается Playing
.
Любые идеи?