2

我们目前正在开发一个 Flex 应用程序,该应用程序需要通过 RTSP 连接到一组交通检测摄像机。总的来说,我对视频流的世界是全新的,我想知道这是否可能。

AFAIK 无法在 Flash 播放器中使用 RTSP 提要,所以我认为我们需要在服务器上安装某种转换器,接收 RTSP 流并将其转换为 RTMP,以便我们可以在我们的弹性应用程序。我们希望 Red5 可以帮助我们做到这一点。

我的假设是否正确,有人这样做过吗?

4

7 回答 7

2

Wowza Media 似乎支持 RTSP 到 RTMF 的转换:http ://www.wowzamedia.com/comparison.html

还有基于Red5和FFMPEG的通用视频流转码器Xuggle http://www.xuggle.com/ 。

于 2009-05-05T03:11:01.990 回答
1

基于这项工作 ,我尝试将 H264 信号转换为可以在 Flash 中轻松显示的 SWF 流。这是食谱。(这个配方适用于 Linux。)

  1. 下载 Live555 流媒体,从http://www.live555.com/liveMedia/ 你拥有的 src 文件通常命名为 live555-latest.tar.gz

  2. 解压并编译:

    • 开箱:tar xzvf live555-latest.tar.gz。这将创建一个名为 live 的目录。
    • cd live
    • ./genMakefiles linux(如果您有 32 位系统)或者./genMakefiles linux-64bit如果您的系统是 64 位)
    • make, 一段时间后你会有一个全新的编译代码
  3. Live55 有很多好东西,但我们只对 openRTSP 所在的“testProgs”目录感兴趣。OpenRTSP 将让我们接收信号并将其发送到 ffmpeg,这是一个为 ffserver 提供数据的程序。ffserver 是一个服务器,它接收来自 ffmpeg 的信号并将其转换为 SWF(和其他格式)。

  4. 下载、解压、配置和安装ffmpeg

    • 从http://www.ffmpeg.org/下载 ffmpeg 。我测试的版本是0.6.1:http ://www.ffmpeg.org/releases/ffmpeg-0.6.1.tar.gz
    • 开箱:tar xzvf ffmpeg-0.6.1.tar.gz。这将创建一个名为 ffmpeg-0.6.1 的目录
    • cd ffmpeg-0.6.1
    • 所有有趣的视频流都打包在 VideoLan 中。所以你最好现在就安装 VideoLan。去http://www.videolan.org/看看安装它是多么容易。您可能会对包依赖项包含 ffmpeg 库感到惊讶。
    • 安装 VideoLan 后./configure,然后make.
    • 3 或 4 小时后,您将编译并运行 mmpeg 和 mmserver。
  5. 现在我们几乎准备好流式传输整个世界。首先,让我们尝试让 openRTSP 工作。
  6. 转到您的“实时”目录(记住 3.2)并执行:cd testProgs

  7. 试试这个:./openRTSP -v -c -t rtsp://<hostname>:<port>/<cam_path>首先,你会看到这样的日志:

    - opening conection blah blah.
    - sending DESCRIBE blah blah.
    - receiving streamed data.
    

    如果一切顺利,您的控制台将很快开始打印许多奇怪的字符。这些字符是视频字节,但您(现在)看不到它。如果您没有看到您的丝网印刷字符,则说明您的配置有问题。检查到目前为止的步骤。

  8. 我们收到信号了!现在让我们将它发送到一个有用的组件:ffmpeg,它绑定到ffserver。我们需要为 ffserver 创建一个配置文件。
  9. 使用您喜欢的编辑器创建此文本文件:

    Port 8090
    BindAddress 0.0.0.0
    MaxHTTPConnections 2000
    MaxClients 1000
    MaxBandwidth 1000
    CustomLog -
    NoDaemon
    
    <Feed feed1.ffm>
    File /tmp/feed1.ffm
    FileMaxSize 200K
    ACL allow 127.0.0.1
    </Feed>
    
    <Stream testFlash.swf>
    Feed feed1.ffm
    Format swf
    VideoFrameRate 25
    VideoSize 352x288
    VideoIntraOnly
    NoAudio
    </Stream>
    
    <Stream stat.html>
    Format status
    ACL allow localhost
    ACL allow 192.168.0.0 192.168.255.255
    </Stream>
    

    命名文件,例如,ffserver.conf。将它保存在任何地方,例如在 ffserver 的同一目录中。

    因此,ffserver 将绑定到 8090 端口,用于输入和输出。<Feed>标签配置输入流。在这种情况下,配置的提要的名称是 feed1.ffm。请记住第 14 步。 <Stream>包含输出流的配置。在这种情况下,名称将为 testFlash.swf(请记住),格式为 SWF。视频帧率为 25,大小为 352x288,不包含音频。最后一个流是一个 HTML 文件 (stat.html),它将显示服务器的状态。

  10. 开始ffserver: ./ffserver -f ffserver.conf(或您离开配置文件的任何地方)。-f 参数表示您将从自定义文件加载配置。

  11. 打开导航器并转到http://localhost:8090/stat.html。服务器的状态页面将显示,我们将看到一行有关我们的 testFlash.swf 流的信息。现在看起来很安静,所以让我们用 openRTSP 的输出(从第 7 步开始)输入这个流。

  12. 做这个:

    <path to openRTSP>/openRTSP -v -c -t rtsp://<hostname>:<port>/<cam_path> | <path to ffmeg>/ffmpeg -i - http://localhost:8090/feed1.ffm
    

    第一条路径(“|”之前与步骤9相同。“|”是将openRTSP的输出(视频信号序列,又名stage chars)连接到ffmpeg的输入的符号。“-I - " 表示 mmpeg 的输入取自管道 "|" 并且http://localhost:8090/feed1.ffm是 ffmpeg 的目标(输出),基本上是 ffserver 的输入。

    所以通过这个命令,我们连接了 openRTSP -> ffmpeg -> ffserver

    当您输入此命令时,将显示很多信息。重要的是要注意显示输入参数和输出参数,并且这些参数需要“兼容”。就我而言,这将显示:

    Input #0, h264, from 'pipe: ':
    Duration: N/A, bitrate: N/A
    Stream #0.0: Video: h264, yuv420p, 352x288, 25 fps, 25 tbr, 1200k tbn, 50 tbc
    Output #0, ffm, to 'http://localhost:8090/feed1.ffm':
    Metadata:
    encoder: Lavf52.64.2
    Stream #0.0: Video: FLV, yuv420p, 352x288, q=2-31, 200 kb/s, 1000k tbn, 25 tbc
    Stream mapping:
    Stream #0.0 -> #0.0
    </pre>
    

    然后流开始播放。你会在最后一行看到不断变化的数字,告诉你每一刻的实时帧率。就像是

    frame= 395 fps= 37 q=31.7 Lsize = 1404kB time=15.80 bitrate = 727.9kbits/s
    

    如果您没有看到这行指标,则说明您的输出配置有问题。回去修改testFlash.swf的参数。

  13. 一切都完成了。您可以在 中查看视频http://localhost:8090/testFlash.swf。您可以使用此 URL 来嵌入 Flash 电影,或者在我的例子中,嵌入 Flex 应用程序。

于 2011-03-24T11:50:39.790 回答
1

您可以尝试通过 Red5 重新流式传输并将您的 Flex 应用程序连接到 Red5 服务器。

阅读更多:http://red5wiki.com/wiki/SteamStream

于 2009-05-01T13:47:30.873 回答
0

如果您熟悉 flex 编程或将其带入 swf 所需的任何东西,那么您可以尝试实现 rtsp-over-tcp,AFAIK udp 在 flash 中不可用。

于 2009-06-02T17:21:08.967 回答
0

我刚刚用 Wowza 测试了这个。输入是来自 Etrovision H264 DVS 的 RTSP 流。如果您想尝试一下,请查看此步骤并使用 Application.xml 文件:http: //96.30.11.104/forums/showthread.php?p= 24806

视频在 Flash 播放器中播放,但代价是单条流延迟 5 秒,所有设备在办公室局域网中,服务器运行在 Core2Duo/2.8GHz/3GB RAM。不确定它是否可以更快,或者这是此设置的预期转码损坏...

于 2010-01-03T17:10:37.050 回答
0

Red5 很好,尤其是现在有了 xuggle 支持(允许现成的 FFMPEG 集成),它提供了与 red5 的良好集成(即关于进行实时流转换等的很好的教程)。

于 2009-05-15T11:36:36.940 回答
0

虽然它的公共/开源版本现在有点过时了,但您可以看看这个项目,它使用 Xuggler 和 Red5 将基于 RTSP 和图像的相机转码为 RTMP 流。 http://sourceforge.net/projects/imux/
(免责声明:我为创建原始源代码的公司工作)

于 2010-09-03T01:37:07.250 回答