다음을 통해 공유


네트워크 원본 기능

네트워크 원본은 스트리밍 미디어 파일에 대한 기본 구현을 제공하고 IMFMediaSource 인터페이스를 노출합니다. 특정 네트워크 원본 구현은 RTSP 또는 HTTP와 같은 원본을 여는 데 사용되는 프로토콜에 따라 달라집니다. 프로토콜별 네트워크 원본은 기본 네트워크 기능을 확장합니다. 지원되는 체계 및 프로토콜에 대한 자세한 내용은 지원되는 프로토콜을 참조하세요.

네트워크 원본:

  • 캐싱, 프록시 검색 및 자동 다시 연결과 같은 기능을 구현합니다.
  • 프로토콜 독립적 호출을 원본 확인자에서 프로토콜별 호출로 변환합니다.
  • 소켓 계층 및 운영 체제와 상호 작용합니다. SDP 설명을 구문 분석하고 구성 데이터로 사용하고 기본 소켓 계층에서 스트림 데이터를 읽습니다. 수신 시 네트워크 원본은 패킷의 재전송 순서를 다시 지정하고 요청해야 합니다.

네트워크 원본 만들기

네트워크에서 원본에 대한 미디어 원본을 만드는 것은 로컬 파일의 미디어 원본과 다르지 않습니다. 애플리케이션은 원본의 URL을 IMFSourceResolver::CreateObjectFromURL 또는 IMFSourceResolver::BeginCreateObjectFromURL과 같은 Source Resolver 메서드에 전달하고 MF_RESOLUTION_MEDIASOURCE 플래그를 지정합니다. 이 플래그를 사용하는 방법에 대한 자세한 내용은 원본 확인자 사용을 참조하세요.

애플리케이션에서 제공하는 체계에 따라 원본 확인자는 IMFSchemeHandler 인터페이스를 노출하는 적절한 스키마 처리기 개체를 로드합니다. 애플리케이션은 IMFSchemeHandler::BeginCreateObject를 호출하여 스키마 처리기를 직접 사용하여 네트워크 원본을 만들 수도 있습니다.

자세한 내용은 체계 처리기 및 Byte-Stream 처리기를 참조하세요.

Media Foundation은 네트워크 원본에 대한 바이트 스트림을 지원하지 않습니다. 바이트 스트림 개체는 다운로드한 콘텐츠 시나리오에서만 지원됩니다. 모든 데이터는 로컬 컴퓨터에 파일로 저장할 수 있도록 가능한 한 빨리 전송됩니다. 웹 서버는 다운로드한 데이터를 제공합니다. 다운로드가 시작된 후에는 클라이언트에서 서버로의 통신이 없습니다. 이 경우 HTTP 다운로드 프로토콜이 사용됩니다.

애플리케이션이 원본 확인자에게 "http:", "mms:" 또는 "rtsp:" 스키마에 대한 바이트 스트림 개체를 만들도록 요청하는 경우 MF_E_UNSUPPORTED_SCHEME 오류와 함께 호출이 실패합니다.

참고

Windows 7에서 네트워크 원본은 Windows Media Station 파일()을 지원합니다. NSC). 이러한 파일은 네트워크를 통해 미디어 콘텐츠의 멀티캐스트 스트리밍에 사용됩니다. 지정된 에 대한 네트워크 원본을 만들려면 NSC 파일, 애플리케이션 원본 확인자를 사용 해야 합니다.

 

애플리케이션이 스키마 처리기를 사용하는 경우 비동기 호출은 dwFlags 매개 변수를 무시하고 완료 시 네트워크 원본에 대한 포인터를 반환합니다.

다음 그림에서는 네트워크 원본을 사용하는 미디어 스트리밍의 데이터 흐름을 보여 줍니다.

네트워크 원본과 미디어 세션 간의 루프가 있는 애플리케이션에서 스트리밍 서버로의 경로를 보여 주는 흐름도

네트워크 원본 구성

이 항목에서는 네트워크 원본에서 지원하는 기능 및 관련 구성 옵션에 대해 설명합니다. 애플리케이션은 네트워크 원본 개체를 만들 때 네트워크 원본을 구성할 수 있습니다. 이러한 옵션은 IPropertyStore 개체에 저장되며, 애플리케이션은 원본 확인자 메서드 또는 IMFSchemeHandler::BeginCreateObjectpProps 매개 변수를 전달해야 합니다.

