2013-08-06 2 views
0

그래서 온라인 (예 : somewebsite.com/myVideo.mkv) 링크가있어서 서블릿을 통해 서버에 해당 동영상을 다운로드하고 싶습니다. 비디오 파일은 CDN을 사용할 수 있으므로 기본적으로 모든 공용 사용자는 링크를 브라우저에 넣을 수 있으며 재생이 시작됩니다. 이것은 내가 지금까지 가지고있는 코드이다.서블릿을 통해 동영상 파일의 일부를 다운로드하십시오.

downloadFile(URL myURL){ 
    InputStream input = myURL.openStream(); 
    File video = new File ("/path-to-file/" + myURL.getFile()); 
    FileOutputStream output = new FileOutputStream(output); 

    byte[] buffer = new byte[1024]; 
    int read; 

    // Write full range. 
    while ((read = input.read(buffer)) > 0){ 
    output.write(buffer, 0, read); 
    } 

    output.close(); 
    input.close() 
} 

이렇게하면 URL과 비디오 재생에서 전체 비디오 파일을 다운로드하게됩니다. 그러나 비디오 downloadFile (URL myURL, long startByte, long endByte)에서 특정 바이트 범위를 지정하려는 경우 비디오가 재생되지 않습니다. startByte로 넘어가려면 input.skip() 함수를 사용했지만 mkv 형식의 중요한 헤더를 건너 뛸 수 있습니다. 그것이 플레이어가 그것을 인식 할 수없는 이유입니다. 누구든지 자바에서이 작업을 수행하는 방법을 알고 있습니까?

+1

미디어 파일이 그런 식으로 작동하지 않습니다. 블랙 박스로 보아라. 아마도 당신이 찾고있는 것은 비디오 파일을 일부 스트리밍 형식으로 변환하고 원하는 지점에서 클라이언트를 스트리밍 할 수 있도록하는 것입니다. – Olaf

+0

당신이 말한 것은 의미가 있지만 솔직히 나는 그것으로 시작하는 방법조차 모른다. url.openStream()을 할 때 스트리밍 형식으로 변환 중입니다. – GiangP

답변

0

Apple HTTP 실시간 스트리밍, Microsoft Smooth Streaming 및 Adobe HTTP 동적 스트리밍과 같은 3 가지 주요 HTTP 스트리밍 기술이 있습니다. 이러한 각 기술은 비디오를 해당 형식으로 변환하는 도구를 제공합니다. 하나의 대형 비디오 파일로 시작한다면 Apple과 Adobe 도구는 각각 10 초 분량의 비디오가 포함 된 여러 개의 작은 파일을 만들고 클라이언트는이를 읽는 방법을 알 수있는 재생 목록 파일을 만듭니다. 필자는 Microsoft 도구가 실제로 하나의 파일을 생성 할 수 있다고 생각하지만 내부적으로 작은 비디오 조각을 포함하게됩니다.

HTTP 스트리밍의 경우 "인텔리전스"는 마스터 재생 목록 파일을 읽는 방법을 알고 있으며 수많은 미디어 파일 또는 수많은 미디어 파일 조각을 피하는 방법을 알고 있습니다. HTTP 서버는 Range 헤더로 지정된 파일이나 파일 조각 만 제공하면됩니다.

관련 문제