问题标签 [matroska]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1283 浏览

c# - Mux Audio and Video in C#

I'm looking for a way to join separate audio and video streams into a single container.

Specifically I have VP8 video (webm container) and 16-bit PCM audio (wav container), which I'd like to combine into a Matroska container.

So far I can achieve this by saving the streams to files, and calling ffmpeg.exe by using the Process API which produces the result I need, but I'd prefer a solution that doesn't rely on saving the intermediate files to disk or requiring the ffmpeg.exe to be on the server. Any help much appreciated!

0 投票
1 回答
584 浏览

parsing - 解析 Matroska (webm) 文件,随机访问流

我对解析/流式传输编码的 webm 文件感兴趣,具有随机访问(搜索)get_frame 功能。

我已经阅读了 matroska 规范,我认为 Cues 部分是做到这一点的方法,但我还没有找到任何关于如何做到这一点的例子。

谁能指出我在 Matroska/webm 文件中寻找/查找框架的示例?

谢谢!

0 投票
2 回答
1837 浏览

mkv - 如何手动更改 matroska/mkv 中的持续时间字段

我有一个没有有效持续时间的 mkv 文件。我想手动更改此持续时间参数。我浏览了http://www.matroska.org/technical/specs/index.html中定义的这个 matroska 规范

查看 matroska 的规范,它只包含标识幻数,但这并没有指定数据的长度。

如何解析这个 matroska 标头以便我获得持续时间字段并更改此字段?

0 投票
1 回答
1126 浏览

timestamp - Avconv 无法生成 PTS 时间戳

我正在从这样的静止图像生成 H264 流:

当尝试多路复用到 matroska 时

我收到以下错误:

因此,avconv 没有为帧生成时间戳,并且由于 matroska 需要它们进行索引,所以多路复用失败了,对吗?

股票视频播放器在尝试生成流时同样发疯:

现在,如果我这样做:

这确实有效,但 matroska 容器内的原始 H264 流仍然缺少 PTS 信息..!可以通过“avconv -i dummy.mkv test.h264”等来确认这一点。

对于我正在做的特定项目,我需要具有正确 PTS 信息的原始 H264 流。我到底怎么能做到这一点!?

我也在处理从 IP 摄像机录制的视频,这些视频经常丢失/错误的 PTS 信息,所以我应该能够在将它们放置到 matroska 容器之前更正它们的 PTS - 否则多路复用失败,即问题与那个相同此处描述用于从静止图像生成视频。

到目前为止,我已经尝试过视频生成:

对于多路复用:

..还有更多的排列。

没有任何作用!..它开始对我来说似乎是一个错误。我在 Ubuntu 14.04 上运行 avconv 9.16-6:9.16。

开始绝望了。

有没有人成功地用 avconv 生成 PTS?

0 投票
1 回答
1103 浏览

c++ - 视频写入后以编程方式将附件添加到 Matroska (mkv)

在写入所有视频帧而不复制视频数据后,我想将一条protobuf消息作为附件添加到 Matroska (mkv) 视频文件。这必须是可能的,因为可以使用 MKVToolNix 套件(对于 JPG)将任意文件附加到 mkv:

我希望能够通过调用库方法来执行相同的读写周期。最好不需要protobuf先将消息写入文件(例如,通过传递序列化protobuf消息的字节数组)。

目前我正在使用libav从/向 mkv 读取/写入视频数据。因此,我最喜欢的解决方案也只取决于libav. 如果这不可能,我会考虑引入libEBMLlibMatroska作为新的依赖项(与 MKVToolNix 相同)。

框架中需要调用哪些关键函数才能实现目标?我很确定mbunkus知道解决方案......

0 投票
0 回答
84 浏览

c++ - vc1视频播放卡顿

我正在尝试在 matroska 容器中播放 vc1 编码的视频。

为此,我使用了 ffmpeg 的av_read_frame函数和一个 sertain 视频驱动程序,它要求AVPacket's 的数据以 PES 标头为前缀。在AVPacket唯一dts的领域是有效的,ptsAV_NOPTS_VALUE。我将dts值写入 PES 标头而不是pts.

视频驱动程序记录从 23976 到 24000 的恒定帧率变化,反之亦然。视频抽搐。虽然我将帧速率放入 PES 标头(值 23976 是 ffmpeg 的探测给出的),但显然,它正在根据当前数据包的 pts 发生变化。

我试图查看AVCodecParserContext's pts_dts_delta,但dts_ref_dts_delta它们AV_NOPTS_VALUEptsdtsAVPacket

请告知如何获得正确的 pts 值,或者如何解决它。

谢谢。

