Search in sources :

Example 6 with DLNAResource

use of net.pms.dlna.DLNAResource in project UniversalMediaServer by UniversalMediaServer.

the class RemoteRawHandler method handle.

@Override
public void handle(HttpExchange t) throws IOException {
    LOGGER.debug("got a raw request " + t.getRequestURI());
    if (RemoteUtil.deny(t)) {
        throw new IOException("Access denied");
    }
    RootFolder root = parent.getRoot(RemoteUtil.userName(t), t);
    if (root == null) {
        throw new IOException("Unknown root");
    }
    String id;
    id = RemoteUtil.strip(RemoteUtil.getId("raw/", t));
    LOGGER.debug("raw id " + id);
    List<DLNAResource> res = root.getDLNAResources(id, false, 0, 0, root.getDefaultRenderer());
    if (res.size() != 1) {
        // another error
        LOGGER.debug("media unkonwn");
        throw new IOException("Bad id");
    }
    DLNAResource dlna = res.get(0);
    long len;
    String mime = null;
    InputStream in;
    Range.Byte range;
    if (dlna.getMedia() != null && dlna.getMedia().isImage() && dlna.getMedia().getImageInfo() != null) {
        boolean supported = false;
        ImageInfo imageInfo = dlna.getMedia().getImageInfo();
        if (root.getDefaultRenderer() instanceof WebRender) {
            WebRender renderer = (WebRender) root.getDefaultRenderer();
            supported = renderer.isImageFormatSupported(imageInfo.getFormat());
        }
        mime = dlna.getFormat() != null ? dlna.getFormat().mimeType() : root.getDefaultRenderer().getMimeType(dlna.mimeType(), dlna.getMedia());
        len = supported && imageInfo.getSize() != ImageInfo.SIZE_UNKNOWN ? imageInfo.getSize() : dlna.length();
        range = new Range.Byte(0l, len);
        if (supported) {
            in = dlna.getInputStream();
        } else {
            InputStream imageInputStream;
            if (dlna.getPlayer() instanceof ImagePlayer) {
                ProcessWrapper transcodeProcess = dlna.getPlayer().launchTranscode(dlna, dlna.getMedia(), new OutputParams(PMS.getConfiguration()));
                imageInputStream = transcodeProcess != null ? transcodeProcess.getInputStream(0) : null;
            } else {
                imageInputStream = dlna.getInputStream();
            }
            Image image = Image.toImage(imageInputStream, 3840, 2400, ScaleType.MAX, ImageFormat.JPEG, false);
            len = image.getBytes(false).length;
            in = image == null ? null : new ByteArrayInputStream(image.getBytes(false));
        }
    } else {
        len = dlna.length();
        dlna.setPlayer(null);
        range = RemoteUtil.parseRange(t.getRequestHeaders(), len);
        in = dlna.getInputStream(range, root.getDefaultRenderer());
        if (len == 0) {
            // For web resources actual length may be unknown until we open the stream
            len = dlna.length();
        }
        mime = root.getDefaultRenderer().getMimeType(dlna.mimeType(), dlna.getMedia());
    }
    Headers hdr = t.getResponseHeaders();
    LOGGER.debug("Sending media \"{}\" with mime type \"{}\"", dlna, mime);
    hdr.add("Content-Type", mime);
    hdr.add("Accept-Ranges", "bytes");
    hdr.add("Server", PMS.get().getServerName());
    hdr.add("Connection", "keep-alive");
    hdr.add("Transfer-Encoding", "chunked");
    if (in.available() != len) {
        hdr.add("Content-Range", "bytes " + range.getStart() + "-" + in.available() + "/" + len);
        t.sendResponseHeaders(206, in.available());
    } else {
        t.sendResponseHeaders(200, 0);
    }
    OutputStream os = new BufferedOutputStream(t.getResponseBody(), 512 * 1024);
    LOGGER.debug("start raw dump");
    RemoteUtil.dump(in, os);
}
Also used : ImagePlayer(net.pms.encoders.ImagePlayer) WebRender(net.pms.configuration.WebRender) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) Headers(com.sun.net.httpserver.Headers) OutputStream(java.io.OutputStream) BufferedOutputStream(java.io.BufferedOutputStream) IOException(java.io.IOException) Range(net.pms.dlna.Range) Image(net.pms.image.Image) DLNAResource(net.pms.dlna.DLNAResource) ProcessWrapper(net.pms.io.ProcessWrapper) ByteArrayInputStream(java.io.ByteArrayInputStream) RootFolder(net.pms.dlna.RootFolder) ImageInfo(net.pms.image.ImageInfo) OutputParams(net.pms.io.OutputParams) BufferedOutputStream(java.io.BufferedOutputStream)

Example 7 with DLNAResource

use of net.pms.dlna.DLNAResource in project UniversalMediaServer by UniversalMediaServer.

the class ChromecastPlayer method setURI.

@Override
public void setURI(String uri, String metadata) {
    Playlist.Item item = resolveURI(uri, metadata);
    if (item != null) {
        // this is a bit circular but what the heck
        DLNAResource r = DLNAResource.getValidResource(item.uri, item.name, renderer);
        if (r == null) {
            LOGGER.debug("Bad media in cc seturi: " + uri);
            return;
        }
        try {
            api.launchApp(MediaPlayer);
            api.load("", null, item.uri, r.mimeType());
        } catch (IOException e) {
            LOGGER.debug("Bad chromecast load: " + e);
        }
    }
}
Also used : DLNAResource(net.pms.dlna.DLNAResource) IOException(java.io.IOException)

Example 8 with DLNAResource

use of net.pms.dlna.DLNAResource in project UniversalMediaServer by UniversalMediaServer.

the class UPNPHelper method play.

public static void play(DLNAResource d, DeviceConfiguration r) {
    DLNAResource d1 = d.getParent() == null ? Temp.add(d) : d;
    if (d1 != null) {
        Device dev = getDevice(r.getUUID());
        String id = r.getInstanceID();
        setAVTransportURI(dev, id, d1.getURL(""), r.isPushMetadata() ? d1.getDidlString(r) : null);
        play(dev, id);
    }
}
Also used : DLNAResource(net.pms.dlna.DLNAResource) Device(org.fourthline.cling.model.meta.Device)

Aggregations

DLNAResource (net.pms.dlna.DLNAResource)8 IOException (java.io.IOException)5 RootFolder (net.pms.dlna.RootFolder)4 WebRender (net.pms.configuration.WebRender)3 Playlist (net.pms.dlna.Playlist)3 OutputParams (net.pms.io.OutputParams)3 Headers (com.sun.net.httpserver.Headers)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 VirtualVideoAction (net.pms.dlna.virtual.VirtualVideoAction)2 ImagePlayer (net.pms.encoders.ImagePlayer)2 ProcessWrapper (net.pms.io.ProcessWrapper)2 BufferedOutputStream (java.io.BufferedOutputStream)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 File (java.io.File)1 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 MalformedURLException (java.net.MalformedURLException)1 Socket (java.net.Socket)1 URL (java.net.URL)1