gpt4 book ai didi

c# - 如何使用 .NET Core 解析 MPEG 视频流

转载 作者:行者123 更新时间:2023-11-30 17:27:41 34 4
gpt4 key购买 nike

对于个人项目,我试图从 IP 摄像机的 MPEG 流中读取并对接收到的各个帧执行一些计算机视觉任务(使用 .NET Core 2.2)。

我向相机的 MPEG 端点执行一个 GET 请求,然后我返回一个 multipart/x-mixed-replace 响应,该响应持续流式传输看似独立的帧作为 JPEG 图像。

我难以理解的是从多部分响应中解析出帧的正确方法 - 如何检索帧对我来说并不重要,如果有更好的解析方法这种流,我当然愿意改变 - 视频检索/处理对我来说是一个全新的世界:)

供引用:

MPEG 端点:

GET http://192.168.0.14/mjpeg.cgi

示例响应 header :

Content-Type: multipart/x-mixed-replace;boundary=--video boundary--

示例响应正文:

Content-length: 41142
Date: 02-02-2019 12:43:19 AM
Content-type: image/jpeg

[payload]

--video boundary--
Content-length: 41220
Date: 02-02-2019 12:43:19 AM
Content-type: image/jpeg

[payload]

--video boundary--

我目前拥有的:

var client = new HttpClient() {
BaseAddress = new Uri(streamUrl)
};

var stream = await client.GetStreamAsync(resource);

using (var streamReader = new StreamReader(stream)) {
while(true) {
await GetFrameStart(streamReader);
var frame = await ReadFrame(streamReader);

// Get byte[] from returned frame above and construct image
};
}

// ---

// Fast forward to the start of the Frame's bytes
static async Task GetFrameStart(StreamReader reader) {
string buffer = null;
while (buffer != string.Empty) {
buffer = await reader.ReadLineAsync();
}
}

// Read entire byte array until the video boundary is met
static async Task<String> ReadFrame(StreamReader reader) {
string result = string.Empty;
string line = null;

while(!isBoundary(line)) {
line = await reader.ReadLineAsync();
if (!isBoundary(line)) result += line;
};

return result;
}

上面的内容似乎让我返回了每个帧的单独 [payload],但是如果我将字符串转换为字节并写入磁盘时,图像不是有效的 jpeg:

var bytes = Encoding.UTF8.GetBytes(frame);

using (var fs = new FileStream("test.jpeg", FileMode.Create, FileAccess.Write)) {
fs.Write(bytes, 0, bytes.Length);
}

最佳答案

你可以使用 Microsoft.AspNetCore.WebUtilities.MultipartReader

 var boundary = GetBoundary(context.Request.ContentType);
var reader = new MultipartReader(boundary, context.Request.Body);
var section = await reader.ReadNextSectionAsync();

查看此 Answer了解更多信息:

希望这对您有所帮助。

关于c# - 如何使用 .NET Core 解析 MPEG 视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54496666/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com