通过套接字将高清电影帧发送到Flash

时间:2013-05-28 12:00:48

标签: actionscript-3 flash sockets video

我想知道是否有人做过这样的事情。我有一部高清电影(甚至是720p),我想把它发送到Flash客户端。我正在考虑在C ++中使用OpenCV来解码和发送部分。我甚至已经实现了一些,但是数据包大小有问题。

但我的问题不同,有人做过类似的事吗?这是否可以提高性能?我对此有很强的疑虑,因为我认为Flash机器的发送和解码仍然很困难。期待听到更有经验的人的一些意见。

2 个答案:

答案 0 :(得分:0)

不是真正的答案,更像是对你的问题的想法:

  • 是的,你必须编码高清图像,通过网络发送25 fps x 1.5mb是不行的。
  • gstreamer就是为了这个目的而建造的。也许很复杂,但无论如何都要看它!
  • 为什么要编写一个程序,当vlc可以完成所有这些工作? (甚至无头/脚本!)
  • 如果还有音频流 - 请忘记opencv。它是一个计算机视觉库,不是为你的问题而构建

答案 1 :(得分:0)

基本上有两种网络协议通常用于将视频从服务器发送到闪存客户端,HTTP和RTMP。

HTTP是一个众所周知的标准,很容易实现,因为它是一个纯文本协议,允许Flash Player播放点播视频文件,或执行所谓的pseudo-streaming

RTMP是由Adobe创建的专有协议,允许实时流式传输以及视频点播,还可以传输结构化二进制数据(AMF格式)以充当远程过程调用协议。 虽然现在已经记录,但实现起来比HTTP要复杂得多,但是有一个开源库实现了这个协议,librtmp,可以在http://rtmpdump.mplayerhq.hu/找到。

请注意,我在客户端成功使用了librtmp,让C程序充当Flash客户端,在FMS服务器上发布视频。我没有在服务器端使用它的经验,我甚至不知道它是否可能。

在你的情况下,我当然建议使用HTTP。

现在还有另一个需要克服的问题,就是要正确识别视频帧,必须将它们嵌入到Flash播放器可以读取的容器中。

Flash目前支持两种容器格式,FLV和F4V,后者是MPEG-4容器格式的子集。

此外,视频流必须可由Flash读取,因此必须将其正确编码为客户端支持的格式,例如H.264,Sorensen或VP6。

可以直接发送GIF,JPEG或PNG图像作为帧,如官方Flash Video Specification的第8页所示,但你必须意识到,在高清分辨率下,这将是非常低效的,只是想象一下在25 FPS时,JPEG中1920x1080像素的单个图像远远大于等效的H.264帧。

所以,最后,我的建议是:不解码服务器上的视频,确保它的格式与Flash兼容,并使用记录良好的协议发送原样。