c - 将未压缩视频写入 FLV 文件的可行性
问题描述
我很有可能会走上一条毫无意义的道路,所以如果这是浪费时间,我深表歉意。我一直在尝试将未压缩的视频写入 FLV 文件,但不确定是否可行。
根据维基百科,有效的视频编码选项为 0,表示“RGB”视频编码:https ://en.wikipedia.org/wiki/Flash_Video#Packets 。但是,我在 Adobe 的文档中没有看到任何提及此 Codec ID 选项的内容。既不是“视频文件格式规范第 10 版”也不是“Adobe Flash 视频文件格式规范第 10.1 版”。
我假设允许使用 0/RGB 编解码器 ID。我在 C 中硬编码了一个 unsigned char 数组,并使用 fwrite 将以下 Double/Number 元数据写入一个新的二进制 FLV 文件(诚然,我假设我写得正确):
- 持续时间:4(秒)
- 宽度:16(像素)
- 高度:16(像素)
- 视频数据速率:6 (Kbps)
- 帧率:1 (fps)
- 视频编解码器:0
- 文件大小:3323(字节)
然后我添加了 4 个 VIDEODATA 标签,每个我希望写入的 RGB 帧 1 个。它们的时间戳是 0、1000、2000 和 3000(毫秒)。它们都有一个 769 字节的有效载荷:第一个字节指定它是一个 Codec ID 为 0 的关键帧,其余的 768 个用于表示 16x16x3 (RGB) 图像。我为所有值写了 255/0xFF,希望看到一个小的白色屏幕出现 4 秒。
当我担心在 VLC 媒体播放器中无法正确播放时,我尝试为每一帧使用 RGBA 颜色。我还将 videodatarate 和 filesize 元数据分别更改为数值 8 (Kbps) 和 4347 (bytes)。
不幸的是,这也没有在 VLC 媒体播放器中播放。我想知道是否有人确定 FLV 文件中的未压缩视频是否可行?如果是这样,我很好奇视频数据应该是什么格式(RGB、RGBA、多个 VIDEODATA 标签、只有一个 VIDEODATA 标签等)?
我的 C 代码主要是一个巨大的 unsigned char 数组,但如果有人想查看它,我可以尝试添加它。任何意见是极大的赞赏。
谢谢,
米切尔一个
解决方案
根据 SirDarius,“维基百科页面中列出的视频编码类型并非来自官方来源。我不建议依赖这些。” 这是有道理的,因为 Adobe 本身的 FLV 格式文档没有提到视频编码的未压缩 RGB 选项。
我一直希望维基百科的编辑和其他人知道一些 FLV 格式的未记录的复活节彩蛋,但我现在确信情况并非如此。
推荐阅读
- python - Python - Pairwise intersection of multiple lists, then sum up all duplicates
- perforce - 如何在本地下载p4文件?
- apache-spark - Spark Parallelize withColumn 功能
- javascript - 如何在反应中创建可选择的、可突出显示的文本
- javascript - Angular-Resizable:无法访问“可调整大小”指令的属性
- google-maps-api-3 - 为 Android/iOS Webview 应用程序中使用的 Javascript Maps API 密钥配置应用程序限制
- javascript - Webbrowser 控件 - Consolo.log javascript 错误
- scala - Spark - How to make a map serializable
- apache - 如何在 2 个单独的服务器上运行 2 个定位器
- c++ - 共享从属对象