小编Det*_*ail的帖子

UWP - 通过Socket到MediaElement将WebCam流式传输 - 破碎的图片?

背景

我编写的代码记录了来自网络摄像头的视频片段,将它们写入内存流,然后通过Socket连接传输数据,然后将其重新组合成视频并在媒体元素上播放.

最终目标是创建一个婴儿监视器系统,服务器/摄像头运行在Windows IOT Raspberry Pi上,以及我的女朋友和我可以在我们的手机或笔记本电脑上查看的UWP应用程序.除了从房子的另一部分观看摄像机外,我们还能够在我们其中一个人离家时登录,并且我还会及时连接PIR运动传感器和警报系统,但首先是第一.

整个系统工作得相当好,视频中有5秒的延迟,这是我可以接受的(现在),并且使用MediaPlaybackList,视频以相当恒定的速率无缝流式传输(尽可能无缝连接)现在)视频之间的转换.MediaPlaybackList在播放时删除项目,使内存占用保持相对恒定.

问题

当视频在客户端播放时,它会频繁出现但是随机的部分是破碎的图片.它没有任何模式,也不是我能找到的模式,我能描述的唯一方法是将图片的一部分水平分割成两半,两半交换,图片的右侧显示在左边,反之亦然.它就像一个闪烁,因为在破碎的位中只显示了几分之一秒,因为另一个在图片的其他地方出现了大约一秒左右.

这是一个例子:

在这里你可以看到框架的一部分处于错误的位置 现在,这里有几个有趣的点......

1)在我开始使用MediaPlaybackList排队数据流之前,我使用的方法是从传入的套接字流中提取每个视频,将其作为StorageFile保存到本地磁盘,然后排队这些StorageFiles,按顺序播放它们然后删除它们(我仍然有源代码控制中的这个代码的版本,我可以挖掘出来,但我不喜欢创建和销毁StorageFiles的想法,因为它看起来非常低效).然而,使用这种方法并没有导致我现在看到的破碎的图片...这让我相信视频本身很好,并且这可能是它被重新组合并流式传输的方式的问题媒体元素?

2)我的女朋友的猫把网络摄像头(微软Lifecam HD-3000)撞到了一边,没有我意识到,我没有意识到,直到我运行服务器并注意到图片是90度角...有趣(和这令人费解的是,传递给客户的图片没有像我上面描述的那样分解.我能看到的唯一不同之处在于图片的尺寸是480 x 640(来自相机坐在它的侧面),而不是标准的640 x 480.这意味着什么,我不确定......

关于这个问题的想法

  • 与视频的大小/尺寸有关(它在侧面播放得很好,所以它与此有关)?
  • 与比特率有关?
  • 与客户端重新组装字节的方式有关吗?
  • 与流的编码有关?

资源

这里有一些我认为可能相关的代码片段,完整的解决方案源可以在GitHub上找到,这里是: Video Socket Server .

服务器

while (true)
{
    try
    {
        //record a 5 second video to stream
        Debug.WriteLine($"Recording started");
        var memoryStream = new InMemoryRandomAccessStream();
        await _mediaCap.StartRecordToStreamAsync(MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Vga), memoryStream);
        await Task.Delay(TimeSpan.FromSeconds(5));
        await _mediaCap.StopRecordAsync();
        Debug.WriteLine($"Recording finished, {memoryStream.Size} bytes");

        //create a CurrentVideo object to hold stream data and give it a unique id
        //which the client app can use …
Run Code Online (Sandbox Code Playgroud)

c# sockets video-streaming raspberry-pi2 uwp

6
推荐指数
1
解决办法
3462
查看次数

AzureDevOps 构建/发布管道 - 获取 git 提交消息(构建标题)?

我有一个在我的发布管道上部署后运行的 webhook 任务,目前它只是推送一条消息来说明已部署新版本,但我想在其中包含 git commit 消息以准确显示已部署的内容被部署。我不太确定如何检索它,但我希望这是可能的,因为构建最初是从 git push 触发的,而且根据此屏幕截图,构建标题以此消息命名: 在此处输入图片说明

azure-devops

6
推荐指数
2
解决办法
4209
查看次数

标签 统计

azure-devops ×1

c# ×1

raspberry-pi2 ×1

sockets ×1

uwp ×1

video-streaming ×1