自定义MediaStreamSource 测试

    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();
        }

    }




            //MediaElement me = new MediaElement() { Width = 150, Height = 150, Margin = new Thickness(0, 0, 0, 10) };
            //me.SetSource(new StreamSourceTest());

猜你喜欢

转载自blog.csdn.net/KAMILLE/article/details/38122105