자동 다시 연결

네트워크 원본의 자동 다시 연결 기능을 사용하면 서버에 대한 TCP 연결이 실패하거나 클라이언트가 패킷을 받지 못할 때 클라이언트가 미디어 서버에 자동으로 다시 연결할 수 있습니다. 연결에 실패하면 네트워크 원본은 이전 연결에서 사용된 것과 동일한 구성을 사용하여 미디어 서버에 다시 연결하려고 시도합니다. 다시 연결 프로세스는 비동기입니다. 네트워크 원본은 다시 연결을 시작할 때 MEReconnectStart 이벤트와 다시 연결이 성공하거나 실패할 때 MEReconnectEnd 이벤트를 발생합니다.

다시 연결 시도 횟수가 MFNETSOURCE_AUTORECONNECTLIMIT 속성에 지정된 최대값을 초과하면 다시 연결 작업이 취소됩니다. 다시 연결 시도 횟수는 MFNETSOURCE_AUTORECONNECTPROGRESS 속성에 저장됩니다.

자동 다시 연결은 미디어 서버에 대한 TCP 연결이 실패하는 경우에도 미디어 콘텐츠를 원활하게 재생할 수 있습니다. 원활한 재생 환경을 위해 클라이언트는 다시 연결될 때까지 재생을 계속하려면 캐시에 1~2분 이상의 충분한 데이터가 있어야 합니다. 네트워크 원본이 버퍼링할 수 있는 최대 데이터 양은 MFNETSOURCE_MAXBUFFERTIMEMS 속성에 설정할 수 있습니다.

빠른 스트리밍

네트워크 원본 클라이언트는 콘텐츠의 비트 전송률에 지정된 것보다 더 빠른 속도로 콘텐츠의 시작 부분에 있는 일부 데이터를 스트리밍하도록 서버에 요청합니다. 서버에서 빠른 시작을 사용하도록 설정한 경우 클라이언트가 실시간보다 충분한 양의 데이터를 버퍼링할 수 있도록 가속화된 비트 전송률 스트림을 보냅니다. 이렇게 하면 클라이언트 컴퓨터 또는 네트워크의 저속 및 사용 가능한 대역폭과 같은 다양한 요인으로 인해 발생할 수 있는 초기 버퍼링 지연을 최소화하여 사용자 환경을 개선합니다.

클라이언트가 요청할 수 있는 빠른 스트리밍 데이터의 양을 지정하려면 MFNETSOURCE_ACCELERATEDSTREAMINGDURATION 속성을 설정합니다. 네트워크 원본이 UDP를 전송 프로토콜로 사용하는 경우 대신 MFNETSOURCE_MAXUDPACCELERATEDSTREAMINGDURATION 속성을 설정하여 빠른 스트리밍 데이터의 최대 양을 지정합니다.

클라이언트의 빠른 스트리밍은 빠른 캐시 기능을 통해 가능합니다. 즉, 주문형 콘텐츠를 실시간보다 빠르게 스트리밍하고 클라이언트의 로컬 캐시에 데이터를 캐싱합니다. 이러한 유형의 빠른 스트리밍을 사용하려면 네트워크 원본에서 Fast Cache를 사용하도록 설정해야 하며 서버에서 지원해야 합니다. 클라이언트가 서버에서 콘텐츠를 요청할 때 네트워크 원본은 먼저 콘텐츠가 클라이언트의 캐시에 이미 있는지 확인합니다. 콘텐츠가 클라이언트의 로컬 캐시에 있고 만료되지 않은 경우 렌더링됩니다. 콘텐츠가 로컬 캐시에 없거나 이미 만료된 경우 콘텐츠가 스트리밍 및 캐시되고 네트워크 원본이 로컬 캐시에서 재생됩니다. 후속 요청에서 재생 목록의 경우 누락된 항목만 캐시된 다음 재생됩니다. 재생 목록 항목이 클라이언트의 로컬 캐시에 이미 있는 경우 해당 위치에서 재생되고 다시 캐시되지 않습니다.

