使用 HTML 显示 tcp 流


Show tcp stream using HTML

我想使用 gstreamer 将网络摄像头的视频流式传输到网络。在嵌入式 Linux 环境中,我使用以下命令运行 gstreamer:

gst-launch mfw_v4lsrc ! vpuenc codec=12 ! multipartmux ! tcpserversink host=127.0.0.1 port=1234 sync=false

我可以使用 VLC 播放器接收此流 tcp://127.0.0.1:1234.这很完美。

现在我想在我的网络浏览器中显示视频。我发现我不能使用HTML5视频标签。这显示了一个黑色图像。同时使用 http://127.0.0.1:1234 将显示视频控件,但不显示视频。

因此,我尝试使用 PHP 来接收流并使用 Web 服务器来发送它们。我在php网站上实现了这个例子:

<?php
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />'n";
} else {
    fwrite($fp, "GET / HTTP/1.0'r'nHost: www.example.com'r'nAccept: */*'r'n'r'n");
    while (!feof($fp)) {
        echo fgets($fp, 1024);
    }
    fclose($fp);
}
?>

这仅打印流的接收字节。但是我不知道如何对流进行编码以显示视频。如何将流转换为网页上显示的视频?

最符合浏览器的方法是

网络RTC流媒体

目前,我仍在寻找一种好方法。

  • 我对OpenWebRTC寄予厚望,但还没有设法构建它。
  • Kurento媒体服务器中有一个webrtcsink GStreamer插件,但我还没有弄清楚它是否可以在自己身上使用。可以在 Ubuntu 13.10 或 14.04 上安装并试用;从源代码构建需要大量的设置和探索。
  • 有一个Janus服务器。
  • 可能,还有更多的选择。

您可以使用流服务器执行以下操作之一:

  • 代理RTMP流(最初由Adobe提供,现在开源);
  • 分发 HTTP 实时流 (hls);
  • 分发 MPEG-DASH HTTP 流。

我个人使用nginx RTMP模块。还有其他选择,例如Wowza。

目录

GStreamer有flvmux ! rtmpsink

在页面上,您将需要一个Flash播放器。JWPlayer为我工作。

HLS

with nginx-rtmp-module流式传输它,或者你可以玩这个小的http启动程序。

HLS可以在iOS和Android上原生工作,但不能在桌面上工作(不是没有Javascript客户端)。

破折号

nginx-rtmp-module流式传输它。

在某些浏览器中,HTML5支持DASH流 - 根据所使用的编解码器,情况非常糟糕 - 此外,您将需要一个破折号.js播放器。

HLS和DASH都需要在桌面浏览器(现在在Chrome,Safari和Opera中)中支持源媒体扩展,并使用Javascript播放器。

浏览器对某些关键技术和编解码器的支持:https://html5test.com/compare/feature/webrtc-webrtc/video-mediasource/video-h264/video-webmvp8.html