4

从 Flash 10.1 开始,他们添加了通过 appendBytes 方法将字节添加到 NetStream 对象的功能(在此处描述http://www.bytearray.org/?p=1689)。此次添加的主要原因是 Adob​​e 终于支持视频的 HTTP 流式传输。这很好,但您似乎需要使用 Adob​​e Media Streaming Server ( http://www.adobe.com/products/httpdynamicstreaming/ ) 从现有视频创建正确的视频块,以实现流畅的流式传输。

过去我曾尝试做一个黑客版本的 HTTP 流,我换掉了 NetStream 对象(类似于这里http://video.leizhu.com/video.html),但块之间总是有短暂的停顿. 使用新的 appendBytes,我尝试对来自前一个站点的两个视频部分进行快速模拟,但即便如此,跳过仍然存在。

有谁知道需要如何格式化两个连续的 .FLV 文件,以便 NetStream 对象上的 appendBytes 方法创建一个流畅的视频,而片段之间没有明显的跳跃?

4

6 回答 6

9

我能够使用 Samuel 描述的 Adob​​e 的 File Packager Tool 来完成这项工作。我没有使用 NetStream 对象,但我使用了我假设在内部使用的 OSMF 示例播放器。以下是不使用 FMS 的方法:

  1. 从http://www.adobe.com/products/httpdynamicstreaming/获取 Adob​​e 用于 Http 动态流的文件打包器
  2. 在包含 H.264/AAC 的现有 MP4 文件上运行文件打包程序,如下所示:C:\Program Files\Adobe\Flash Media Server 4\tools\f4fpackager> f4fpackager.exe --input-file="MyFile.mp4" - -段持续时间=30

这将产生 30 秒长的 F4F 文件,以及 F4X 和 F4M 文件。F4F 文件是您应该播放的正确分段(和碎片)的 MP4 文件。如果您想使用 OSMF 播放器对此进行测试,还请执行以下操作:

  1. 获取 Apache 服务器
  2. 从http://www.adobe.com/products/httpdynamicstreaming/获取 Adob​​e 的 Apache Http Origin Module
  3. 根据http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS8d6ed60bd880807c48597a9e1265edd6cc0-8000.html安装模块
  4. 将F4F、F4X、F4M文件放到httpdocs下的vod目录下
  5. 从http://www.osmf.org/downloads/OSFMPlayer_zeri2.zip获取“用于 HTTP 动态流的 OSMF 示例播放器”
  6. 将示例播放器放在 httpdocs 目录中
  7. 在浏览器中从 Sample Player 加载 html 文件,例如http://localhost/OSMFPlayer.html
  8. 按弹出按钮并输入您的 F4M 文件的 URL,它应该可以播放

因此,要回答最初的问题 Adob​​e 的 File Packager 是要使用的文件拆分器,您无需购买 FMS 即可使用它,它适用于 FLV 和 MP4/F4V 文件。

于 2011-02-23T04:35:27.077 回答
1

你不需要使用他们的服务器。Wowza 支持 Adob​​e 的 HTTP Streaming 版本,您可以通过正确分割视频并将所有片段加载到标准 HTTP 服务器上来自己实现它。

Adobe 的 HTTP 流的所有规范的链接在这里:

http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-1ae425bf126054c4d3f-7fff.html

尝试破解客户端进行一些自定义样式的 http 流式传输将更加麻烦。

请注意,HTTP 流式传输不支持流式传输多个不同的视频,而是流式传输被分成单独段的单个文件。

文件打包器

将点播媒体文件转换为片段并将片段写入 F4F 文件的命令行工具。File Packager 是一个离线工具。您可以使用 File Packager 加密文件以供 Flash Access 使用。有关详细信息,请参阅打包按需媒体。

File Packager 可从 adobe.com 获得,它与 Adob​​e® Flash® Media Server 一起安装到 rootinstall/tools/f4fpackager 文件夹中。

Packager 下载链接就在这里:Download File Packager for HTTP Dynamic Streaming

http://www.adobe.com/products/httpdynamicstreaming/

于 2010-12-14T20:53:39.863 回答
1

您可以使用F4Pack,它是一个围绕 Adob​​e 命令行工具的 GUI,可让您处理 flv/f4v 文件,以便将它们用于 HTTP 动态流。

于 2011-03-12T18:39:39.040 回答
1

OSMF 代码中发生这种情况的地方是 HTTPNetStream 类实现内部的计时器触发状态机......可能是一个信息丰富的阅读。我想我什至在写它的时候放了一些有用的评论。

至于一般问题:

如果您将整个 FLV 文件读入 ByteArray 并将其传递给 appendBytes,它将播放。如果您将该 FLV 文件分成两半,并将前半部分作为字节数组传递,然后将后半部分作为字节数组传递,那么也会播放。

如果您希望能够在比特率之间无缝切换,则需要在匹配的关键帧点处拆分 FLV 文件......并记住只有第一次调用 appendBytes 具有初始 FLV 文件头('F', 'L', 'V', flags, offset)...其余的只是期待 FLV 字节序列的延续。

于 2011-07-15T20:18:45.980 回答
1

我最近发现了一个类似的 node.js 项目来实现 m3u8 转码(https://github.com/andrewschaaf/media-server),但还没有听说过除了 Wowza 在 Apache 的 Origin 模块之外做它的项目。由于有效负载几乎相同,因此您最好寻找一个好的 mp4 分段解决方案(那里有很多)而不是寻找 f4m 分段。问题是 moov 原子,尤其是在较大的 mp4 视频上,很难管理和放置在其正确的初始(接近文件开头)位置。即使使用最佳的 ffmpeg 设置和“qtfaststart”,您最终也会遇到明显较慢的搜索、低效的带宽使用(通常是贪婪的),以及一些与 flv/f4v 播放所没有的擦洗/时间相关的小麻烦。

在我的播放器中,我已经或打算基于负载和实时日志解析 Apache 使用 awk/cron 在 HTTP 动态流 (HDS) 和 MP4 之间切换,而不是为流保护授权 Adob​​e 的 Access 产品。两者都有独特的“onmetadata”处理程序。但最后我收到的排序时间/字节散列实际上是等价的。只是 MP4 比较慢。所以 mod_origin 只是 Flash 客户端(通过 http)的同步器/请求路由器。我仍在寻找加快基于 mp4 容器的播放的方法。我最近读到的一个令人难以置信的解决方案,对此感到非常震惊http://zehfernando.com/2011/flash-video-frame-time-woes/视频编辑器(人)和 Flash 开发人员提出了他们自己的 mp4 时间编码解决方案,该解决方案在每个视频帧的底部添加了(通过 Adob​​e Premiere 脚本)大约 50 像素,并带有像帧条形码这样的视觉“二进制”标记。这些二进制值转换为高度准确的时间码值。因此,Flash 可以在绘制视频帧时(实时)分析它们,并从任何类型的 mp4 字节分段友好的网络服务器中准确确定播放器的位置以及需要哪些字节。问题是(也许我在这里错了)Flash 似乎在获取 moov 数据时任意选择,尤其是在大型视频文件(.5-1.5gigs)上。即使您确保通过 MP4Box 运行您的 mp4(即 MP4Box -frag 10000 -inter 0 movie.mp4),我想这也是 OSMF 和 HDS 现在已经很好解决的问题,尽管您需要 Apache 和专有的闭源模块来使用它,这很烦人。开源实现到来可能只是时间问题,因为 HDS 只有 1-2 年的历史,它只需要像 Andrew Chaaf 那个使用 node.js + mpegts 流式传输(直播或不直播)的人那样进行一些逆向工程。最后,我可能最终只在我的 UI 下使用 OSMF,因为它似乎具有与 HDS 相似的优点,如果不是更多的话,即 Strobe,如果您需要病态的可扩展 HDS 或 MP4 开放播放器平台来破解以实现您自己的自定义播放器。js + mpegts 流媒体(直播与否)。最后,我可能最终只在我的 UI 下使用 OSMF,因为它似乎具有与 HDS 相似的优点,如果不是更多的话,即 Strobe,如果您需要病态的可扩展 HDS 或 MP4 开放播放器平台来破解以实现您自己的自定义播放器。js + mpegts 流媒体(直播与否)。最后,我可能最终只在我的 UI 下使用 OSMF,因为它似乎具有与 HDS 相似的优点,如果不是更多的话,即 Strobe,如果您需要病态的可扩展 HDS 或 MP4 开放播放器平台来破解以实现您自己的自定义播放器。

于 2012-04-07T06:08:37.260 回答
0

Adobe 的 F4F 格式是基于 MP4 文件的,您可以使用 F4V 或 MP4 代替 FLV 文件吗?周围有很多 MP4 文件拆分器,但您需要确保文件中的时间戳是连续的,当它在文件内的音频或视频流中看到零时间戳时,可能会发生暂停。

于 2011-02-20T13:11:20.273 回答