Macos Darwin流媒体服务器安装问题os x

Macos Darwin流媒体服务器安装问题os x,macos,perl,darwin,dss,Macos,Perl,Darwin,Dss,我的问题与回答中提到的问题相同。我一直在努力理解代码,这就是我学到的: 它在文件parse_xml.cgi中失败,尝试从名为messages的文件(位于html_en目录中)获取消息(return$message{$name})。 $messages值来自文件adminprotocol-lib.pl中的方法GetMessageHash: $ENV{“QTSSADMINSERVER_EN_MESSAGEHASH”}在streamingadminserver.pl文件中设置: 我对Perl一无所知,

我的问题与回答中提到的问题相同。我一直在努力理解代码,这就是我学到的:

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

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

我对Perl一无所知,所以我不知道问题出在哪里,因为我看到的
$messages{“en”}
的值是正确的(如果我打印
print($messages{“en”}{“SunStr”}
我得到的值是“Sun”))

但是,如果我尝试执行
打印($ENV{“qtsAdminServer_EN_MESSAGEHASH”}{'SunStr'}
我什么也得不到。似乎
$ENV{“qtsAdminServer_EN_MESSAGEHASH”}
没有设置

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

$ENV{"HELLO"} = "hello";
print($ENV{"HELLO"});
它工作正常,打印“你好”


知道问题可能是什么吗?

看起来像是
$messages{“en”}
是一个:指向保存键值存储的某个内存地址的指针。您甚至可以打印相关的内存地址:

perl -le 'my $hashref = {}; print $hashref;'
HASH(0x1548e78)
0x1548e78是地址,但它仅在同一个正在运行的进程中有效。重新运行sample命令,每次将获得不同的地址

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

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

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

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

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

$ENV{"QTSSADMINSERVER_EN_SUN"} = $messages{"en"}->{SunStr};
最佳实践是在两个键之间使用->键。键的“或”引号也可以

但是通过环境变量传递所有内容感觉是错误的。它们可能无法在OSX上保存引用(我不知道)。您可能希望将字符串存储提取到包含文件中,然后通过加载


有关Perl的更多信息,请参见或。

看起来像
$messages{“en”}
是一个:指向保存键值存储的某个内存地址的指针。您甚至可以打印相关的内存地址:

perl -le 'my $hashref = {}; print $hashref;'
HASH(0x1548e78)
0x1548e78是地址,但它仅在同一个正在运行的进程中有效。重新运行sample命令,每次将获得不同的地址

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

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

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

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

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

$ENV{"QTSSADMINSERVER_EN_SUN"} = $messages{"en"}->{SunStr};
最佳实践是在两个键之间使用->键。键的“或”引号也可以

但是通过环境变量传递所有内容感觉是错误的。它们可能无法在OSX上保存引用(我不知道)。您可能希望将字符串存储提取到包含文件中,然后通过加载

有关Perl的更多信息,请参阅或。

修复代码:

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

sub GetMessageHash
{
   return $$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"};
}
参考:

修复代码:

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

sub GetMessageHash
{
   return $$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"};
}
参考:

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