Openshift + NGINX RTMP

Openshift + NGINX RTMP

我一直在尝试使用 nginx + rtmp 模块从我的 openshift 卡带流式传输 flv 内容。

在我的本地机器上,使用附加配置,一切正常(我使用 ffplay 进行测试,例如 ffplay rtmp://localhost:8080/test/streamkey)

当我尝试在 openshift 上使用相同的配置时,出现以下错误:

HandShake: Type mismatch: client sent 3, server answered 60 f=0/0   
RTMP_Connect1, handshake failed.

但是,如果我启用 port-forwarding 并使用 ffplay rtmp://127.0.0.1:8080/test/streamkey 测试流服务器,一切正常。这是我的端口转发:

rhc port-forward myappname 
Checking available ports ... done
Forwarding ports ...

To connect to a service running on OpenShift, use the Local address

Service Local               OpenShift
------- -------------- ---- -----------------
nginx   127.0.0.1:8080  =>  127.10.103.1:8080

我的墨盒是 "diy-0.1" 墨盒。 nginx 1.7.6(也测试了 1.4.4)+ rtmp-module.

我怀疑某些使用 openshift 处理齿轮的代理(apache?)存在一些问题,也许它不允许 rtmp headers(?)?

注意:配置 nginx http-only 工作正常。

有人可以帮忙吗?我卡住了,我想这是我第一次在 Whosebug 上提问:-)

nginx 配置(注意:"play" 路径和 IP:PORT 是使用 openshift 环境变量获取的。):

rtmp {
     server {
         listen  127.10.103.1:8080;

         chunk_size 8192;

         application test {
                  play /var/lib/openshift/54da37644382ece45c000139/app-root/runtime/repo/public;
         }
     }
 }

您在 OpenShift Online 上的应用程序前面有一个 apache 代理,内容可能正在尝试作为 HTTP 流量而不是 RTMP 流量进行流式传输,这就是您得到内容不匹配的原因,但是如果您通过端口转发执行此操作,您将获得对您的应用程序的直接访问权限并绕过代理。这就是它与端口转发一起工作的原因。目前无法通过 public ip 绕过 apache 反向代理,请参阅此开发人员门户文章以获取有关如何将请求路由到您的应用程序的更多信息:https://developers.openshift.com/en/managing-port-binding-routing.html