【问题标题】:Netstream.seek() not working for MP4 videos in FlashNetstream.seek() 不适用于 Flash 中的 MP4 视频
【发布时间】:2011-03-11 19:25:49
【问题描述】:

我在 Actionscript 中实现了一个视频播放器,我需要能够定义视频的开始播放时间。 Netstream.seek(pos) 适用于 flv 文件,但适用于 H.264 文件(播放器从头开始播放视频)。有谁知道可能是什么问题?

(我为此使用 Netstream,而不是在调用 Netstream.play 方法时添加带有开始时间的参数,因为我没有 Flash Media Server)。

【问题讨论】:

  • 您是从服务器获取流吗?
  • 我正在使用我在网上找到的示例 MP4 文件(即h264.code-shop.com:8080/trailer2.mp4)。
  • 我认为问题在于并非所有服务器都支持搜索功能
  • 这个问题似乎与以下事实有关:当视频定义了关键帧时,搜索仅适用于 MP4 流。在这种情况下,我应该能够找到包含关键帧的位置。我仍然不确定这一点,但这是一种可能性。我也试过播放本地文件,还是不行。
  • 您需要canseekontime = true 视频元数据和服务器支持。为了寻找关键帧,您需要在keyframes.filepositions 中找到一个与keyframes.times 最接近目标时间的项目具有相同索引的文件位置。在你知道它之后,你将不得不根据服务器实现执行stream.play(path.extension?start=12345[fileposition you need]) 之类的操作

标签: flash actionscript-3 video-streaming mp4 netstream


【解决方案1】:

Flash 不支持发送字节头,所以你总是会得到字节 0-。您可以通过使用伪流 (http://h264.code-shop.com/trac) 来完成搜索。基本上,您提供一个 get 参数 ?start=1234,然后服务器后端修补 moov 标头,将其移动到文件的前面,并从开始位置开始提供服务。 (本质上是动态拆分文件,起始位置为 1234,并提供新生成的文件)

【讨论】:

    【解决方案2】:

    我知道这适用于最新的 Red5 1.0 版本,我不能代表 FMS 或 Wowza。

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      相关资源
      最近更新 更多