public class StreamSourceTest : MediaStreamSource
{
private Guid guid = Guid.NewGuid();
private MediaStreamDescription videoDesc;
protected override void OpenMediaAsync()
{
List<MediaStreamDescription> availableStreams = new List<MediaStreamDescription>();
Dictionary<MediaStreamAttributeKeys, string> streamAttributes = new Dictionary<MediaStreamAttributeKeys, string>();
streamAttributes[MediaStreamAttributeKeys.VideoFourCC] = "RGBA";
streamAttributes[MediaStreamAttributeKeys.Height] = 150.ToString();
streamAttributes[MediaStreamAttributeKeys.Width] = 150.ToString();
this.videoDesc = new MediaStreamDescription(MediaStreamType.Video, streamAttributes);
availableStreams.Add(videoDesc);
Dictionary<MediaSourceAttributesKeys, string> sourceAttributes = new Dictionary<MediaSourceAttributesKeys, string>();
sourceAttributes[MediaSourceAttributesKeys.Duration] = TimeSpan.FromSeconds(0).Ticks.ToString(CultureInfo.InvariantCulture);
sourceAttributes[MediaSourceAttributesKeys.CanSeek] = false.ToString();
ReportOpenMediaCompleted(sourceAttributes, availableStreams);
return;
}
Random rand = new Random();
private long time = 0;
byte[] buffer = new byte[150 * 150 * 4];
protected override void GetSampleAsync(MediaStreamType mediaStreamType)
{
Dictionary<MediaSampleAttributeKeys, string> emptyDictionary = new Dictionary<MediaSampleAttributeKeys, string>();
rand.NextBytes(buffer);
MemoryStream stream = new MemoryStream(buffer);
//stream.Write(buffer, 0, buffer.Length);
if (mediaStreamType == MediaStreamType.Video)
{
this.time += (int)TimeSpan.FromSeconds((double)1 / 24).Ticks;
MediaStreamSample mediaStreamSample = new MediaStreamSample(
this.videoDesc,
stream, 0, stream.Length,
this.time,
emptyDictionary
);
this.ReportGetSampleCompleted(mediaStreamSample);
}
}
protected override void CloseMedia()
{
}
protected override void GetDiagnosticAsync(MediaStreamSourceDiagnosticKind diagnosticKind)
{
throw new NotImplementedException();
}
protected override void SeekAsync(long seekToTime)
{
ReportSeekCompleted(seekToTime);
}
protected override void SwitchMediaStreamAsync(MediaStreamDescription mediaStreamDescription)
{
throw new NotImplementedException();
}
{
private Guid guid = Guid.NewGuid();
private MediaStreamDescription videoDesc;
protected override void OpenMediaAsync()
{
List<MediaStreamDescription> availableStreams = new List<MediaStreamDescription>();
Dictionary<MediaStreamAttributeKeys, string> streamAttributes = new Dictionary<MediaStreamAttributeKeys, string>();
streamAttributes[MediaStreamAttributeKeys.VideoFourCC] = "RGBA";
streamAttributes[MediaStreamAttributeKeys.Height] = 150.ToString();
streamAttributes[MediaStreamAttributeKeys.Width] = 150.ToString();
this.videoDesc = new MediaStreamDescription(MediaStreamType.Video, streamAttributes);
availableStreams.Add(videoDesc);
Dictionary<MediaSourceAttributesKeys, string> sourceAttributes = new Dictionary<MediaSourceAttributesKeys, string>();
sourceAttributes[MediaSourceAttributesKeys.Duration] = TimeSpan.FromSeconds(0).Ticks.ToString(CultureInfo.InvariantCulture);
sourceAttributes[MediaSourceAttributesKeys.CanSeek] = false.ToString();
ReportOpenMediaCompleted(sourceAttributes, availableStreams);
return;
}
Random rand = new Random();
private long time = 0;
byte[] buffer = new byte[150 * 150 * 4];
protected override void GetSampleAsync(MediaStreamType mediaStreamType)
{
Dictionary<MediaSampleAttributeKeys, string> emptyDictionary = new Dictionary<MediaSampleAttributeKeys, string>();
rand.NextBytes(buffer);
MemoryStream stream = new MemoryStream(buffer);
//stream.Write(buffer, 0, buffer.Length);
if (mediaStreamType == MediaStreamType.Video)
{
this.time += (int)TimeSpan.FromSeconds((double)1 / 24).Ticks;
MediaStreamSample mediaStreamSample = new MediaStreamSample(
this.videoDesc,
stream, 0, stream.Length,
this.time,
emptyDictionary
);
this.ReportGetSampleCompleted(mediaStreamSample);
}
}
protected override void CloseMedia()
{
}
protected override void GetDiagnosticAsync(MediaStreamSourceDiagnosticKind diagnosticKind)
{
throw new NotImplementedException();
}
protected override void SeekAsync(long seekToTime)
{
ReportSeekCompleted(seekToTime);
}
protected override void SwitchMediaStreamAsync(MediaStreamDescription mediaStreamDescription)
{
throw new NotImplementedException();
}
}
//MediaElement me = new MediaElement() { Width = 150, Height = 150, Margin = new Thickness(0, 0, 0, 10) };
//me.SetSource(new StreamSourceTest());