自定义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());

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值