编辑: 我在他们使用的 ffplay.c 中看到了,av_frame_get_best_effort_timestamp但那是在通过 ffmpeg 的方式解码之后,我买不起。

0 投票
0 回答
383 浏览

gstreamer - 如何使用 GStreamer gst-launch 从 RTSP 源重新复用隔行扫描的 h264 流?

有什么方法可以将隔行扫描的 h264 流重新混合到 Matroska 或 QT 容器形式中,让玩家可以正确地将其识别为隔行扫描?我的基本管道是:

gst-launch-1.0 -e souphttpsrc location="http://hostname/stream1.sdp" ! application/sdp ! sdpdemux ! rtpjitterbuffer ! rtph264depay ! h264parse ! matroskamux ! filesink location=test.mkv

这可以很好地保存文件,但是在我尝试过的所有播放器中,都没有检测到视频的隔行扫描形式。

0 投票
1 回答
436 浏览

c++ - 将循环逻辑从 matroska (mkv, webm) 解码为音频 (C++ via libvorbis)

(我英语不流利,我会尽力而为)

我尝试编写(C++)一个简单的 mkv 播放器。我对这个主题很陌生,所以我会一点一点地发现我需要的一切。一开始,我对视频使用 VP8 编解码器,对音频使用 Vorbis。视频方面目前似乎还可以,但我在音频方面遇到了麻烦。

我无法弄清楚循环逻辑来解码我使用 libvorbis 从mkvparser获得音频帧。我查看了这个示例这个简短的解释,但无法使其适用于我的情况。我没有找到其他简单的例子。

这是我的一段代码:

也许我获取帧的方式适用于视频而不是音频......

你们知道一些好的资源可以分享吗?或者一些建议?

感谢帮助 !

[编辑]:我忘了添加我的尝试之一:

它在ogg_sync_pageout崩溃,因为我的ogg_page未正确初始化。但是,不像我发现的示例那样来自正确的 .ogg 文件,我不知道如何正确初始化 vorbis 结构。

0 投票
1 回答
309 浏览

video - 如何将不同帧分辨率的VP8轨道转换为h264

我有一个带有 VP8 轨道的 .webm 文件,由外部服务(TokBox 归档)从 WebRTC 流中记录。流是自适应的,因此轨道中的每一帧都可以有不同的分辨率。大多数播放器(在 webkit 浏览器中)使用轨道描述中的视频分辨率(始终为 640x480)并将帧缩放到此分辨率。Firefox 和 VLC 播放器使用真实帧分辨率,分别改变视频分辨率。

我想实现两个目标:

  1. 在 Internet Explorer 9+ 中播放此视频,无需安装额外的插件。
  2. 将帧分辨率更改为一种固定分辨率,因此视频在不同浏览器中的外观相同。

所以,我的计划是:

  • 从源 webm 文件中提取帧到具有真实帧分辨率的图像(例如 PNG 或 BMP)(我该怎么做?)
  • 查找图像的最大宽度和最大高度
  • 为图像添加黑色填充,因此较小的帧将位于新帧的中心(大小为 MAX_WIDHTxMAX_HEIGHT)
  • 使用 ffmpeg 将图像组合到 h264 轨道

一切都正确吗?我怎样才能做到这一点?这个算法可以以某种方式优化吗?

我尝试使用 ffmpeg 提取图像,但它不使用轨道头中的分辨率解析真实的帧分辨率。我认为一些 libwebm 函数可以帮助我(解析帧头和提取图像)。也许有人有一些代码片段可以做到这一点?

示例.webm(下载源,不要播放google转换的版本):https ://drive.google.com/file/d/0BwFZRvYNn9CKcndhMzlVa0psX00/view?usp=sharing

TokBox 支持的自适应流官方说明:https: //support.tokbox.com/hc/en-us/community/posts/206241666-Archived-video-resolution-is-supposed-to-be-720x1280-but-reports -as-640x480

0 投票
1 回答
1968 浏览

video - Gstreamer:mastroskamux 错误:未链接

我尝试播放以 h264 编码并与 matroskamux 混合的视频,但我无法实现。我在嵌入式平台上,一个 iMX6。

我的管道适用于 gst-lauch:

我用C创建了它,但它不起作用。我删除了错误处理,我使用了一个rep包含所有元素的结构:

视频不显示,应用程序卡住。使用 GST_DEBUG=4 我得到了很多调试,但在最后几行:

我试图强制连接解复用器的焊盘,因为它有一个“有时”的源焊盘。

我不知道如何继续使它工作。谢谢您的帮助。

编辑:这里的日志文件。这是一个链接问题,我不知道如何解决它。