액세스/자체를 스트림에이
- 액세스 진 : 스트리밍의 측면에서 , 나는 우리가 두 개의 독립적 인 부분으로 문제를 분리 할 필요가 있다고 생각 데이터) 미디어 리소스에
1) 액세스
이 매우 간단하고 깨끗하고 편안하고 방법으로 처리 할 수 있습니다. 개별 스트림도
GET /media/
<?xml version="1.0" encoding="UTF-8" ?>
<media-list uri="/media">
<media uri="/media/1" />
<media uri="/media/2" />
...
</media-list>
... 그리고 : : 예를 들어, 이제 우리는 우리가 스트림의 목록에 액세스 할 수있는 XML 기반의 API있을 것이라는 점을 가정 해 봅시다
GET /media/1
<?xml version="1.0" encoding="UTF-8" ?>
<media uri="/media/1">
<id>1</id>
<title>Some video</title>
<stream>rtsp://example.com/media/1.3gp</stream>
</media>
2) 매체/스트림 자체에 대한 액세스
이것은 더 문제가되는 비트입니다. 질문에 이미 하나의 옵션을 지적 했으므로 RESTful API를 통해 개별적으로 프레임에 액세스 할 수 있습니다. 이 방법이 효과가있을지라도 나는 그것이 실행 가능한 선택이 아니라는 점에 동의합니다.
나는 사이하는 선택의 여지가 있다고 생각한다
- 전문 스트리밍 프로토콜을 통해 전용 서비스로 스트리밍 위임 (예 : RTSP) HTTP에 사용할 수있는 옵션을 활용
전용 스트리밍 서비스 (및/또는 하드웨어)이 필요하지만 전자는 더 효율적인 선택이라고 생각합니다. RESTful로 간주되는 것의 가장자리에 조금있을 수도 있지만 API가 모든 측면에서 RESTful이며 전용 스트리밍 서비스가 균일 인터페이스 (GET/POST/PUT/DELETE)를 따르지 않더라도 Google API 않습니다. 우리 API는 GET/POST/PUT/DELETE를 통해 리소스와 메타 데이터를 적절하게 제어 할 수있게하며 스트리밍 서비스에 대한 링크를 제공합니다 (따라서 REST의 연결성 측면을 준수합니다).
후자의 옵션 - HTTP을 통한 스트리밍은 위와 같이 효율적이지 않을 수 있지만 확실히 가능합니다. 엄밀히 말하자면, HTTP를 통해 이진 컨텐트의 어떤 형태로든 액세스하는 것을 허용하는 것만 큼 다르지 않습니다. 이 경우 우리의 API는 HTTP를 통해 액세스 할 바이너리 자원에 대한 링크를 제공 할 것, 또한 자원의 크기에 대한 정보를 조언 :
GET /media/1
<?xml version="1.0" encoding="UTF-8" ?>
<media uri="/media/1">
<id>1</id>
<title>Some video</title>
<bytes>1048576</bytes>
<stream>/media/1.3gp</stream>
</media>
클라이언트는 GET /media/1.3gp
를 사용하여 HTTP를 통해 리소스에 액세스 할 수 있습니다. 하나의 옵션은 클라이언트가 전체 리소스 (HTTP progressive download)를 다운로드하는 것입니다. 더 깨끗한 대안은 클라이언트가 HTTP Range headers을 사용하여 청크로 리소스에 액세스하는 것입니다. 1메가바이트 큰 파일의 두 번째 2백56킬로바이트 청크를 가져 오는 경우, 클라이언트 요청은 다음과 같을 것이다 : 자원의 부분적인 표현 다음에
GET /media/1.3gp
...
Range: bytes=131072-262143
...
범위는 다음 Content-Range header로 응답 할 것이다 지원하는 서버, :
HTTP/1.1 206 Partial content
...
Content-Range: bytes 131072-262143/1048576
Content-Length: 1048576
...
Google API는 이미 클라이언트에게 파일의 실제 크기 (바이트) (1MB)를 알려줍니다. 클라이언트가 리소스의 크기를 알지 못하는 경우 먼저 크기를 확인하기 위해 HEAD /media/1.3gp
을 호출해야합니다. 그렇지 않으면 416 Requested Range Not Satisfiable
으로 서버 응답을받을 위험이 있습니다.
와우 ...이 좋은 정보입니다. 당신은 이것에 대해 생각할 수있는 몇 가지 새로운 방법에 관심을 기울였습니다. 나는 또한 실시간 스트리밍 프로토콜을 알지 못했다. – JnBrymn
문제가되지 않는다면 도움이 되었기 때문에 기쁩니다. 그러나 스트리밍 프로토콜을 개인적으로 사용할 기회는 없었습니다 (HTTP를 통한 점진적 스트리밍 제외). 예를 들어 RTSP를 선택했는데 특정 시나리오에서 유용할지 여부를 알 수 없습니다. 당신은 구체적으로 스트리밍 프로토콜에 대한 다른 질문을 할 수 있습니다. Wikipedia는 다른 프로토콜에 대한 좋은 출발점을 제공합니다. "프로토콜 문제"및 "참조"섹션 : http://en.wikipedia.org/wiki/Streaming_Media – MicE