使用http而不是rtmp

时间:2017-04-04 16:54:55

标签: http rtmp red5

我目前有一个Red5应用程序,它使用类似于上面显示的示例的自定义流路径 Red5's wiki

使用以下rtmp流时效果很好:

rtmp://localhost:1935/streaming/videos/myVid.mp4

我需要能够使用http流做同样的事情。 例如:

http://localhost:8080/streaming/videos/myVid.mp4

当我将流url从rtmp更改为http时,不再调用CustomFilenameGenerator类。

使用http时是否可以拥有自定义流路径?如果是,是否需要添加/更改配置或某些内容才能使其正常工作?

编辑:

为了清楚起见,目前我只能将视频流式传输到位于我的服务器计算机上/ red5Root / webApps / myApp / videos /目录中的网页。

我目前可以在视频代码中使用http://my.server.ip.address/myApp/videos/videoName.mp4来播放位于我服务器上视频目录中的名为“videoName.mp4”的视频。

我希望能够使用http://my.server.ip.address/myApp/someUniqeIdOrName并让我的Red5 CustomFilenameGenerator类返回与“someUniqeIdOrName”关联的视频的实际路径(我服务器上文件系统中的其他位置)并播放视频从那个位置。

2 个答案:

答案 0 :(得分:0)

要通过普通HTTP播放视频,您只需要一个普通的Web服务器并将其嵌入到VIDEO标记中。

如果您想通过HLS(HTTP直播流)或MPEG Dash播放,则需要对其进行分段(分组)。 实时数据包由Wowza Streaming Engine完成,非常适合提供实时流。

对于现有视频,您还可以使用可以使用FFMPEG进行的预分割。您可以使用免费的Video Share VOD交钥匙网站解决方案轻松管理视频并在您的网站上生成细分(如果您与FFMPEG和必要的编解码器兼容托管)。

答案 1 :(得分:0)

我无法找到一种方法来使用我的CustomFilenameGenerator类,但我找到了一个不同的解决方案,它给了我相同的结果。

我添加了一个重定向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类。

从请求中获取文件名后,您可以根据要设置的文件名执行任何逻辑,并返回响应中所需视频/文件的实际位置和名称。

示例:

 ...
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类,我可以通过在我的网页上的视频标记内设置src="http://[myip]:8080/[myApp]/files/[uniqeFileNameOrId]"来在我的服务器上的任何位置播放视频。

注意:如果您希望从服务器返回的文件不是视频,则FileServlet类的简单示例为here