간단한 영상 스트리밍 제공 방법

꾸준하게 20년·2023년 4월 25일
0

개발환경

  • spring-boot 2.7.1
  • open-jdk11

시나리오

  1. 웹뷰에서 video 태그를 이용하여 동영상을 플레이 하는 기능이 필요.
  2. 최초 단순 영상 재생이었으나 영상의 원하는 위치를 선택 할 경우 해당 위치부터 영상 재생이 원활히 되어야 하는 요구사항이 발생.
  3. 서버에서는 단순히 영상을 서빙하는 형태라서 해당 기능을 위해 코드 수정이 필요.

해결과정

  • 해결하기 위한 핵심 키워드는 "http range" 범위 요청이다.

  • 서버에서 범위 요청에 대한 처리를 지원해야 문제를 해결 할 수 있었다.

    범위 요청을 지원하는지 테스트 하는 방법은 아래 정보를 참고.
    https://developer.mozilla.org/ko/docs/Web/HTTP/Range_requests

  • 범위 요청에 대한 처리를 직접 구현하는 방법도 있었지만 단순히 영상만 재생하면 된다는 요구사항을 재확인 하였기에 spring 에서 제공하는 간단한 방법으로 구현하였다.

  • 구현 코드의 핵심은 다음과 같다.

@GetMapping(path="/content/video/{path}", produces="video/mp4")
public Resource video(@PathVariable String path) throws Exception {
    ...
	final InputStream videoStream = new ByteArrayInputStream(IOUtils.toByteArray(inputStream, size));
	return new ByteArrayResource(FileCopyUtils.copyToByteArray(videoStream));
}
  • 리턴 타입을 org.springframework.core.io.Resource 지정.
  • 리턴 값으로 org.springframework.core.io.ByteArrayResource 객체를 넘겨주면 나머지는 spring 에서 처리 한다.

spring 에서 처리하는 부분 관련

  • Http 응답을 Resource 타입으로 할 경우 Http Range 처리를 자동으로 하는 것은 맞다.
  • 하지만 클라이언트에서 Range 헤더를 포함하여 요청해야만 자동으로 처리 된다.
  • html5 video 태그는 Range 헤더를 자동으로 사용하기 때문에 문제없이 처리 할 수 있었다.
profile
앞으로 1년

0개의 댓글