私のマイクからサウンドをストリーミングしようとすると、MediaStreamSource
を取得する必要があります。 したがって、まずマイクから取得したpcm波形にMediaStreamSource
を実装する必要があります。私が実装する必要があると思う少なくとも2つの方法があります。最初はMediaElementが(SilverLightの)MediaStreamSourceを再生しないのはなぜですか?
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 1ch 16ビット8kHz)です。この方法は、ここでは、ソースを設定することにより呼び出される:
WaveMediaStreamSource WaveStream = new WaveMediaStreamSource(output);
mediaElement.SetSource(WaveStream);
mediaElement.Play();
Play()
absoultely何も起こりません後。 mediaElementは少なくとものMediaStreamSource
というメソッドを一度呼び出す必要があります。しかし、それはしません。私はMediaElement
がもうMediaStreamSource
への呼び出しを行わないことに気付きました。
OpenMediaAsync
mediaElement.CurrentState
は、Opening
である。その後、それはPlaying
に変わりますが、再生されません。そしてそれはもはや変わらず、残りはPlaying
です。
すべてのアイデア?
また、[この例](http://silverlightvideochat.codeplex.com/releases/view/43242)も見てきました。これは非常に似通って実装されており、この部分はほぼ同じです。 (duration部分を除いて)違いは唯一のもので、数ミリ秒ごとに 'MediaStreamSource'を切り替えるようです。しかし、これは 'GetSampleAsync()'が決して呼び出されないことに影響するべきではありません。私がトレースした残りの部分は正確に同じデータを生成します。 –
この例では、この動作を再現することもできます.1つの 'MediaStreamSource'を割り当て、それ以降をすべてブロックすると、ストリームの' GetSampleAsync() 'メソッドには決して触れません。これはバッファリングのような臭いがします。つまり、 'MediaStreamSource'オブジェクトの特定の数が割り当てられるまで' until 'です。しかし、これは私にとって全く意味をなさない - あるいは私はそれを理解していない。誰かアイデア? –