【问题标题】:Darwin Streaming Server install problems os xDarwin Streaming Server 安装问题 os x
【发布时间】:2017-02-15 18:14:58
【问题描述】:

我的问题和this回答中提到的一样。我一直在尝试理解代码,这就是我学到的:

在文件 parse_xml.cgi 中失败,尝试从名为 messages 的文件(位于 html_en 目录中)获取消息 (return $message{$name})。 $messages 值来自文件 adminprotocol-lib.pl 中的方法GetMessageHash

sub GetMessageHash
{
   return $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}
}

$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} 在文件 streamingadminserver.pl 中设置:

$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} = $messages{"en"}

我对 Perl 一无所知,所以我不知道问题可能是什么,因为我看到的 $messages{"en"} 具有正确的值(如果我这样做 print($messages{"en"}{'SunStr'} 我得到的值是“Sun”))。

但是,如果我尝试执行print($ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}{'SunStr'},我将一无所获。好像没有设置$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}

我尝试了这个简单的例子,效果很好:

$ENV{"HELLO"} = "hello";
print($ENV{"HELLO"});

它工作正常,打印“你好”。

知道问题可能是什么吗?

【问题讨论】:

  • Darwin Streaming Server 在功能上已经过时。自 2007 年以来没有任何新版本!我会避免将它用于任何新项目。
  • 你说得对,我仍然需要尝试,因为我没有找到很多我需要的选项(一个能够通过 RTSP 流式传输 mp4 的开源服务器)。如果我想使用它,我需要调整一些东西(并花一些时间学习 Perl)所以我想我会继续寻找。

标签: macos perl darwin dss


【解决方案1】:

看起来$messages{"en"} 是一个HashRef:指向某个包含键值存储的内存地址的指针。你甚至可以打印相关的内存地址:

perl -le 'my $hashref = {}; print $hashref;'
HASH(0x1548e78)

0x1548e78 是地址,但只在同一个运行进程中有效。重新运行示例命令,每次都会得到不同的地址。

HASH(0x1548e78) 也只是真实存储值的人类可读表示。设置 $hashref2="HASH(0x1548e78)"; 不会创建真正的引用,只是人类可读字符串的副本。

您可以在两个脚本中使用 print $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} 轻松证明这一理论。

Data::Dumper 通常用于显示所引用哈希的内容(内存位置):

use Data::Dumper;
print Dumper($messages{"en"});
# or 
print Dumper($ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"});

这还将显示指针/引用是否可以在两个脚本中取消引用。

您的问题的解决方案可能是传递值而不是 HashRef:

$ENV{"QTSSADMINSERVER_EN_SUN"} = $messages{"en"}->{SunStr};

最佳实践是在两个键之间使用 ->。键的 " 或 ' 引号也是optional if the key is a plain word

但是通过环境变量传递所有东西感觉不对。他们可能无法在 OSX 上保存引用(我不知道)。您可能希望将字符串存储提取到包含文件并通过 require 加载它。

有关 Perl 的更多信息,请参阅 http://www.perlmaven.com/http://learn.perl.org

【讨论】:

    【解决方案2】:

    修复代码:

    $$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} = $messages{"en"};
    
    sub GetMessageHash
    {
       return $$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"};
    }
    

    参考: https://github.com/guangbin79/dss6.0.3-linux-patch

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2016-11-20
      • 1970-01-01
      • 2015-11-14
      • 2015-10-02
      • 2020-02-14
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多