我正在尝试在我的内容服务器上启用 mp4 流。由于与我合作的一些安全狂热分子,所有文件都通过 php 脚本传送,并具有以下 url 格式:
http://server.com/cdn/3/getObject?param1=71¶m2=1002&file=File1000.mp4
因此,所有标准格式的流式请求(例如以下 URL)都会因附加参数而失败
http://server.com/cdn/3/getObject?param1=71¶m2=1002&file=File1000.mp4?start=10.0
我目前正在运行 nginx,其中已编译并运行 mp4 流式传输模块。我正在考虑进行 URL 重写以启用流式传输,但目前还没有成功。除此之外,我还必须在下一步中启用安全流式传输...
任何帮助都将受到高度赞赏。
更新:
看来我的问题还不够清楚。
我不想使用 PHP 脚本或其他任何脚本来流式传输我的 mp4 文件。我的问题是使用 PHP 脚本来确定文件的路径,这是因为我需要确保人们不能猜测其他 URL。因此,如果所有其他参数都符合要求,getObject 脚本只会返回请求的文件而不做任何修改或其他操作。现在的问题是,这使得无法流式传输文件。任何尝试流式传输 mp4 文件(例如使用 flowplayer)都会失败,即使启用了流式传输模块也是如此。
答案1
根本没有 HTTP Steaming 这回事。不过,有几种方法可以模拟它。
第一个也是最古老的方法是使用Range:
标头来指定客户端想要的文件块。没有什么可以阻止 PHP 脚本根据该标头发送正确的块,它只需读取标头并返回带有文件数据的正确响应标头即可。
第二种方法是使用某种类型的服务器模块,该模块可以理解正在流式传输的文件的格式,并在每个时间段内提供“正确”的数据量。这就是 ngninx 的 mp4 模块所做的。也许可以编写一个 PHP 脚本来计算文件的数据速率,然后以该速率发送文件,但我不知道有哪种脚本,而且编写这样的脚本会很困难。