问题标签 [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.
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!
parsing - 解析 Matroska (webm) 文件,随机访问流
我对解析/流式传输编码的 webm 文件感兴趣,具有随机访问(搜索)get_frame 功能。
我已经阅读了 matroska 规范,我认为 Cues 部分是做到这一点的方法,但我还没有找到任何关于如何做到这一点的例子。
谁能指出我在 Matroska/webm 文件中寻找/查找框架的示例?
谢谢!
mkv - 如何手动更改 matroska/mkv 中的持续时间字段
我有一个没有有效持续时间的 mkv 文件。我想手动更改此持续时间参数。我浏览了http://www.matroska.org/technical/specs/index.html中定义的这个 matroska 规范
查看 matroska 的规范,它只包含标识幻数,但这并没有指定数据的长度。
如何解析这个 matroska 标头以便我获得持续时间字段并更改此字段?
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?
c++ - 视频写入后以编程方式将附件添加到 Matroska (mkv)
在写入所有视频帧而不复制视频数据后,我想将一条protobuf
消息作为附件添加到 Matroska (mkv) 视频文件。这必须是可能的,因为可以使用 MKVToolNix 套件(对于 JPG)将任意文件附加到 mkv:
我希望能够通过调用库方法来执行相同的读写周期。最好不需要protobuf
先将消息写入文件(例如,通过传递序列化protobuf
消息的字节数组)。
目前我正在使用libav
从/向 mkv 读取/写入视频数据。因此,我最喜欢的解决方案也只取决于libav
. 如果这不可能,我会考虑引入libEBML
和libMatroska
作为新的依赖项(与 MKVToolNix 相同)。
框架中需要调用哪些关键函数才能实现目标?我很确定mbunkus知道解决方案......
c++ - vc1视频播放卡顿
我正在尝试在 matroska 容器中播放 vc1 编码的视频。
为此,我使用了 ffmpeg 的av_read_frame
函数和一个 sertain 视频驱动程序,它要求AVPacket
's 的数据以 PES 标头为前缀。在AVPacket
唯一dts
的领域是有效的,pts
是AV_NOPTS_VALUE
。我将dts
值写入 PES 标头而不是pts
.
视频驱动程序记录从 23976 到 24000 的恒定帧率变化,反之亦然。视频抽搐。虽然我将帧速率放入 PES 标头(值 23976 是 ffmpeg 的探测给出的),但显然,它正在根据当前数据包的 pts 发生变化。
我试图查看AVCodecParserContext
's pts_dts_delta
,但dts_ref_dts_delta
它们AV_NOPTS_VALUE
是pts
dts
AVPacket
请告知如何获得正确的 pts 值,或者如何解决它。
谢谢。
编辑:
我在他们使用的 ffplay.c 中看到了,av_frame_get_best_effort_timestamp
但那是在通过 ffmpeg 的方式解码之后,我买不起。
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
这可以很好地保存文件,但是在我尝试过的所有播放器中,都没有检测到视频的隔行扫描形式。
c++ - 将循环逻辑从 matroska (mkv, webm) 解码为音频 (C++ via libvorbis)
(我英语不流利,我会尽力而为)
我尝试编写(C++)一个简单的 mkv 播放器。我对这个主题很陌生,所以我会一点一点地发现我需要的一切。一开始,我对视频使用 VP8 编解码器,对音频使用 Vorbis。视频方面目前似乎还可以,但我在音频方面遇到了麻烦。
我无法弄清楚循环逻辑来解码我使用 libvorbis 从mkvparser获得的音频帧。我查看了这个示例和这个简短的解释,但无法使其适用于我的情况。我没有找到其他简单的例子。
这是我的一段代码:
也许我获取帧的方式适用于视频而不是音频......
你们知道一些好的资源可以分享吗?或者一些建议?
感谢帮助 !
[编辑]:我忘了添加我的尝试之一:
它在ogg_sync_pageout崩溃,因为我的ogg_page未正确初始化。但是,不像我发现的示例那样来自正确的 .ogg 文件,我不知道如何正确初始化 vorbis 结构。
video - 如何将不同帧分辨率的VP8轨道转换为h264
我有一个带有 VP8 轨道的 .webm 文件,由外部服务(TokBox 归档)从 WebRTC 流中记录。流是自适应的,因此轨道中的每一帧都可以有不同的分辨率。大多数播放器(在 webkit 浏览器中)使用轨道描述中的视频分辨率(始终为 640x480)并将帧缩放到此分辨率。Firefox 和 VLC 播放器使用真实帧分辨率,分别改变视频分辨率。
我想实现两个目标:
- 在 Internet Explorer 9+ 中播放此视频,无需安装额外的插件。
- 将帧分辨率更改为一种固定分辨率,因此视频在不同浏览器中的外观相同。
所以,我的计划是:
- 从源 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
video - Gstreamer:mastroskamux 错误:未链接
我尝试播放以 h264 编码并与 matroskamux 混合的视频,但我无法实现。我在嵌入式平台上,一个 iMX6。
我的管道适用于 gst-lauch:
我用C创建了它,但它不起作用。我删除了错误处理,我使用了一个rep
包含所有元素的结构:
视频不显示,应用程序卡住。使用 GST_DEBUG=4 我得到了很多调试,但在最后几行:
我试图强制连接解复用器的焊盘,因为它有一个“有时”的源焊盘。
我不知道如何继续使它工作。谢谢您的帮助。
编辑:这里的日志文件。这是一个链接问题,我不知道如何解决它。