- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当尝试读取标记为左右 3D 的 4K 视频时,IMFSourceReader 返回大小为 1920x2160 的图像(图像的一半)。如果可能的话,我想获得完整的图像,或者至少可以访问下半部分。
我知道 MF_ENABLE_3DVIDEO_OUTPUT,但我不确定如何将它应用到 IMFSourceReader。我尝试将其设置为媒体类型,但这并没有改变任何东西。
源阅读器告诉我流的宽度是帧大小的一半(4K 电影为 1920x2160),但是当我在样本上使用 GetBufferCount 时,结果是 1。所以我不知道如何获得所有的帧数据。
我查看了 DX11VideoRenderer 示例,它似乎假设 GetBufferCount 返回 2。但是它不使用 IMFSourceReader,所以我不确定如何将它的作用应用于该场景。
最理想的是,我想要使用 MF3DVideoOutputType_BaseView 并获得完整的 4K 源图像。
编辑:
这与 Facebook 180 数据有关。 (设置“Half Equirectangular”和“Side-bySide”。它会在 MP4 中生成 YouTube V1 球形元数据,具有 Facebook 识别的 180 度立体视频的特定设置。)
此处提供示例视频:https://drive.google.com/open?id=154dl33y9RKZcvTqdBZkLQ5Y5ckG2mZtf (它将在将来的某个时候删除;如果有人对上传位置有更好的建议,请随时提出建议)。
最佳答案
这可能不是一个准确的答案,因为我可以通过简单的阅读来完成您想要做的事情。但是,以下步骤可能会提示您在何处进行故障排除。
IMFSourceReader
returns images of size 1920x2160 (half the image). I'd like to get the full image if possible, or at least have access to the second half.
我使用一个应用程序处理了您的示例视频,该应用程序使用 MF Source Reader 读取视频、解压缩并保存为单独的帧。我看到视频的两半都可以访问。
这里是详细信息。
视频媒体类型表示3D视频:
MF_MT_MAJOR_TYPE, vValue {73646976-0000-0010-8000-00AA00389B71} (Type VT_CLSID, MFMediaType_Video, FourCC vids)
MF_MT_SUBTYPE, vValue {34363248-0000-0010-8000-00AA00389B71} (Type VT_CLSID, MFVideoFormat_H264, FourCC H264)
MF_MT_AM_FORMAT_TYPE, vValue {E06D80E3-DB46-11CF-B4D1-00805F6CBBEA} (Type VT_CLSID, WMFORMAT_MPEG2Video)
MF_MT_VIDEO_PROFILE, vValue 100 (Type VT_UI4)
MF_MT_VIDEO_LEVEL, vValue 51 (Type VT_UI4)
MF_MT_FRAME_SIZE, vValue 16492674418800 (Type VT_UI8, 3840x2160)
MF_MT_PIXEL_ASPECT_RATIO, vValue 4294967297 (Type VT_UI8, 1:1)
MF_MT_INTERLACE_MODE, vValue 7 (Type VT_UI4)
MF_MT_FRAME_RATE, vValue 128849018881001 (Type VT_UI8, 30000/1001, 29.970)
MF_MT_SAMPLE_SIZE, vValue 1 (Type VT_UI4)
MF_MT_AVG_BITRATE, vValue 82101870 (Type VT_UI4)
MF_MT_MPEG4_CURRENT_SAMPLE_ENTRY, vValue 0 (Type VT_UI4)
MF_MT_MPEG4_SAMPLE_DESCRIPTION, vValue 00 00 59 2A 73 74 73 64 00 00 00 00 00 00 00 01 00 00 59 1A 61 76 63 31 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F 00 08 70 00 48 00 00 00 48 00 00 00 00 00 00 00 01 15 41 6D 62 61 72 65 6C 6C 61 20 41 56 43 20 65 6E 63 6F 64 65 72 00 00 00 00 00 00 00 00 00 00 00 18 FF FF 00 00 00 4B 61 76 63 43 01 64 00 33 FF E1 00 34 27 64 00 33 AC 34 C8 03 C0 04... (Type VT_VECTOR | VT_UI1)
MF_MT_MPEG_SEQUENCE_HEADER, vValue 00 00 01 27 64 00 33 AC 34 C8 03 C0 04 3E 84 00 00 0F A4 00 03 A9 83 A1 80 00 4C 4B 40 00 03 93 87 0B BC B8 D0 C0 00 26 25 A0 00 01 C9 C3 85 DE 5C 3E 11 08 D4 00 00 00 00 01 28 EE 38 B0 (Type VT_VECTOR | VT_UI1)
MF_MT_VIDEO_3D, vValue 1 (Type VT_UI4)
MF_MT_VIDEO_3D_FORMAT, vValue 2 (Type VT_UI4)
MF_MT_VIDEO_ROTATION, vValue 0 (Type VT_UI4)
MF_NALU_LENGTH_SET, vValue 1 (Type VT_UI4)
MF_PROGRESSIVE_CODING_CONTENT, vValue 1 (Type VT_UI4)
{11D25A49-BB62-467F-9DB1-C17165716C49}, vValue 00 00 00 00 00 00 00 00 00 00 00 00 (Type VT_VECTOR | VT_UI1)
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}, vValue 0 (Type VT_UI4)
{A51DA449-3FDC-478C-BCB5-30BE76595F55}, vValue 1 (Type VT_UI4)
注意 3840x2160 分辨率和 MF_MT_VIDEO_3D_FORMAT
值 MFVideo3DSampleFormat_Packed_LeftRight
:
Each media sample contains one buffer, with both views packed side-by-side into a single frame.
这似乎是对您文件的正确阅读。我的应用程序使用以下媒体类型调用 SetCurrentMediaType
设置 Source Reader:
MF_MT_MAJOR_TYPE, vValue {73646976-0000-0010-8000-00AA00389B71} (Type VT_CLSID, MFMediaType_Video, FourCC vids)
MF_MT_SUBTYPE, vValue {00000016-0000-0010-8000-00AA00389B71} (Type VT_CLSID, MFVideoFormat_RGB32, FourCC 0x00000016)
MF_MT_FRAME_SIZE, vValue 16492674418800 (Type VT_UI8, 3840x2160)
MF_MT_PIXEL_ASPECT_RATIO, vValue 4294967297 (Type VT_UI8, 1:1)
MF_MT_INTERLACE_MODE, vValue 2 (Type VT_UI4)
MF_MT_FRAME_RATE, vValue 128849018881001 (Type VT_UI8, 30000/1001, 29.970)
也就是说,它请求将视频解压缩为全分辨率 RGB 格式。
Source Reader 可以接受这样的请求并提供视频解码器来满足格式转换:
Category MFT_CATEGORY_VIDEO_DECODER, Direct3D 11 Aware, Input MFVideoFormat_H264, 3840 x 2160, Output MFVideoFormat_NV12, 3840 x 2160
显然解码器是H.264 Video Decoder如果您想在内部 Source Reader 管道之外直接管理它。
第一个阅读视频样本具有以下属性:
MF_NALU_LENGTH_INFORMATION, vValue (Type VT_VECTOR | VT_UI1)
MFSampleExtension_ForwardedDecodeUnits, vValue ??? (Type VT_UNKNOWN)
MFSampleExtension_AccumulatedNonRefPicPercent, vValue 0 (Type VT_UI4)
MFSampleExtension_Token, vValue ??? (Type VT_UNKNOWN, 0x00000282397B1020)
MFSampleExtension_CleanPoint, vValue 1 (Type VT_UI4)
MFSampleExtension_Discontinuity, vValue 1 (Type VT_UI4)
MFSampleExtension_FrameCorruption, vValue 0 (Type VT_UI4)
nSampleTime 0, nSampleDuration 33 3666, nBufferCount 1, nTotalLength 33177600
nBufferIndex 0, nCurrentLength 33177600, nMaxLength 33177600
如您所见,它有一个缓冲区,数据大小为 3840 * 2160 * 4 字节。图片本身就是我在上面附上的图片,有两半。
这是 Windows 10 十月 2018 更新(版本 1809)上的行为。我想这种行为基本上符合您的原始要求。我还看到 MP4 原子也指示全分辨率 (3840x2160),因此总体上我上面提到的行为和我实际看到的行为是完全可以预料的。更重要的是,即使是 SDK topoedit 也播放两半的文件,这意味着当从两半混合立体声时要实现电影和电视行为,有必要以某种方式专门配置解码器。
据我所知,您看到了不同的行为,这应该是有原因的,很可能与视频解码器或解码后步骤有关,该步骤要么剥离一半视频,要么在您没有的地方应用 union View 的合成请求它。由于视频是以左+右方式编码的,我会说管道中的某些东西不太可能被硬编码以丢弃下半部分并且无法控制这一点,也许这可能是管道配置的问题。
也可能会发生早期版本的 Windows 缺乏对球形视频的支持并截断视频,看到它由两半组成,但同时还没有球形功能的代码路径和实现。
2018 年 12 月 27 日更新:问题似乎仅限于或至少与启用 MF_SOURCE_READER_ENABLE_ADVANCED_VIDEO_PROCESSING
有关。启用后,Source Reader 应用 Video Processor MFT用于格式转换需要而不是内部转换器(但是 AFAIR 不是硬件加速)。内部非硬件转换器透明地输出两个 View ,甚至不知道框架中有两个 View 。然而,视频处理器 MFT 宣布了立体 3D 功能,并且在其默认操作模式下它放弃了后半部分。
快速浏览一下,我无法启用其 3D 输出选项并将其切换为保留最右边的一半,无论是作为单个缓冲区的一部分、辅助缓冲区还是辅助纹理表面。然而,由于看起来后半部分在后解码器步骤中被剥离,它应该工作得很好,例如 - 并且可能有许多类似的方法来完成这个技巧 - NV12 纹理是从 Source Reader 读取的,然后3D 信息从样本/纹理中移除,像素格式的进一步转换(包括启用 GPU)会导致完整 3840x2160 帧的转换,而不会移除后半部分。
关于c++ - 使用 Media Foundation source reader 读取 3D(左右)视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53915769/
当我想用这个名为 Asfbin 的神奇工具拆分教程视频文件( .wmv )时,查看了媒体播放器中的所有设置,但徒劳地找不到一个... 有没有办法用milliseconds设置windows media
在我的应用程序API级别targetSdkVersion 23中,我添加了以下权限:
出于某种原因,当我发送电子邮件时,我的媒体查询没有应用。我将它从 Outlook 2007 发送到 gmail 并使用 iphone 4s 查看它。我试过使用更简单的@media 查询规则(即仅更改字
我看了一本学习python编程的书,它显示了代码: import media 所以我从链接http://pragprog.com/titles/gwpy/source_code 下载了gwpy-cod
我正在尝试使用一个小的 from,只有 3 个元素。这是我正在使用的,有人可以让我知道我哪里出错了吗?我已尝试同时使用最小宽度和最大宽度,但似乎没有任何效果。 html,body{margin:0p
要修复的网站问题: 我想弄清楚为什么我的一些@media 查询是重叠的。如果您查看我的代码,您会看到 @media 查询被标记为每个设备维度。 @media SCREEN SIZE: MASSIVE
我正在编辑一个预先存在的样式表。它目前有 0-319px 和 320-479px 的@media 部分,以及其他一些用于更大屏幕的部分。我正在尝试添加特定于 iPhone 的样式。但是,我的iphon
我读到在其他@media 查询中嵌套@media 查询在CSS3 中是完全有效的。 但是,我通过 CSS 验证器收到以下解析错误: @media screen and (max-width: 768p
我面临的情况是,对于我的一个类(class),@media 查询只是没有被读取,相反,即使 @media 标准正在被读取,类也没有围绕 @media 查询被读取的情况遇见了。 这是代码: @media
如果我从 android webrtc SDK(由 antmedia 提供)流式传输到 Ant Media 的社区版,则保存的最终视频会出现拉伸(stretch)(以手机纵向模式拍摄)。 Check
我想知道 Mobicent Media 服务器如何使用 URL 播放音频的详细信息?它在哪种方法中使用 URL 进行流式传输。对于本地存储,我了解但对于远程存储(URL),我不知道它是如何工作的。我在
简单是辉煌的关键。 我看到了 @media print 和 @media screen 标签背后的一些意义。但是将 @media screen 与(@media all 而不是打印)进行比较让我感到困
我有以下 sass: .branded @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (m
我都试过了,得到的结果相似。一直找不到答案。 最佳答案 开头和结尾的斜杠分别对匹配的内容添加了限制。 media:没有斜线,匹配当前目录和所有子目录下的文件和目录。 media/:尾部加斜杠表示只匹配
我正在尝试让 Enquire.js 为旧版浏览器工作。我正在使用文档中的深度支持方法: Modernizr.load([ { test: window.matchMedia,
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我希望将 H264 视频流式传输到 Windows Phone 8 应用程序。 那么我该如何使用 ShardDX 呢? (或者可能来自媒体基金会的 native 功能)。 我找到了用于播放视频的 Me
我想使用 cordova 录制用户的音频。在研究中,我发现了两个似乎可以完成这项工作的插件。第一media plugin及其他media capture plugin .现在我的问题是我可以从两个插件
我正在尝试弄清楚如何构建我的 CSS 文件(现在已经很多了),我想知道拥有以下内容之间是否有任何实际区别: 或拥有: @media print { definitions } 我是从浏览器的
这个问题在这里已经有了答案: Media=All vs Media=Screen (2 个答案) 关闭 8 年前。
我是一名优秀的程序员,十分优秀!