使用PHP为AWS生成签名RTMP URL


Using PHP to generate a signed RTMP URL for AWS

我创建了一个PHP函数,它为AWS生成一个签名的URL。我已经将它用于各种http内容。

我现在需要使用它来生成一个已签名的RTMP链接。我在文档中看到,我应该只使用没有扩展名的文件夹/文件名。

假设我的bucket结构是dms/myfile.mp4,我将dms/myfile传递到我的PHP函数中,它生成散列URL。散列后的URL如下所示:

dms/myfile?Expires=1409073611&Signature=Iw2Df~JXc4psMp0f8qQz8WtxCbW54ErcN--CwCEGo7yf8Fg1wH-qFY9AjCvsV04w0piWoRzlYgEh6uz6tOaCwiEBZPn41FYFStvq3VXh34s1bEi4HQEDh0~nCXW5RZaUnHGcFWzK25HddmfY-4Yvw5fIHaIxMwIv9HZ3yIo0S~HqKO2h0ZKnf4sJ6vDeiVQ3Lx73bKJQV2kISIybu7QyUGQTH0XLWCAz5hq-zVuz~xbqcHqO27~sVdSXhPw4jLDGDnnhp6oXWF-SV-0eK8QImu1saWlCxr3bWVA1MTrNExw0LsTbjJGLA1Vsd74CzI6mVR8V6NjX82ZONAcVPAs4QQ__&Key-Pair-Id=APKAI3ZSOLRDPPSNWPDA

在我的AS3代码中,我成功地连接到RTMP分发服务器,然后我尝试将动态流项目播放为:

mp4:dms/myfile?Expires=1409073611&Signature=Iw2Df~JXc4psMp0f8qQz8WtxCbW54ErcN--CwCEGo7yf8Fg1wH-qFY9AjCvsV04w0piWoRzlYgEh6uz6tOaCwiEBZPn41FYFStvq3VXh34s1bEi4HQEDh0~nCXW5RZaUnHGcFWzK25HddmfY-4Yvw5fIHaIxMwIv9HZ3yIo0S~HqKO2h0ZKnf4sJ6vDeiVQ3Lx73bKJQV2kISIybu7QyUGQTH0XLWCAz5hq-zVuz~xbqcHqO27~sVdSXhPw4jLDGDnnhp6oXWF-SV-0eK8QImu1saWlCxr3bWVA1MTrNExw0LsTbjJGLA1Vsd74CzI6mVR8V6NjX82ZONAcVPAs4QQ__&Key-Pair-Id=APKAI3ZSOLRDPPSNWPDA

注意签名URL前的"mp4"

由于某种原因,当我尝试播放视频时,我得到错误

Failed to play dms/myfile; stream not found.

有人知道我在这里做错了什么吗?我可以向你保证该文件确实存在。

这是错误背后的几个原因

  1. 如果文件是mp4,则使用mp4:{file_name_without_extension}?签名url
  2. 如果文件是flv,则使用{file_name_with_extension}?签名url
  3. 如果你正在创建基于时间的签名url,那么当你访问该url时,时间可能已经结束。你需要增加时间,或者需要检查你的服务器时间,因为时间可能是原因
  4. 检查文件是否存在,并且您正在使用相同的RTMP网络来访问文件所在的bucket
  5. 此外,在创建RTMP网络时,您应该使用"限制查看器访问"(使用签名的URL)-是