从AIR上的serversocket流式传输mp4视频

时间:2014-09-02 13:57:55

标签: ios flex air webserver serversocket

我正在尝试在Adobe AIR应用程序内的iPad上构建一个迷你网络服务器。 我正在使用ServerSocket类来设置Web服务器,如http://coenraets.org/blog/2010/07/creating-a-web-server-using-the-new-server-socket-api-in-air-2/中的示例所示。

我试图通过允许网络服务器提供mp4视频文件来扩展它。

我添加了mimetype:mimeTypes [“。mp4”] =“video / mp4”;

但是要在浏览器中播放mp4与提供html文件并不完全相同。

任何人都能指出我正确的方向吗?这是套接字响应时我目前拥有的代码:

private function webserverConnectionSocketDataHandler(evt:ProgressEvent):void{
                try
                {
                    var socket:Socket = evt.target as Socket;
                    var bytes:ByteArray = new ByteArray();
                    socket.readBytes(bytes);
                    var request:String = "" + bytes;
                    var filePath:String = request.substring(5, request.indexOf("HTTP/") - 1);
                    var file:File = File.applicationDirectory.resolvePath("AppStorage").resolvePath(filePath);
                    if (file.exists && !file.isDirectory)
                    {

                        //Range: bytes=0-131726
                        var offset:uint = 0;
                        var bytesRequested:uint = 0;
                        if(request.indexOf("Range: bytes=") >= 0){
                            offset = uint(request.split("Range: bytes=")[1].split("-")[0]);
                            bytesRequested = (request.split("Range: bytes=")[1].split("-")[1]);
                        }

                        if(bytesRequested == 0) bytesRequested = file.size;

                        var stream:FileStream = new FileStream();
                        stream.open( file, FileMode.READ );
                        var content:ByteArray = new ByteArray();
                        stream.readBytes(content, offset, bytesRequested);
                        stream.close();
                        if(bytesRequested != file.size){
                            socket.writeUTFBytes("HTTP/1.1 206 Partial Content\n");
                            socket.writeUTFBytes("Content-Type: " + getMimeType(filePath) + "\n\n");
                            socket.writeUTFBytes("Content-Range: " + offset + "-" + bytesRequested + "/" + file.size + "\n\n");
                            socket.writeUTFBytes("Content-Length: " + (bytesRequested-offset) + "\n\n");
                            socket.writeUTFBytes("Date: " + new Date().toLocaleTimeString() + "\n\n");
                        }else{
                            socket.writeUTFBytes("HTTP/1.1 200 OK\n");
                            socket.writeUTFBytes("Content-Type: " + getMimeType(filePath) + "\n\n");
                            socket.writeUTFBytes("Content-Length: " + file.size + "\n\n");
                        }
                        socket.writeBytes(content);
                    }
                    else
                    {
                        socket.writeUTFBytes("HTTP/1.1 404 Not Found\n");
                        socket.writeUTFBytes("Content-Type: text/html\n\n");
                        socket.writeUTFBytes("<html><body><h2>Page Not Found</h2></body></html>");
                    }
                    socket.flush();
                    socket.close();
                }
                catch (error:Error)
                {
                    trace(error.message, "Error");
                }
            }

但这并没有像预期的那样真正发挥作用。目标是能够从我的iPad上的浏览器内部查看我的iPad应用程序的AppStorage目录中的mp4。它适用于html文件,而不适用于mp4。

0 个答案:

没有答案