기본적으로 빠른 캐시는 네트워크 원본 클라이언트에서 사용하도록 설정됩니다. 그러나 다음 요인은 기능이 사용되는지 여부도 결정합니다.

  • 클라이언트는 일반 속도보다 빠르게 콘텐츠를 다운로드하고 캐시하는 데 사용할 수 있는 추가 대역폭이 있어야 합니다.
  • 클라이언트에는 충분한 디스크 공간이 있어야 합니다. 요청된 주문형 콘텐츠를 캐싱한 후 클라이언트에 100MB 미만의 사용 가능한 디스크 공간이 있는 경우 캐시되지 않고 동시에 스트리밍되고 렌더링됩니다.

빠른 캐시 기능은 MFNETSOURCE_CACHEENABLED 속성에 의해 제어됩니다.

버퍼 관리

네트워크 원본은 클라이언트의 버퍼 상태를 모니터링하는 효율적인 버퍼 관리를 제공합니다. 기본적으로 네트워크 원본은 시작할 때 5초의 데이터를 버퍼링합니다. 이 값은 MFNETSOURCE_BUFFERINGTIME 속성을 설정하여 구성할 수 있습니다. 이 속성 값에 따라 네트워크 원본은 미디어 콘텐츠의 원활하고 중단 없는 재생을 보장하기에 충분한 버퍼 크기를 계산합니다. 이 속성을 0으로 설정하면 버퍼 관리를 사용할 수 없습니다. 버퍼의 콘텐츠 양이 적으면 네트워크 원본이 버퍼링을 시작하고 MEBufferingStarted 이벤트를 발생하여 버퍼링이 시작되었음을 나타냅니다. 이 이벤트를 수신하면 파이프라인이 렌더링을 중지합니다. 버퍼링이 완료되면 네트워크 원본은 MEBufferingStopped 이벤트를 발생시키고 클라이언트는 렌더링을 다시 시작할 수 있습니다.

클라이언트는 첫 번째 샘플의 버퍼 크기로 표시된 데이터의 양을 누적한 후 콘텐츠 렌더링을 시작합니다. 이 값이 계산된 버퍼 크기보다 낮으면 재생이 즉시 시작됩니다. 이 동작은 빠른 시작 기능과 매우 유사합니다.

MFNETSOURCE_MAXBUFFERTIMEMS 속성은 버퍼링할 수 있는 최대 데이터 양을 저장합니다.

대역폭 선택

클라이언트가 미디어 서버에 연결할 때 연결 설정의 일부로 네트워크 원본은 정적 패킷 쌍 측정을 수행하여 클라이언트와 서버 간의 초기 링크 대역폭을 예측합니다. 이 측정 결과에 따라 클라이언트는 예상 대역폭 내에 맞는 오디오 및 비디오 스트림을 선택할 수 있습니다. 이렇게 하면 스트리밍 미디어 콘텐츠를 원활하게 재생할 수 있습니다.

빠른 시작 단계에서 동적 패킷 쌍 측정이 수행됩니다. 이 프로세스에서 클라이언트는 여러 패킷 또는 샘플일 수 있는 대량의 데이터를 받습니다.

정적 패킷 쌍 프로세스는 고정 크기의 단일 패킷을 전송하므로 높은 대역폭 네트워크에 대한 정확한 결과를 생성하지 못할 수 있으므로 동적 패킷 쌍 측정의 결과는 정적 패킷 쌍 측정에서 반환되는 링크 대역폭 추정치보다 더 정확합니다.

애플리케이션은 MFNETSOURCE_PPBANDWIDTH 속성을 사용하여 예상 대역폭을 가져올 수 있습니다.

네트워크 조건이 동적으로 변경되어 네트워크 원본의 재생에 결함이 발생할 수 있습니다. 네트워크 원본은 수신 속도 및 버퍼 상태에 따라 클라이언트의 초기 스트림 선택을 변경할 수 있습니다. 예를 들어 클라이언트는 네트워크 정체 중에 더 낮은 비트 속도로 전환하고 네트워크 트래픽이 개선되고 클라이언트가 충분한 양의 버퍼링된 콘텐츠를 누적한 경우 더 높은 비트 속도로 다시 전환할 수 있습니다.

Media Foundation의 네트워킹