我想在运行时为本地存储的视频文件创建别名。例如,我有一个“test/video.flv”文件,并创建了一个“abc123”别名(如果扩展名很重要,则为“abc123.flv”)。
我想将这些别名用于唯一且一次性的视频路径。所以我需要在 1 次使用后将它们移除。
- 如何在运行时创建别名?
- 如何在运行时删除它?
我已经找到了一个更好的解决方案!在 red5-web.xml 文件中,我添加了一个 bean<bean id="streamFilenameGenerator" class="myapp.FilenameGenerator"></bean>
并为它创建了类public class FilenameGenerator implements IStreamFilenameGenerator
。现在我只需要重写public String generateFilename(IScope scope, String name, GenerationType type)
负责文件名解析的函数。name 参数是请求的流名称,返回值是解析的。从现在开始,这很简单,例如创建一个带有 key=alias name 和 value=real 现有文件路径的 HashMap。
您有多种选择来实现这一点:
一种方法是创建一个符号链接,这样您就可以使用底层操作系统来欺骗 red5 存在一个文件。然后,您必须在 ApplicationAdapter 中添加侦听器以侦听所需的事件。例如: http ://dl.fancycode.com/red5/api/org/red5/server/adapter/ApplicationAdapter.html => streamStart/stop 等等。您必须查找您的 Red5 版本的 ApplicationAdapter 以查看您可以在您正在使用的 Red5 版本中侦听的所有可能事件!
第二种解决方案是编写一个自定义流处理程序。然而,这需要进一步调查。我认为没有标准机制来修改文件请求以对其应用某种通配符。它的工作方式类似于第一个解决方案,但您需要重写/覆盖 ApplicationAdapter 的一些机制来处理文件请求。
所以基本上最好的办法是研究你的 ApplicationAdapter 并找到你正在寻找的事件监听器。