3

你好!

为流式传输AVC+AAC视频编写RTMPStreaming Server 。它适用于. 但我不能强迫它在flowplayer和其他 Flash 视频播放器中工作。rtmpdump

握手后的消息序列类似于FMS / RED5 / erlyvideo / haxevideo服务器:我尝试了很多变体。

从 Chrome 调试控制台我可以看到,所有协商消息传递给 flowplayer。最后一个是 onMetaData。在此之后,工作示例 ( rtmp://flash.tvwmedia.net/LiveVideo//Live300 ) 得到NetStream.Buffer.Full。从我的服务器流式传输不明白。

我从 AVC Header 消息开始,包含 sps/pps。之后,第一张 AVC 图片通过了。之后 - AAC 标头和 AAC 样本。然后是 AVC/AAC 采样。这可以通过rtmpdump- 我在退出时使用flv 。但是flowplayer和其他人不起作用。

  1. 可能是什么问题?
  2. 对流有任何额外要求吗?
  3. 损坏的 h264 流是否有可能导致 flashplayer 停止播放?是否可以从 flash player 获取系统消息,其中说明了它?

希望,您可以帮助我:) 我在 2 周内一直在解决这个问题,现在只是不知道我可以尝试的任何变体。

这是调试日志 + flv来自rtmpdump. 它包含谈判信息和一些第一批媒体样本。


更新:

我已经修复了一个错误:用于“系统”消息(例如SetChunkSize)的错误的块 stram ID。但是还是不玩了。这是另一个 log ,与wowza生成的几乎相同。还有 wowza/red5 日志(比较)。

我检查了以下内容,这些内容在 RTMP 服务器中有所不同:

  1. 不同的 ChunkStreamID(用于非系统流)
  2. 不同的 StreamID (on createStream)
  3. 128b ank 4Kb 块大小
  4. 解压/打包的块头(在上一个日志中有解压的,在新的 - 打包的)
  5. 随叫随到的不同答案connect(来自许多服务器)
  6. 使用57 0057 01视频数据包(视频信息/命令帧)
  7. 每张图片前加09(Access Unit Delimiter)NALU
  8. 不同顺序的音频/视频 DCR/数据包
  9. 仅音频/仅视频

但是调整所有这些并没有让我的服务器正常工作:)

任何想法如何解决这个问题?


更新:

正如彼得建议的那样,我已经通过Flazr代理记录了日志。结果是一样的。而且我找不到解决方案:两个日志看起来都不错。也许我只是没有看到简单的东西......


谢谢!

4

2 回答 2

2

我不确定问题是什么,但您要确保您正在执行以下操作:

1. 发送 ping
2. 处理字节读/写报告

从 rtmpdump 日志中,您的流程看起来不错,我没有注意到任何明显的事情. 根据您对 C++ 或 Ruby 的经验,还有两个项目可能会对您有所帮助。Izumi 服务器相当简单,如果您是 Ruby 开发人员,可能更容易上手。
http://code.google.com/p/rubyizumi/

如果你是 C++ 人,那么看看 RTMPd,Andrei 比我认识的任何人都更了解服务器端闪存过程。
http://www.rtmpd.com/

最后,如果你想要另一个开源 Java Player/Server 实现来学习你可以查看 Flazr http://flazr.com/

于 2010-10-09T17:45:39.470 回答
2

我是 Mondain 提到的 Flazr 的作者(谢谢 Mondain!)。

我想向您指出 Flazr 的“代理服务器”功能。您可以将 Flash Player(或 rtmpdump)连接到代理服务器,并将代理服务器指向您的服务器。如果您将日志设置为 DEBUG 模式,您将获得双向的所有 RTMP 消息的非常详细的日志跟踪。过去,这对我比较 Flazr 和 Red5 等其他实现很有帮助。希望这可以帮助。

于 2010-10-20T03:28:02.310 回答