使用 http 而不是 rtmp 自定义流路径
Customize Stream Path using http instead of rtmp
我目前有一个 Red5 应用程序,它使用类似于上所示示例的自定义流路径
Red5's wiki.
使用以下 rtmp 流时效果很好:
rtmp://localhost:1935/streaming/videos/myVid.mp4
我需要能够对 http 流执行相同的操作。
例如:
http://localhost:8080/streaming/videos/myVid.mp4
当我将流 url 从 rtmp 更改为 http 时,不再调用 CustomFilenameGenerator class。
是否可以在使用 http 时使用自定义流路径?如果是这样,是否有配置或需要 added/changed 才能使其正常工作?
编辑:
需要说明的是,目前我只能将视频流式传输到我的网页,这些视频位于我服务器计算机上的 /red5Root/webApps/myApp/videos/ 目录中。
我目前可以在视频标签内使用 http://my.server.ip.address/myApp/videos/videoName.mp4
来播放服务器视频目录中名为 "videoName.mp4" 的视频。
我希望能够使用 http://my.server.ip.address/myApp/someUniqeIdOrName
并让我的 Red5 CustomFilenameGenerator class 然后 return 视频的实际路径(我服务器上文件系统中的其他地方)与 "someUniqeIdOrName" 关联并从该位置播放视频。
要通过纯 HTTP 播放视频,您只需要一个纯 Web 服务器并将其嵌入 VIDEO 标记中。
如果您想通过 HLS(HTTP 实时流媒体)或 MPEG Dash 播放它,您需要对其进行分段(打包)。
实时打包由 Wowza Streaming Engine 完成,非常适合提供实时流。
对于现有视频,您还可以使用 FFMPEG 可以完成的预分割。您可以使用免费的 Video Share VOD 一站式网站解决方案轻松管理视频并在您的网站上生成片段(如果您拥有与 FFMPEG 兼容的主机和必要的编解码器)。
我无法找到一种方法使它与我的 CustomFilenameGenerator 一起工作class,但我找到了一个不同的解决方案,它给出了相同的结果。
我添加了一个重定向 servlet。在我的 web.xml 中添加以下内容:
<servlet>
<servlet-name>fileServlet</servlet-name>
<servlet-class>com.my.package.stream.app.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fileServlet</servlet-name>
<url-pattern>/files/*</url-pattern>
</servlet-mapping>
然后我根据示例 here 创建了一个 FileServlet class。
从请求中获取文件名后,您可以根据要设置的文件名和 return 您想要在响应中 video/file 的实际位置和名称执行任何逻辑。
示例:
...
private void processRequest(HttpServletRequest request, HttpServletResponse response, boolean content) throws IOException {
// Get requested file by path info.
String requestedFile = request.getPathInfo();
// Check if file is actually supplied to the request URL.
if (requestedFile == null) {
// Do your thing if the file is not supplied to the request URL.
// Throw an exception, or send 404, or show default/warning page, or just ignore it.
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
****** Insert logic here to set basePath and requestedFile to what you need ****
// URL-decode the file name (might contain spaces and on) and prepare file object.
File file = new File(basePath, URLDecoder.decode(requestedFile, "UTF-8"));
...
使用上述 servlet 和类似的 FileServlet class 我可以通过在我的网页上的视频标签内设置 src="http://[myip]:8080/[myApp]/files/[uniqeFileNameOrId]"
在我的服务器上的任何地方播放视频。
注意:如果您想要从服务器取回的文件不是视频,FileServlet class 的更简单示例是 here.
我目前有一个 Red5 应用程序,它使用类似于上所示示例的自定义流路径 Red5's wiki.
使用以下 rtmp 流时效果很好:
rtmp://localhost:1935/streaming/videos/myVid.mp4
我需要能够对 http 流执行相同的操作。 例如:
http://localhost:8080/streaming/videos/myVid.mp4
当我将流 url 从 rtmp 更改为 http 时,不再调用 CustomFilenameGenerator class。
是否可以在使用 http 时使用自定义流路径?如果是这样,是否有配置或需要 added/changed 才能使其正常工作?
编辑:
需要说明的是,目前我只能将视频流式传输到我的网页,这些视频位于我服务器计算机上的 /red5Root/webApps/myApp/videos/ 目录中。
我目前可以在视频标签内使用 http://my.server.ip.address/myApp/videos/videoName.mp4
来播放服务器视频目录中名为 "videoName.mp4" 的视频。
我希望能够使用 http://my.server.ip.address/myApp/someUniqeIdOrName
并让我的 Red5 CustomFilenameGenerator class 然后 return 视频的实际路径(我服务器上文件系统中的其他地方)与 "someUniqeIdOrName" 关联并从该位置播放视频。
要通过纯 HTTP 播放视频,您只需要一个纯 Web 服务器并将其嵌入 VIDEO 标记中。
如果您想通过 HLS(HTTP 实时流媒体)或 MPEG Dash 播放它,您需要对其进行分段(打包)。 实时打包由 Wowza Streaming Engine 完成,非常适合提供实时流。
对于现有视频,您还可以使用 FFMPEG 可以完成的预分割。您可以使用免费的 Video Share VOD 一站式网站解决方案轻松管理视频并在您的网站上生成片段(如果您拥有与 FFMPEG 兼容的主机和必要的编解码器)。
我无法找到一种方法使它与我的 CustomFilenameGenerator 一起工作class,但我找到了一个不同的解决方案,它给出了相同的结果。
我添加了一个重定向 servlet。在我的 web.xml 中添加以下内容:
<servlet>
<servlet-name>fileServlet</servlet-name>
<servlet-class>com.my.package.stream.app.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fileServlet</servlet-name>
<url-pattern>/files/*</url-pattern>
</servlet-mapping>
然后我根据示例 here 创建了一个 FileServlet class。
从请求中获取文件名后,您可以根据要设置的文件名和 return 您想要在响应中 video/file 的实际位置和名称执行任何逻辑。
示例:
...
private void processRequest(HttpServletRequest request, HttpServletResponse response, boolean content) throws IOException {
// Get requested file by path info.
String requestedFile = request.getPathInfo();
// Check if file is actually supplied to the request URL.
if (requestedFile == null) {
// Do your thing if the file is not supplied to the request URL.
// Throw an exception, or send 404, or show default/warning page, or just ignore it.
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
****** Insert logic here to set basePath and requestedFile to what you need ****
// URL-decode the file name (might contain spaces and on) and prepare file object.
File file = new File(basePath, URLDecoder.decode(requestedFile, "UTF-8"));
...
使用上述 servlet 和类似的 FileServlet class 我可以通过在我的网页上的视频标签内设置 src="http://[myip]:8080/[myApp]/files/[uniqeFileNameOrId]"
在我的服务器上的任何地方播放视频。
注意:如果您想要从服务器取回的文件不是视频,FileServlet class 的更简单示例是 here.