KR20230124552A - 클라이언트 장치에서의 비디오 스트림의 디코딩 - Google Patents

클라이언트 장치에서의 비디오 스트림의 디코딩 Download PDF

Info

Publication number
KR20230124552A
KR20230124552A KR1020237016225A KR20237016225A KR20230124552A KR 20230124552 A KR20230124552 A KR 20230124552A KR 1020237016225 A KR1020237016225 A KR 1020237016225A KR 20237016225 A KR20237016225 A KR 20237016225A KR 20230124552 A KR20230124552 A KR 20230124552A
Authority
KR
South Korea
Prior art keywords
video
stream
decoded
decoding function
operating system
Prior art date
Application number
KR1020237016225A
Other languages
English (en)
Inventor
데이비드 핸드포드
파르자드 샤르바피안
다니엘 스파라노
Original Assignee
브이-노바 인터내셔널 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 브이-노바 인터내셔널 리미티드 filed Critical 브이-노바 인터내셔널 리미티드
Publication of KR20230124552A publication Critical patent/KR20230124552A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/4402Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
    • H04N21/440227Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display by decomposing into layers, e.g. base layer and one or more enhancement layers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/41Structure of client; Structure of client peripherals
    • H04N21/414Specialised client platforms, e.g. receiver in car or embedded in a mobile appliance
    • H04N21/41407Specialised client platforms, e.g. receiver in car or embedded in a mobile appliance embedded in a portable device, e.g. video client on a mobile phone, PDA, laptop
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/443OS processes, e.g. booting an STB, implementing a Java virtual machine in an STB or power management in an STB
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/81Monomedia components thereof
    • H04N21/8166Monomedia components thereof involving executable data, e.g. software
    • H04N21/8173End-user applications, e.g. Web browser, game
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • H04N19/33Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability in the spatial domain

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

본원에 설명된 특정 예들은 클라이언트 장치에서 비디오 스트림을 디코딩하는 것과 관련된다. 클라이언트 장치 상의 클라이언트 애플리케이션은 클라이언트 장치의 운영 체제에 의해 구현된 디코딩 함수에 대한 추가 호출을 포함하는 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수를 호출하고, 비디오 스트림이 다층 코딩 방식을 사용하여 인코딩되는지 여부에 대한 결정을 포함하도록 수정된다. 그렇다면, 비디오 스트림이 기본 스트림과 향상 스트림을 추출하기 위해 처리되고, 기본 스트림은 운영 체제에 의해 구현된 디코딩 함수에 대한 추가 호출을 사용하여 디코딩되며, 인코딩된 향상 스트림이 디코딩되고, 디코딩된 향상 스트림이 디코딩된 기본 스트림에 적용되어 디코딩된 비디오 스트림 데이터를 생성하며, 디코딩된 비디오 스트림 데이터는 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수에 반환된다.

Description

클라이언트 장치에서의 비디오 스트림의 디코딩
본 발명은 클라이언트 장치에서 비디오 스트림을 디코딩하는 데 사용하기 위한 방법, 장치, 컴퓨터 프로그램 및 컴퓨터 판독 가능 매체에 관한 것이다.
비디오 콘텐트의 인코딩 및 디코딩은 많은 알려진 시스템에서 고려 사항이다. 비디오 콘텐트는 예를 들어 데이터 통신 네트워크를 통한 전송을 위해 인코딩될 수 있다. 이러한 비디오 콘텐트가 디코딩될 때, 비디오의 품질 레벨을 증가시키고 및/또는 가능한 한 원본 비디오에 포함된 많은 정보를 복구하는 것이 바람직할 수 있다. 이러한 원하는 특성을 달성하기 위해 많은 비디오 코딩 형식 및 그 관련 코덱이 개발되었지만, 종종 운영 체제 및/또는 하드웨어 업그레이드 레벨에서 중요한 소프트웨어 업데이트가 필요하다. 또한, 디코딩된 비디오 콘텐트의 품질을 향상시키기 위해, 일반적으로 인코딩 및 디코딩 절차의 복잡성을 증가시켜야 하며, 이는 전력 사용량을 증가시키고 비디오 콘텐트가 전달될 수 있는 레이턴시를 증가시킬 수 있다.
본 개시의 제1 양태에 따르면, 클라이언트 장치 상에서 비디오 스트림을 디코딩하는 방법이 제공된다. 상기 방법은, 클라이언트 장치 상의 클라이언트 애플리케이션으로부터, 클라이언트 장치에서 이용 가능한 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수를 호출하는 단계로서, 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수는 클라이언트 장치의 운영 체제에 의해 구현된 디코딩 함수에 대한 추가 호출을 포함하는, 상기 호출하는 단계; 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수를 수정하여 비디오 스트림이 다층 디코딩 방식을 사용하여 인코딩되는지 여부에 대한 결정을 포함하는 단계; 및 비디오 스트림이 다층 코딩 방식을 사용하여 디코딩된다고 결정하는 것에 응답하여, 비디오 스트림을 처리하여 다층 코딩 방식의 기본 스트림 및 향상 스트림을 추출하는 단계; 클라이언트 장치의 운영 체제에 의해 구현된 디코딩 함수에 대한 추가 호출을 사용하여 기본 스트림을 디코딩하여 디코딩된 기본 스트림을 생성하는 단계; 인코딩된 향상 스트림을 디코딩하여 디코딩된 향상 스트림을 생성하는 단계; 디코딩된 향상 스트림을 디코딩된 기본 스트림에 적용하여 디코딩된 비디오 스트림 데이터를 생성하는 단계; 및 디코딩된 비디오 스트림 데이터를 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수에 반환하는 단계를 포함한다.
클라이언트 장치는 Apple® 장치일 수 있다. 운영 체제는 iOS, macOS 또는 tvOS와 같이 Apple®에 의해 개발된 운영 체제일 수 있다. 미디어 플레이어 라이브러리는 libvlc일 수 있다. 다층 코딩 방식은 MPEG-5 Part 2 LCEVC(Low Complexity Enhancement Video Encoding)일 수 있다.
인코딩된 향상 스트림의 디코딩은 다층 디코딩 함수를 사용하여 수행될 수 있다. 다층 디코딩 함수는 기본 스트림과 관련하여 운영 체제 비디오 디코딩 함수에 대한 호출을 포함할 수 있고, 향상 스트림의 디코딩된 버전을 운영 체제 비디오 디코딩 함수에 대한 호출의 출력에 적용하여 디코딩된 비디오 스트림 데이터를 생성하도록 구성될 수 있다.
이 방법은 LCEVC와 같은 다층 코딩 방식을 지원하는 수정된 Video Toolbox 모듈 내에서 수행될 수 있다. 수정된 Video Toolbox 모듈은 VLCKit 래퍼를 통해 액세스될 수 있다. 수정된 Video Toolbox 모듈은 libvlc에 하나 이상의 패치를 적용하여, 예를 들어 libvlc에 하나 이상의 LCEVC별 패치를 적용하여 획득될 수 있다. Video Toolbox 모듈에 대한 수정에는 LCEVC 방식을 사용하여 인코딩된 비디오 스트림을 디코딩하는 기능을 제공하는 Apple®의 VTDecompressionSession 객체의 일반화를 생성하는 것이 포함될 수 있다.
방법은 VLCKit의 인스턴스를 생성하는 것을 더 포함할 수 있다. 인코딩된 비디오 스트림은 CMSampleBuffers로 역다중화될 수 있다. 방법은 비디오 스트림이 LCEVC를 사용하여 인코딩되는지 여부를 결정하는 단계를 더 포함할 수 있다. 비디오 스트림이 LCEVC를 사용하여 인코딩된 것으로 결정되는 경우, 방법은 LCEVC 페이로드가 비디오 스트림으로부터 추출되는 단계를 포함할 수 있다. LCEVC 페이로드는 VTDecompressionSession 객체를 사용하여 디코딩될 수 있다. 방법은 디코딩된 LCEVC 페이로드를 프리젠테이션 순서로 재정렬하는 단계를 더 포함할 수 있다. 비디오 스트림의 향상 스트림은 디코딩되어 디코딩된 향상 스트림에, 예를 들어 LCEVC 페이로드에 적용되어 디코딩된 비디오 스트림을 생성할 수 있다. 비디오 스트림이 LCEVC를 사용하여 인코딩되지 않은 것으로 결정되는 경우, 방법은 VTDecompressionSession 객체를 사용하여 비디오 스트림을 디코딩하는 단계를 포함할 수 있다. 어느 경우든, 방법은 디코딩된 비디오 스트림을 CVPixelBuffers로 반환하는 단계를 더 포함할 수 있다. CVPixelBuffers가 올바른 순서인지 여부가 결정될 수 있다. CVPixelBuffers가 올바른 순서가 아니라고 결정되는 경우, CVPixelBuffers는 프리젠테이션 순서로 재정렬될 수 있다. 방법은 프리젠테이션을 위해 디코딩된 비디오 스트림을 대기열에서 해제하는 단계를 더 포함할 수 있다.
본 개시의 제2 양태에 따르면, 클라이언트 장치가 제공된다. 클라이언트 장치는 운영 체제 비디오 디코딩 함수를 포함하는 운영 체제; 비디오를 디스플레이하기 위한 클라이언트 애플리케이션; 및 클라이언트 애플리케이션에 의해 사용하기 위해 미디어 플레이어 비디오 디코딩 함수를 포함하는 미디어 플레이어 라이브러리를 포함하며, 미디어 플레이어 비디오 디코딩 함수는 운영 체제 비디오 디코딩 함수에 대한 호출을 포함한다. 미디어 플레이어 비디오 디코딩 함수는 다층 코딩 방식을 사용하여 인코딩된 비디오 스트림의 수신 시 다층 디코딩 함수를 선택적으로 구현하는 운영 체제 비디오 디코딩 함수에 대한 래퍼(wrapper)를 포함하도록 수정되고, 비디오 스트림은 기본 스트림 및 향상 스트림을 포함하고, 다층 디코딩 함수는 기본 스트림과 관련하여 운영 체제 비디오 디코딩 함수에 대한 호출을 포함하며, 다층 디코딩 함수는 운영 체제 비디오 디코딩 함수에 대한 호출의 출력에 향상 스트림의 디코딩된 버전을 적용하여 디코딩된 비디오 스트림 데이터를 생성하도록 구성되고, 다층 디코딩 함수는 디코딩된 비디오 스트림 데이터를 클라이언트 애플리케이션에 의해 사용하기 위한 미디어 플레이어 비디오 디코딩 함수에 반환하도록 더 구성된다.
클라이언트 장치는 Apple® 장치일 수 있다. 운영 체제는 iOS, macOS 또는 tvOS와 같이 Apple®에 의해 개발된 운영 체제일 수 있다. 미디어 플레이어 라이브러리는 libvlc일 수 있다. 다층 코딩 방식은 LCEVC일 수 있다.
미디어 플레이어 비디오 디코딩 함수는 LCEVC와 같은 다층 코딩 방식을 지원하는 수정된 Video Toolbox 모듈을 포함할 수 있다. 수정된 Video Toolbox 모듈은 VLCKit 래퍼를 통해 액세스될 수 있다. 수정된 Video Toolbox 모듈은 libvlc에 하나 이상의 패치를 적용하여, 예를 들어 libvlc에 하나 이상의 LCEVC별 패치를 적용하여 획득될 수 있다. Video Toolbox 모듈에 대한 수정에는 LCEVC 방식을 사용하여 인코딩된 비디오 스트림을 디코딩하는 기능을 제공하는 Apple®의 VTDecompressionSession 객체의 일반화를 생성하는 것이 포함될 수 있다.
클라이언트 장치는 인코딩된 비디오 스트림을 CMSampleBuffers로 역다중화하는 역다중화기를 더 포함할 수 있다. 수정된 Video Toolbox 모듈은 비디오 스트림이 LCEVC를 사용하여 인코딩되는지 여부를 결정할 수 있다. 비디오 스트림이 LCEVC를 사용하여 인코딩된 것으로 결정되는 경우, LCEVC 페이로드는 비디오 스트림으로부터 추출될 수 있다. LCEVC 페이로드는 VTDecompressionSession 객체를 사용하여 디코딩될 수 있다. 이 경우에, 수정된 Video Toolbox 모듈은 디코딩된 LCEVC 페이로드를 프리젠테이션 순서로 재정렬할 수 있다. 비디오 스트림의 향상 스트림은 디코딩되어 디코딩된 향상 스트림에, 예를 들어 LCEVC 페이로드에 적용되어 디코딩된 비디오 스트림을 생성할 수 있다. 비디오 스트림이 LCEVC를 사용하여 인코딩되지 않은 것으로 결정되는 경우, 비디오 스트림은 VTDecompressionSession 객체를 사용하여 디코딩될 수 있다. 어느 경우든, 디코딩된 비디오 스트림은 CVPixelBuffers로 반환될 수 있다. CVPixelBuffers가 올바른 순서인지 여부가 결정될 수 있다. CVPixelBuffers가 올바른 순서가 아니라고 결정되는 경우, CVPixelBuffers는 프리젠테이션 순서로 재정렬될 수 있다. 디코딩된 비디오 스트림은 프리젠테이션을 위해 대기열에서 해제될 수 있다.
본 개시의 제3 양태에 따르면, 제1 양태의 방법을 수행하기 위해 적어도 하나의 프로세서에 의해 실행 가능한 명령어들을 저장하는 컴퓨터 판독 가능 저장 매체가 제공된다.
추가 특징은 첨부 도면을 참조하여 이루어진 예로서만 주어진 다음 설명으로부터 명백해질 것이다.
도 1은 클라이언트 장치에서 비디오 스트림을 디코딩하기 위한 예시적인 시스템의 개략도이다.
도 2는 예들에 따라 클라이언트 장치에서 비디오 스트림을 디코딩하는 방법의 흐름도이다.
도 3은 추가 예들에 따라 클라이언트 장치에서 비디오 스트림을 디코딩하는 방법의 흐름도이다.
도 4는 비디오를 디코딩하기 위한 예시적인 컴퓨터 시스템 레벨 계층 구조이다.
압축이라고도 하는 디지털 신호의 인코딩은 원본 신호(예를 들어, 원본 비디오)를 나타내는 데 사용되는 정보보다 적은 비트의 정보를 사용하여 디지털 신호의 표현을 생성하는 프로세스이다. 인코딩 프로세스는 원본 신호와 생성된 표현 사이에 정보가 손실될 때 손실이 있는 것으로 설명될 수 있다. 대안으로, 인코딩 프로세스는 원본 신호와 생성된 표현 사이에 손실된 정보가 없을 때 무손실로 설명될 수 있다. 인코딩되지 않은 디지털 신호(예를 들어, 비디오 콘텐트를 나타냄)는 높은 데이터 전송률을 필요로 하므로 종종 인코딩된다.
디지털 비디오 콘텐트의 인코딩 및 디코딩에서는, 일반적으로 향상된 비디오 품질과 인코딩 및 디코딩 복잡성 간에 트레이드-오프(trade-off)가 있다. 그러나, MPEG-5 Part 2 LCEVC(Low Complexity Enhancement Video Encoding)의 등장으로, 자세한 내용은 제WO/2020/188273A1호 및 2020년 1월 13일 월요일에서 2020년 1월 17일 금요일까지 브뤼셀에서 개최된 MPEG 129 회의에서 발표된 ISO/IEC DIS 23094-2 Low Complexity Enhancement Video Coding의 초안 텍스트를 포함한 관련 표준 사양 문서에서 확인할 수 있으며, 이는 본원에서 참조로서 통합되며, 이제 비디오 품질을 개선하고 코덱의 복잡성을 줄이는 것이 가능하다. 이는 기본 코덱(예를 들어, AVC(Advanced Video Coding), HEVC(High Efficiency Video Coding) 또는 기타 현재 또는 미래 코덱)을 사용하여 인코딩된 기본 스트림을 적어도 하나의 향상 레벨의 코딩된 데이터를 포함하는 향상 스트림과 결합하여 달성된다.
기본 스트림을 향상 스트림과 결합하면 기본 스트림이 더 낮은 해상도로 전송되도록 하여, 데이터 통신 네트워크의 대역폭 요구 사항을 줄일 수 있다. 대안으로, 비디오 콘텐트는 동일한 대역폭에 대해 더 높은 해상도로 전송되어 기본 스트림과 향상 스트림을 결합하지 않고 가능한 것보다 더 높은 품질의 비디오를 생성할 수 있다.
이는 비디오 품질 및 감소된 복잡성과 관련하여 이러한 이점을 가능하게 하지만, 클라이언트 장치에서 LCEVC를 구현하기 위한, 특히 이러한 장치의 미디어 플레이어 기능 및 운영 체제 비디오 디코딩 함수와 코딩 체계를 통합하기 위한 접근 방식이 여전히 필요하다.
도 1은 예시적인 클라이언트 장치(100)의 개략도이다. 클라이언트 장치는 모든 세대의 iPhone®, iPad® 또는 랩탑이나 데스크탑 컴퓨터와 같은 다른 컴퓨팅 장치와 같은 모바일 장치일 수 있다. 클라이언트 장치는 일반적으로 하나 이상의 프로세서, 메모리, 사용자 인터페이스(UI) 및/또는 적어도 하나의 그래픽 처리 장치(GPU)와 같은 데이터 처리를 용이하게 하는 적절한 하드웨어 컴포넌트들을 포함한다.
클라이언트 장치(100)는 예를 들어, 클라이언트 장치(100)의 하드웨어 및 소프트웨어 리소스의 관리를 포함하는, 예를 들어 클라이언트 장치(100)의 기본 기능을 지원하는 클라이언트 장치(100)의 시스템 소프트웨어인 운영 체제(102)를 포함한다. 운영 체제(102)는 인코딩된 비디오 콘텐트를 디코딩하는데 사용하기 위한 운영 체제 비디오 디코딩 함수(104)을 포함한다. 운영 체제 비디오 디코딩 함수(104)는 운영 체제에 의해 구현되는 디코딩 함수로 지칭될 수 있다. 운영 체제(102)가 자체 운영 체제 비디오 디코딩 함수(104)을 포함하기 때문에, 운영 체제(102)는 예를 들어 특정 코덱을 사용하여 인코딩된 비디오 스트림을 디코딩하기 위한 네이티브 지원을 갖는다. 클라이언트 장치가 Apple® 장치인 경우, 운영 체제는 미국, 쿠퍼티노(Cupertino) 소재의 Apple Inc.에서 개발한 운영 체제의 해당 버전일 수 있다. 예를 들어, 클라이언트 장치가 iPhone®인 경우, 운영 체제는 모든 버전의 iOS일 수 있다. 다른 예에서, 클라이언트 장치는 모든 Apple® Mac® 장치일 수 있으며, 이 경우 운영 체제는 모든 버전의 macOS일 수 있다. 추가 예에서, 클라이언트 장치는 Apple® TV 장치일 수 있으며, 이 경우 운영 체제는 모든 버전의 tvOS일 수 있다.
클라이언트 장치(100)는 비디오를 디스플레이하기 위한 클라이언트 애플리케이션(106)을 더 포함한다. 클라이언트 애플리케이션(106)은 클라이언트 장치(100)에 결합되거나 그 내에 통합된 디스플레이 상에 비디오를 렌더링하거나 아니면 디스플레이하는 데 사용할 수 있는 클라이언트 장치(100) 상의 임의의 소프트웨어 애플리케이션일 수 있다. 클라이언트 애플리케이션이 애플리케이션 자체에 임베딩되거나 아니면 포함된 비디오 콘텐트를 포함하는 것이 일반적이다. 일 예는 클라이언트 애플리케이션(106)이 어떻게 사용되는지 사용자에게 설명하는 클라이언트 애플리케이션(106) 내의 비디오 튜토리얼일 수 있다. 또 다른 예는 사용자들이 소셜 미디어 애플리케이션의 다른 사용자들에 의해 업로드된 비디오 콘텐트를 볼 수 있도록 하는 소셜 미디어 애플리케이션이다.
클라이언트 장치(100)는 또한 미디어 플레이어 라이브러리(108)를 포함하며, 이 예에서는 클라이언트 애플리케이션에서 비디오 콘텐트를 디스플레이하기 위해 리소스 중 적어도 일부를 제공한다. 미디어 플레이어 라이브러리(108)는 비디오와 같은 미디어를 재생하기 위해 운영 체제(102)의 미디어 플레이어와 연관된다.
미디어 플레이어 라이브러리(108)는 (이 경우에, 운영 체제 비디오 디코딩 함수(102)와 함께) 인코딩된 비디오 콘텐트를 디코딩할 때 클라이언트 애플리케이션(106)에 의해 사용하기 위해, 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수로서 지칭될 수 있는 미디어 플레이어 비디오 디코딩 함수(110)를 포함한다. 미디어 플레이어 비디오 디코딩 함수(110)는 운영 체제 비디오 디코딩 함수(102)에 대한 호출을 포함한다. 이는 미디어 플레이어 라이브러리(108)가 운영 체제(102)의 디코딩 기능에 액세스할 수 있도록 한다.
미디어 플레이어 비디오 디코딩 함수(110)는 다층 코딩 방식을 사용하여 인코딩된 비디오 스트림의 수신 시 다층 디코딩 함수를 선택적으로 구현하는 운영 체제 비디오 디코딩 함수(104)에 대한 래퍼(wrapper)를 포함하도록 수정된다. 이러한 방식으로, 다층 디코딩 함수는 특정 비디오(예컨대 다층 코딩 방식을 사용하여 인코딩된 비디오)에 활용될 수 있다. 상이한 디코딩 함수가 다른 비디오들에 사용될 수 있다. 예를 들어, 수정 없이 미디어 플레이어 비디오 디코딩 함수(110)에 대응하는 레거시 디코딩 함수는 다층 코딩 방식과 다른 방식을 사용하여 인코딩된 비디오에 사용될 수 있다.
예들에서, 다층 코딩 방식을 사용하여 인코딩된 비디오 스트림은 기본 스트림 및 향상 스트림을 포함한다. 기본 스트림은 예를 들어, 기본 압축기라고도 하는 기본 인코더를 사용하여 인코딩되고, 압축 해제기라고도 하는 디코더에 의해 디코딩 가능한 다운 샘플링된 소스 신호이다. 기본 인코더는 AVC(Advanced Video Coding), HEVC(High Efficiency Video Coding), VP9, MPEG-5 EVC(Essential Video Coding), VVC(Versatile Video Coding) 및 AV1(AOMedia Video 1) 인코더와 같은, 임의의 기본 인코더일 수 있다. 기존 기본 인코더(및 디코더)를 인코딩(및 디코딩) 절차의 일부로 사용하면 다층 비디오 콘텐트를 디코딩할 수 없는 시스템은 여전히 기존 기본 코덱을 사용하여 기본 스트림을 디코딩할 수 있음을 보장한다. 이는 다층 코딩 방식을 사용하여 비디오 스트림을 디코딩하기 위해 하드웨어에 대한 업데이트가 필요하지 않으며, 클라이언트 장치(100)와 같은 시스템의 하드웨어가 향후 기본 코덱과 호환되도록 업그레이드되는 경우 추가 하드웨어 업그레이드 없이 향후 기본 코덱도 사용될 수 있음을 의미한다.
운영 체제 비디오 디코딩 함수(104)는 기본 스트림을 디코딩하도록 배열된다. 예를 들어, 운영 체제 비디오 디코딩 함수(104)는 AVC(Advanced Video Coding), HEVC(High Efficiency Video Coding), VP9, MPEG-5 EVC(Essential Video Coding), VVC(Versatile Video Coding), 및 AV1(AOMedia Video 1) 디코더 중 적어도 하나를 포함할 수 있다. 운영 체제 비디오 디코딩 함수(104)는 하드웨어 디코더를 포함할 수 있어서, 운영 체제 비디오 디코딩 함수(104)는 기본 스트림을 디코딩하기 위해 하드웨어 가속을 이용할 수 있다. 이는 디코딩을 하드웨어로 오프로드함으로써 클라이언트 장치(100)의 중앙 처리 장치(CPU)에 의해 수행되는 연산의 수를 감소시킬 수 있다. 하드웨어 가속은 예를 들어 모션 보상 및 역 이산 코사인 변환 계산과 같은 계산 집약적 프로세스를 포함하는 디코딩 프로세스를 구현하는 보다 효율적인 방법을 제공할 수 있다.
향상 스트림은 기본 스트림을 수정하거나 아니면 향상시키는 인코딩된 잔차 세트를 포함한다. 계층 구조에는 여러 레벨의 향상 데이터가 있을 수 있다. 향상 스트림은 압축되지 않은 전체 해상도 비디오로부터 향상 스트림을 생성하도록 구성된 전용 인코더를 사용하여 인코딩될 수 있다.
LCEVC 향상 스트림은 다층 코딩 방식을 사용하여 인코딩된 비디오 스트림의 일 예이다. 이 경우, 비디오 스트림은 LCEVC 인코더로 인코딩되며; 특히, 기본 스트림은 기본 인코더를 사용하여 인코딩되고 LCEVC 인코더는 기본 디코더의 출력을 사용하여 향상 스트림을 생성한다. 예를 들어, 인코딩된 기본 스트림은 기본 디코더를 사용하여 디코딩될 수 있고, 디코딩된 기본 스트림으로부터의 프레임은 하나 이상의 향상 스트림 계층으로서 인코딩하기 위한 하나 이상의 잔차 데이터 계층을 생성하기 위해 원본 입력 프레임(사전 기본 인코딩)과 함께 LCEVC 인코더에 의해 액세스될 수 있다. 본원의 예들은 다른 다층 코딩 방식을 사용하여 인코딩된 비디오 스트림에도 적용될 수 있다.
미디어 플레이어 비디오 디코딩 함수(110)는 운영 체제 비디오 디코딩 함수(104)에 대한 래퍼를 포함하도록 수정된다. 이는 미디어 플레이어 비디오 디코딩 함수(110)가 운영 체제 비디오 디코딩 함수(104)을 호출하고, 운영 체제 비디오 디코딩 함수(104)의 리소스를 활용할 수 있도록 한다. 운영 체제 비디오 디코딩 함수(104)의 리소스는, 예를 들어, 수신된 인코딩된 비디오 스트림이 다층 디코딩 함수를 사용하여 인코딩되는 것으로 결정될 때, 선택적으로는 미디어 플레이어 비디오 함수(110)에 의해 다층 디코딩 함수를 사용하여 다층 코딩 방식에 의해 인코딩된 비디오 스트림을 디코딩하는 데 사용될 수 있다.
다층 디코딩 함수는 기본 스트림과 관련하여 운영 체제 비디오 디코딩 함수(104)에 대한 호출을 포함한다. 상술된 바와 같이, 운영 체제 비디오 디코딩 함수(104)는 인코딩된 기본 스트림을 디코딩하도록 동작 가능하다. 따라서 다층 디코딩 함수로부터 운영 체제 비디오 디코딩 함수(104)로의 호출은 다층 코딩 방식에 의해 인코딩된 비디오 스트림의 기본 스트림이 디코딩되도록 한다. 다시 말해, 운영 체제(102)의 네이티브 디코딩 기능을 활용하여 기본 스트림을 디코딩할 수 있다.
예들에서, 다층 디코딩 함수는 또한 다층 코딩 방식에 의해 인코딩된 비디오 스트림의 향상 스트림을 디코딩하여 향상 스트림의 디코딩된 버전을 생성하도록 동작 가능하다. 이러한 방식으로, 선택적으로 다층 디코딩 함수를 구현하기 위해 운영 체제 비디오 디코딩 함수(104)에 대한 래퍼를 포함하도록 미디어 플레이어 비디오 디코딩 함수(110)를 수정하면 향상 스트림이 디코딩되도록 한다. 이는 예를 들어 다층 코딩 방식과 같은 더 진보된 코덱을 사용하여 인코딩된 비디오 스트림이 디코딩되도록 함으로써 미디어 플레이어 비디오 디코딩 함수(110)의 기능을 향상시킨다. 예들에서, 미디어 플레이어 비디오 디코딩 함수(110)의 기능은 간단하고 유연한 방식으로 미디어 플레이어 라이브러리(108) 및 운영 체제(102)의 기존 기능을 활용함으로써 클라이언트 장치(100)의 기본 하드웨어를 변경하지 않고 이러한 방식으로 향상될 수 있다. 예를 들어, 운영 체제 비디오 디코딩 함수(104)에 대한 래퍼는 간단하게 변경될 수 있어서, 예를 들어 다층 디코딩 함수는 미디어 플레이어 라이브러리(108) 및/또는 운영 체제(102)의 기본 기능을 변경하지 않고, 상이한 다층 디코딩 방식을 사용하여 인코딩된 비디오를 디코딩하도록 동작 가능하다.
그런 다음 이러한 예들에서, 다층 디코딩 함수는 운영 체제 비디오 디코딩 함수(104)에 대한 호출의 출력에 향상 스트림의 디코딩된 버전을 적용하여 디코딩된 비디오 스트림 데이터를 생성한다. 이는 디코딩된 기본 스트림과 디코딩된 버전의 향상 스트림을 일반적으로 디코딩된 기본 스트림보다 더 높은 품질의 단일 디코딩된 비디오 스트림으로 결합한다. 예를 들어, 향상 스트림의 디코딩된 버전은 출력 디코딩된 비디오 스트림을 생성하기 위해 디코딩된 기본 스트림에 추가되는 하나 이상의 잔차 데이터 계층을 포함할 수 있다.
다층 디코딩 함수는 디코딩된 비디오 스트림 데이터를 클라이언트 애플리케이션(106)에 의한 사용을 위해 미디어 플레이어 비디오 디코딩 함수(110)로 반환하도록 더 구성된다. 예를 들어, 디코딩된 비디오 스트림 데이터는 예를 들어, 클라이언트 장치(100)에 연결된 디스플레이를 사용하여 클라이언트 애플리케이션(106) 내에 디스플레이될 수 있다.
일부 예들에서, 다층 디코딩 함수는 디코딩된 기본 스트림의 프레임을 재정렬한다. 이는 디코딩된 기본 스트림의 프레임 순서가 관련 압축되지 않은 전체 해상도 비디오의 순서와 다른 경우일 수 있다. 이는 기본 스트림을 디코딩하면 디코딩된 기본 스트림의 프레임이 재정렬될 때 발생할 수 있다. 향상 스트림이 없는 예들에서, 기본 스트림은 수신된 비디오 스트림 데이터 내의 유일한 비디오 스트림일 수 있으므로, 프레임의 재정렬은 비디오 콘텐트가 디스플레이되기 전 최종 단계일 수 있다. 그러나, 본 예에서, 디코딩된 기본 스트림은 디코딩된 향상 스트림과 결합된다. 결과적으로, 향상 스트림의 관련된 디코딩된 버전이 디코딩된 기본 스트림에 적용되어 최종 디코딩된 비디오 스트림 데이터를 생성한 다음 적절한 순서로 디스플레이되도록 보장하기 위해 기본 스트림이 디코딩된 후 디코딩된 기본 스트림의 프레임을 재정렬하는 것이 필요할 수 있다.
일 예에서, 운영 체제 비디오 디코딩 함수(104)의 적어도 하나의 내부 방법은 클라이언트 애플리케이션(106) 및 미디어 플레이어 라이브러리(108) 중 적어도 하나에 이용 가능하지 않으며, 따라서 제한된 함수로 간주될 수 있다. 예를 들어, 운영 체제 비디오 디코딩 함수(104)의 적어도 하나의 기본 루틴에 대한 액세스는 운영 체제(102)의 개발자에 의해 제한될 수 있다. 그러나, 클라이언트 애플리케이션(106) 및/또는 미디어 플레이어 라이브러리(108)는 기본 루틴에 대한 액세스와 상관없이 운영 체제 비디오 디코딩 함수(104)을 호출할 수 있다. 즉, 클라이언트 애플리케이션(106) 및/또는 미디어 플레이어 라이브러리(108)는 내부 방법 자체에 의해 제공된 기능에 별도로 액세스할 수 없이 운영 체제 비디오 디코딩 함수(104)(이는 운영 체제 비디오 디코딩 함수(104)의 내부 방법을 호출하는 것을 포함할 수 있음)에 의해 제공되는 기능에 액세스할 수 있다.
다층 코딩 방식을 사용하여 인코딩된 비디오 스트림이 도 1에 도시된 클라이언트 장치(100)와 같은 클라이언트 장치 내에서 디코딩되는 프로세스는 이제 방법(200)과 관련하여 더 자세히 설명될 것이다.
도 2의 블록(202)에서, 클라이언트 장치에서 사용 가능한 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수는 클라이언트 장치의 클라이언트 애플리케이션으로부터 호출된다. 상술된 바와 같이, 클라이언트 애플리케이션은 클라이언트 장치의 사용자가 볼 수 있는 비디오 콘텐트를 포함할 수 있다. 클라이언트 애플리케이션에서 비디오 콘텐트를 디스플레이하기 위해, 클라이언트 애플리케이션은 미디어 플레이어 라이브러리에 대한 호출을 포함한다. 미디어 플레이어 라이브러리는 클라이언트 애플리케이션 내에서 비디오 콘텐트를 디스플레이하는 데 필요한 리소스 중 적어도 일부를 포함한다.
미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수는 클라이언트 장치의 운영 체제에 의해 구현된 디코딩 함수에 대한 추가 호출을 포함한다. 운영 체제는 운영 체제에 의해 구현되는 디코딩 함수를 포함하며, 이는 예를 들어 비디오 스트림의 인코딩된 기본 스트림을 디코딩하기 위한 리소스를 포함한다.
블록(204)에서, 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수는 비디오 스트림이 다층 코딩 방식을 사용하여 인코딩되었는지 여부에 대한 결정을 포함하도록 수정된다. 상술된 바와 같이, 다층 코딩 방식은 LCEVC 방식일 수 있다. 결정은 비디오 스트림의 적어도 하나의 속성을 검출하는 것을 수반할 수 있다. 예를 들어, 비디오 스트림은 비디오 스트림이 다층 코딩 방식을 사용하여 인코딩됨을 나타내는 메타데이터를 포함할 수 있다. 결정은 대안적으로 또는 부가적으로 비디오 스트림이 향상 스트림을 포함하는지 여부를 검출하는 것을 수반할 수 있다.
비디오 스트림이 다층 코딩 방식을 사용하여 인코딩된 것으로 결정되는 경우, 방법(200)은 비디오 스트림이 다층 코딩 방식의 기본 스트림 및 향상 스트림을 추출하기 위해 처리되는 블록(206)으로 진행한다. 이는 전용 신호 추출기 또는 클라이언트 장치의 또 다른 논리 컴포넌트의 일부를 형성하는 신호 추출기와 같은 적절한 신호 추출기를 사용하여 수행될 수 있다.
블록(208)에서, 기본 스트림은 운영 체제에 의해 구현된 디코딩 함수에 대한 추가 호출을 사용하여 디코딩된다. 다시 말해, 운영 체제의 네이티브 리소스는 기본 스트림을 디코딩하는 데 사용될 수 있다.
블록(210)에서, 향상 스트림이 디코딩된다. 향상 스트림은 블록(204)에서 수정된 바와 같이 미디어 플레이어에 의해 구현된 디코딩 함수에 의해 디코딩될 수 있다. 그런 다음 디코딩된 향상 스트림은 디코딩된 기본 스트림에 적용되어 디코딩된 비디오 스트림 데이터를 생성한다. 예를 들어, 향상 스트림은 다층 비디오 스트림을 디코딩하기 위한 적절한 디코딩 함수를 포함하는 다층 디코더 라이브러리에 대한 호출을 사용하여 디코딩되고 디코딩된 기본 스트림에 적용될 수 있다. 블록(204)에서 미디어 플레이어에 의해 구현된 디코딩 함수의 수정은 예를 들어 다층 디코더 라이브러리에 대한 액세스를 제공하기 위해 미디어 플레이어에 의해 구현된 디코딩 함수를 수정하는 것을 포함한다.
블록(212)에서, 디코딩된 비디오 스트림 데이터는 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수로 반환된다. 그런 다음 클라이언트 애플리케이션은 클라이언트 애플리케이션 내에서 디코딩된 비디오 스트림을 수신하고 디스플레이할 수 있다.
그러나, 비디오 스트림이 다층 코딩 방식을 사용하여 인코딩되지 않는 경우, 방법(200)은 블록(214)으로 진행한다. 방법(200)의 블록(214)에서, 비디오 스트림은 운영 체제에 의해 구현된 디코딩 함수에 대한 추가 호출을 사용하여 디코딩된다. 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수의 수정은 기본 스트림을 디코딩하는 운영 체제의 디코딩 함수의 기능에 영향을 미치지 않는다. 결과적으로, 인코딩된 비디오 스트림이 LCEVC와 같은 다층 코딩 방식을 사용하여 인코딩되지 않은 경우, 운영 체제에 의해 구현된 디코딩 함수는 마치 미디어 플레이어에 의해 구현된 디코딩 함수에 대한 수정이 이루어지지 않은 것처럼 인코딩된 비디오 스트림을 디코딩할 수 있다. 그런 다음 인코딩된 비디오 스트림은 미디어 플레이어에 의해 구현된 디코딩 함수로 전달되고 디코딩되어 디코딩된 비디오 스트림을 얻을 수 있다. 디코딩된 비디오 스트림은 결과적으로 클라이언트 애플리케이션으로 전달되어 디스플레이될 수 있다. 따라서, 방법(200)은 인코딩된 비디오 스트림이 기본 코덱만을 사용하여 인코딩되든 다층 코딩 방식을 사용하여 인코딩되든 간에 디코딩되도록 한다. 방법(200)은 예를 들어 운영 체제의 하드웨어를 변경하지 않고, 운영 체제 내의 기존 기능을 활용하는 인코딩된 비디오를 디코딩하는 효율적인 프로세스를 제공한다.
디코딩된 비디오 스트림 데이터가 미디어 플레이어 라이브러리에 의해 구현된 디코딩 한수로 반환된 후(예를 들어, 도 2의 블록(212)에서, 또는 도 2의 블록(214)이 수행된 후), 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수는 디코딩된 비디오 스트림 데이터의 프레임을 재정렬할 수 있다. 이는 기본 스트림을 디코딩하거나 디코딩된 향상 스트림을 디코딩된 기본 스트림에 적용하여 디코딩된 비디오 스트림 데이터를 생성하는 경우, 디코딩된 비디오 스트림의 프레임 순서가 관련된 비압축 전체 해상도 비디오의 프레임 순서와 다르게 할 수 있다. 디코딩된 비디오 스트림 데이터의 프레임을 재정렬하면 재생 시 비디오 스트림의 디스플레이된 프레임이 올바른 순서로 디스플레이된다. 일부 경우에, 도 2의 블록(208)에서 기본 스트림이 디코딩된 후에 유사한 재정렬이 대안적으로 수행될 수 있다.
일 예에서, 도 2의 방법(200)의 블록(204)에서 디코딩 함수를 수정하는 것은 패치를 미디어 플레이어 라이브러리에 적용하는 것을 포함한다. 이 패치는 예를 들어 미디어 플레이어 라이브러리의 기능을 향상시켜 다층 코딩 방식을 사용하여, 예를 들어 운영 체제에 의해 구현된 디코딩 함수와 같은 운영 체제 리소스를 사용하여 인코딩된 비디오 스트림의 디코딩을 지원할 수 있도록 한다. 패치를 미디어 플레이어 라이브러리에 적용하는 것은 미디어 플레이어 라이브러리에 의해 구현되는 디코딩 함수를 위한 컴퓨터 프로그램 코드를 포함하는 파일을 수정하는 것과 클라이언트 장치의 운영 체제에 의해 구현되는 디코딩 함수를 위한 추가 파일을 추가하는 것을 포함할 수 있다.
일부 경우에, 미디어 플레이어 라이브러리에 의해 구현되는 디코딩 함수를 수정하는 것은 다층 디코딩 함수를 선택적으로 구현하기 위해(예를 들어, 도 2의 블록들(204 내지 212)을 수행하기 위해) 운영 체제(예를 들어, 도 1과 관련하여 설명된 바와 같이)에 의해 구현된 디코딩 함수에 래퍼를 적용하는 것을 포함한다. 래퍼는 예를 들어 운영 체제에 의해 구현된 디코딩 함수를 사용하여 다층 디코딩 함수를 수행할 수 있도록 한다. 예를 들어, 래퍼는 기본 스트림(예를 들어, 운영 체제에 의해 구현된 디코딩 함수를 사용) 및 향상 스트림(예를 들어, 다층 디코더 라이브러리에 대한 호출 사용)을 디코딩하고, 디코딩된 기본 스트림과 디코딩된 향상 스트림을 결합하여 디코딩된 비디오 스트림 데이터(이는 다층 디코더 라이브러리에 대한 호출 또는 추가 호출을 사용하여 수행될 수 있음)를 얻기 위해 운영 체제에 의해 구현된 디코딩 함수에 대한 인터페이스 역할을 할 수 있다.
도 2의 방법(200)은 적절하게 구성된 클라이언트 장치의 소프트웨어 또는 하드웨어를 사용하여 구현될 수 있다. 대안으로, 방법(200)을 구현하기 위한 명령어들은, (예를 들어, 적절한 클라이언트 장치의) 하나 이상의 프로세서에 의해 처리될 시, 컴퓨터 판독 가능 저장 매체에 저장될 수 있다.
도 3은 운영 체제가 iOS, macOS 및 tvOS와 같은 미국 쿠퍼티노 소재의 Apple Inc.에 의해 개발된 운영 체제이고, 다층 코딩 방식이 LCEVC인 방법(200)의 예시적인 구현 방법(300)을 도시한다. 방법(300)은 Video Toolbox 모듈(324) 내의 프로세스를 설명한다. 도 3의 Video Toolbox 모듈(324)은 VLCKit 래퍼를 통해 액세스되는 Video Toolbox 함수의 수정된 버전이다. Video Toolbox 함수는 Apple® 개발 운영 체제의 VT - Video Toolkit - 함수와 함께 사용하기 위한 미디어 라이브러리 함수이다. VLCKit은 Apple® 장치와 함께 사용될 수 있는 VLC 미디어 플레이어의 핵심 라이브러리인 libvlc의 외부 인터페이스용 래퍼이며, 여기서 libvlc는 시스템-레벨 라이브러리를 제공하는 실행 가능 파일로 구현될 수 있다. 수정되지 않은 Video Toolbox 모듈(324)은 앞서 논의된 기본 스트림과 같은 인코딩된 비디오 스트림을 디코딩하는 하드웨어 가속 프레임워크(Apple® 개발 운영 체제의 일부를 형성하는 Apple®의 Video Toolkit)의 사용을 허용한다. 본 예는 Video Toolbox 모듈(324)을 수정하여 프레임워크가 다층 코딩 방식(이 경우에는, LCEVC)을 지원하도록 수정될 수 있도록 한다. 수정은 하나 이상의 LCEVC별 패치를 libvlc에 적용하여, 예를 들어, VLCkit 인스턴스를 구축하기 전에 적절한 폴더에 패치를 정렬하여 구현될 수 있다. 이는 Video Toolbox가 LCEVC-향상된 비디오 스트림을 디코딩하도록 하는 필요한 수정을 제공한다.
수정에는 LCEVC 방식을 사용하여 인코딩되는 비디오 스트림을 디코딩하는 기능을 제공하는, 수정되지 않은 Video Toolbox 모듈에 있는 Apple® VTDecompressionSession 객체의 일반화인 LCEVC DecompressionSession(326)의 생성이 수반된다. 이 예에서, LCEVC DecompressionSession(326)은 또한 다른 방식(예컨대 단일 계층 코딩 방식과 같은)을 사용하여 인코딩된 비디오 스트림이 디코딩되도록 한다.
VTDecompressionSession은 비디오 데이터의 압축 해제를 관리하는 Video Toolbox애 의해 제공되는 세션 객체이며, 기본 스트림을 디코딩하기 위해 Apple® 개발 운영 체제에 내장된 운영 체제 비디오 디코딩 함수이다. LCEVC DecompressionSession(326)에서 VTDecompressionSession은 수정되지 않은 Video Toolbox 모듈에서와 같이, 기본 스트림을 디코딩하는 데 사용된다. LCEVC DecompressionSession(326)은 LCEVC 인코딩된 스트림을 디코딩하는 데 필요한 추가 구조를 더 포함하며, 도 3의 방법(300)을 참조하여 설명된다.
방법(300)은 VLCKit(302)의 인스턴스를 생성하는 것이 수반된다. 이 경우에, 미디어 플레이어는 VLC이고, libvlc는 VLCKit(300) 래퍼를 통해 액세스할 수 있는 미디어 플레이어 라이브러리이다. libvlc 라이브러리에는 미디어 플레이어 비디오 디코딩 함수가 포함된다.
블록(304)에서, 수신된 인코딩된 비디오 스트림은 CMSampleBuffers로 역다중화된다. CMSampleBuffers는 미디어 파이프라인을 통해 미디어 샘플 데이터를 이동하는 데 사용되는 비디오 샘플을 포함하는 객체이다. 그런 다음 비디오 스트림은 LCEVC DecompressionSession(326) 모듈에 의해 처리된다.
블록(306)에서, 방법(200)의 블록(204)과 유사하게, 비디오 스트림이 LCEVC를 사용하여 인코딩되는지 여부가 결정된다. 비디오 스트림이 LCEVC를 사용하여 인코딩된 것으로 결정되는 경우, 방법(300)은 LCEVC 페이로드가 비디오 스트림으로부터 추출되는 블록(308)으로 진행한다. LCEVC 페이로드는 기본 코덱을 사용하여 인코딩된 LCEVC 스트림의 기본 스트림이다.
블록(310)에서, 기본 비디오 스트림은 VTDecompressionSession 객체를 사용하여 디코딩된다. 기본 비디오 스트림의 디코딩으로 인해 디코딩된 기본 비디오 스트림의 프레임 순서가 관련된 인코딩되지 않은 전체 해상도 비디오의 프레임 순서와 다르게 할 수 있다. 따라서, 방법(300)은 디코딩된 기본 비디오 스트림을 프리젠테이션 순서로 재정렬(312)하는 것을 수반한다. 프레젠테이션 순서는 최종 비디오 콘텐트의 프레임이 디스플레이되는 순서에 해당한다.
블록(314)에서, 블록(308)에서 추출된 LCEVC를 사용하여 인코딩된 비디오 스트림의 향상 스트림이 디코딩되고 디코딩된 기본 비디오 스트림에 적용되어 디코딩된 비디오 스트림을 생성한다. 예를 들어, 방법(300)의 블록(314)은 LCEVC 디코딩 프로세스를 구현하기 위해 적어도 하나의 적합한 함수에 액세스하기 위해, 도 4를 참조하여 더 논의된 바와 같이, 다층 디코더 라이브러리에 대한 호출을 수반한다.
블록(306)에서, 비디오 스트림이 LCEVC를 사용하여 인코딩되지 않은 것으로 결정되는 경우, VTDecompressionSession(316) 객체는 수정되지 않은 Video Toolbox 모듈 사례에서와 같이, 비디오 스트림을 디코딩하는 데 사용된다.
블록(314 또는 316) 이후에, 디코딩된 비디오 스트림은 CVPixelBuffers로 반환된다. CVPixelBuffer는 메모리에 픽셀을 보관하는 이미지 버퍼이다. 블록(318)에서, CVPixelBuffers가 올바른 순서로 디스플레이되는지 여부가 결정된다. CVPixelBuffers가 올바른 순서가 아닌 경우, 방법(300)은 CVPixelBuffers가 재정렬되어 각 프레임이 올바르게 정렬되어 비디오 스트림이 수정되지 않은 Video Toolbox 모듈 사례에서와 같이, 원본 비디오의 표현을 제공하는 블록(320)으로 진행한다.
블록(318)에서, CVPixelBuffer가 올바르게 정렬된 것으로 결정되는 경우, 방법(300)은 디코딩된 비디오 스트림이 프리젠테이션을 위해 대기열에서 해제되는 블록(322)으로 진행한다.
도 3의 블록(314)에서 수행되는 것과 같이 LCEVC 스트림이 디코딩되는 방법의 일 예가 도 4에 도시된다. 도 4는 도 1의 클라이언트 장치(100)와 같은 클라이언트 장치 상에 비디오 콘텐트를 디스플레이하기 위한 컴포넌트의 컴퓨터 시스템 레벨 계층 구조(400)를 개략적으로 도시한다. 최상위 레벨에는 클라이언트 애플리케이션(402)이 있다. 이는 비디오가 디스플레이되는 소프트웨어 애플리케이션이다. 사용자는 클라이언트 장치에 결합된 디스플레이에서 비디오를 볼 수 있다. 클라이언트 애플리케이션(402)은 VLCKit(404)의 인스턴스를 사용하여 VLC 미디어 플레이어의 핵심 라이브러리인 libvlc(406)와 인터페이스한다. 핵심 libvlc 라이브러리는 미디어 플레이어 기능이 클라이언트 애플리케이션(402)에 통합되도록 하는 실행 가능 컴퓨터 프로그램 코드를 포함할 수 있다. 본 경우에, libvlc(406)은 libvlc가 LCEVC 디코딩을 지원하도록 하는 하나 이상의 패치를 포함하도록 수정된다. 이는 libvlc(406)와 함께 구현하거나 동작하는 하나 이상의 파일 및/또는 컴퓨터 프로그램 코드 부분을 수정하는 것을 포함할 수 있다. libvlc(406) 내의 수정된 모듈(408)은 인코딩된 비디오 스트림과 관련된 데이터를 처리하고 비디오 스트림의 관련 컴포넌트들을 예를 들어 운영 체제 비디오 디코딩 함수 및 다층 디코딩 함수(예를 들어, 다층 디코더 라이브러리에 의해 제공됨)가 포함된 각각의 디코더(410)에 공급한다. 예를 들어, 기본 스트림은 상술된 바와 같이 운영 체제 비디오 디코딩 함수에 의해 디코딩될 수 있는 반면, 향상 스트림은 하나 이상의 패치(이는 예를 들어 다층 디코더 라이브러리에 해당함)로 수정된 libvlc를 사용하여 디코딩될 수 있다. 그런 다음 디코딩된 비디오 콘텐트는 디스플레이를 위해 클라이언트 애플리케이션(402)에 의해 수신될 수 있다.
상기 예들은 예시적인 예들로서 이해되어야 한다. 추가 예들이 예상된다. 임의의 하나의 예와 관련하여 설명된 임의의 특징은 단독으로 또는 설명된 다른 특징들과 조합하여 사용될 수 있으며, 또한 임의의 다른 예의 하나 이상의 특징들과 조합하여 또는 임의의 다른 예들의 임의의 조합으로 사용될 수 있음을 이해해야 한다. 또한, 첨부된 청구범위의 범위를 벗어나지 않고 상술되지 않은 등가물 및 변형물이 사용될 수도 있다.

Claims (15)

  1. 클라이언트 장치에서 비디오 스트림을 디코딩하는 방법에 있어서, 상기 방법은,
    상기 클라이언트 장치 상의 클라이언트 애플리케이션으로부터, 상기 클라이언트 장치에서 이용 가능한 미디어 플레이어 라이브러리에 의해 구현된 디코딩 함수를 호출하는 단계로서, 상기 미디어 플레이어 라이브러리에 의해 구현된 상기 디코딩 함수는 상기 클라이언트 장치의 운영 체제에 의해 구현된 디코딩 함수에 대한 추가 호출을 포함하는, 상기 호출하는 단계;
    상기 미디어 플레이어 라이브러리에 의해 구현된 상기 디코딩 함수를 수정하여 상기 비디오 스트림이 다층 디코딩 방식을 사용하여 인코딩되는지 여부에 대한 결정을 포함하는 단계; 및
    상기 비디오 스트림이 다층 코딩 방식을 사용하여 디코딩된다고 결정하는 것에 응답하여,
    상기 비디오 스트림을 처리하여 상기 다층 코딩 방식의 기본 스트림 및 향상 스트림을 추출하는 단계;
    상기 클라이언트 장치의 상기 운영 체제에 의해 구현된 상기 디코딩 함수에 대한 상기 추가 호출을 사용하여 상기 기본 스트림을 디코딩하여 디코딩된 기본 스트림을 생성하는 단계;
    상기 인코딩된 향상 스트림을 디코딩하여 디코딩된 향상 스트림을 생성하는 단계;
    상기 디코딩된 향상 스트림을 상기 디코딩된 기본 스트림에 적용하여 디코딩된 비디오 스트림 데이터를 생성하는 단계; 및
    상기 디코딩된 비디오 스트림 데이터를 상기 미디어 플레이어 라이브러리에 의해 구현된 상기 디코딩 함수에 반환하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 비디오 스트림이 상기 다층 코딩 방식을 사용하여 인코딩되지 않는다고 결정하는 것에 응답하여, 상기 운영 체제에 의해 구현된 상기 디코딩 함수에 대한 상기 추가 호출을 사용하여 상기 비디오 스트림을 디코딩하는 단계를 더 포함하는, 방법.
  3. 제1항 또는 제2항에 있어서, 상기 미디어 플레이어 라이브러리에 의해 구현된 상기 디코딩 함수는 디스플레이를 위해 상기 미디어 플레이어 라이브러리에 의해 구현된 상기 디코딩 함수에 반환된 상기 디코딩된 비디오 스트림 데이터의 프레임을 재정렬하는, 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 클라이언트 장치는 모바일 장치인, 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 운영 체제에 의해 구현된 상기 디코딩 함수는 하드웨어 가속되는, 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서, 상기 클라이언트 장치의 상기 운영 체제는 iOS, macOS, 및 tvOS 중 하나인, 방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 상기 다층 코딩 방식은 LCEVC(Low Complexity Enhancement Video Coding) 방식인, 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서, 상기 디코딩 함수를 수정하는 단계는 패치를 상기 미디어 플레이어 라이브러리에 적용하는 단계를 포함하는, 방법.
  9. 제8항에 있어서, 상기 패치를 상기 미디어 플레이어 라이브러리에 적용하는 단계는 상기 미디어 플레이어 라이브러리에 의해 구현되는 상기 디코딩 함수를 위한 컴퓨터 프로그램 코드를 포함하는 파일을 수정하는 단계 및 상기 클라이언트 장치의 상기 운영 체제에 의해 구현되는 상기 디코딩 함수를 위한 추가 파일을 추가하는 단계를 포함하는, 방법.
  10. 클라이언트 장치에 있어서,
    운영 체제 비디오 디코딩 함수를 포함하는 운영 체제;
    비디오를 디스플레이를 하기 위한 클라이언트 애플리케이션; 및
    상기 클라이언트 애플리케이션에 의해 사용하기 위해 미디어 플레이어 비디오 디코딩 함수를 포함하는 미디어 플레이어 라이브러리로서, 상기 미디어 플레이어 비디오 디코딩 함수는 상기 운영 체제 비디오 디코딩 함수에 대한 호출을 포함하는, 상기 미디어 플레이어 라이브러리를 포함하며,
    상기 미디어 플레이어 비디오 디코딩 함수는 다층 코딩 방식을 사용하여 인코딩된 비디오 스트림의 수신 시 다층 디코딩 함수를 선택적으로 구현하는 상기 운영 체제 비디오 디코딩 함수에 대한 래퍼(wrapper)를 포함하도록 수정되고,
    상기 비디오 스트림은 기본 스트림 및 향상 스트림을 포함하고,
    상기 다층 디코딩 함수는 상기 기본 스트림과 관련하여 상기 운영 체제 비디오 디코딩 함수에 대한 호출을 포함하고, 상기 다층 디코딩 함수는 상기 향상 스트림의 디코딩된 버전을 상기 운영 체제 비디오 디코딩 함수에 대한 상기 호출의 출력에 적용하여 디코딩된 비디오 스트림 데이터를 생성하도록 구성되고,
    상기 다층 디코딩 함수는 상기 디코딩된 비디오 스트림 데이터를 상기 클라이언트 애플리케이션에 의해 사용하기 위한 상기 미디어 플레이어 비디오 디코딩 함수에 반환하도록 더 구성되는, 클라이언트 장치.
  11. 제10항에 있어서, 상기 다층 코딩 방식은 LCEVC(Low Complexity Enhancement Video Coding) 방식인, 클라이언트 장치.
  12. 제10항 또는 제11항에 있어서, 상기 다층 디코딩 함수는 디스플레이를 위해 상기 디코딩된 기본 스트림의 프레임을 재정렬하는, 클라이언트 장치.
  13. 제10항 내지 제12항 중 어느 한 항에 있어서, 상기 운영 체제 비디오 디코딩 함수의 내부 방법은 상기 클라이언트 애플리케이션 및 상기 미디어 플레이어 라이브러리 중 적어도 하나에 이용 가능하지 않은, 클라이언트 장치.
  14. 제10항 내지 제13항 중 어느 한 항에 있어서, 상기 운영 체제 비디오 디코딩 함수는 하드웨어 가속되는, 클라이언트 장치.
  15. 제1항 내지 제9항 중 어느 한 항의 방법을 수행하기 위해 적어도 하나의 프로세서에 의해 실행 가능한 명령어들을 저장하는 컴퓨터 판독 가능 저장 매체.
KR1020237016225A 2020-11-27 2021-11-26 클라이언트 장치에서의 비디오 스트림의 디코딩 KR20230124552A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2018743.1 2020-11-27
GB2018743.1A GB2601484A (en) 2020-11-27 2020-11-27 Decoding a video stream on a client device
PCT/GB2021/053076 WO2022112780A1 (en) 2020-11-27 2021-11-26 Decoding a video stream on a client device

Publications (1)

Publication Number Publication Date
KR20230124552A true KR20230124552A (ko) 2023-08-25

Family

ID=74099746

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237016225A KR20230124552A (ko) 2020-11-27 2021-11-26 클라이언트 장치에서의 비디오 스트림의 디코딩

Country Status (7)

Country Link
US (1) US20240022743A1 (ko)
EP (1) EP4252422A1 (ko)
JP (1) JP2023550940A (ko)
KR (1) KR20230124552A (ko)
CN (1) CN116491123A (ko)
GB (1) GB2601484A (ko)
WO (1) WO2022112780A1 (ko)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2453137A1 (en) * 2001-07-06 2003-01-16 E-Genie Australia Pty Limited Method and system for computer software application execution
US9179144B2 (en) * 2012-11-28 2015-11-03 Cisco Technology, Inc. Fast switching hybrid video decoder
CN111210496B (zh) * 2018-11-19 2022-11-25 腾讯科技(深圳)有限公司 一种图片解码方法、装置以及设备
GB2617790B (en) 2019-03-20 2024-03-13 V Nova Int Ltd Low complexity enhancement video coding

Also Published As

Publication number Publication date
JP2023550940A (ja) 2023-12-06
GB202018743D0 (en) 2021-01-13
US20240022743A1 (en) 2024-01-18
EP4252422A1 (en) 2023-10-04
GB2601484A (en) 2022-06-08
WO2022112780A1 (en) 2022-06-02
CN116491123A (zh) 2023-07-25

Similar Documents

Publication Publication Date Title
CN106973298B (zh) 以gpu加速的软件视频转码器
EP2815574B1 (en) Metadata assisted video decoding
US10976986B2 (en) System and method for forwarding an application user interface
JP7016428B2 (ja) 帯域外エンドオブストリームnalユニットを復号化に使用する方法、装置、及びコンピュータプログラム
US8121189B2 (en) Video decoding using created reference pictures
US20170150160A1 (en) Bitstream partitions operation
CN114641976B (zh) 用于流式传输媒体内容的方法、设备和计算机可读介质
US12003742B2 (en) Methods, apparatuses, computer programs and computer-readable media for scalable image coding
TWI626841B (zh) 具有減少色彩解析度的視訊流之自適應處理
KR20230124551A (ko) 브라우저 내에서 비디오 스트림의 디코딩
GB2607123A (en) Enhancement decoding implementation and method
US10115174B2 (en) System and method for forwarding an application user interface
CN115550649A (zh) 编码、解码方法、装置和设备
US20240022743A1 (en) Decoding a video stream on a client device
US20140333639A1 (en) System and method for forwarding a graphics command stream
CN115867906A (zh) 使用基于会话的dash操作的基于会话的描述url定制
US20210409735A1 (en) Methods, apparatuses, computer programs and computer-readable media for scalable video coding and transmission
EP2804095A1 (en) A system and method for forwarding a graphics command stream
CN113287312A (zh) 用于处理配置数据的方法、设备、计算机程序和计算机可读介质
US20240129500A1 (en) Flexible encoding of components in tiered hierarchical coding
AU2022433628A1 (en) Auxiliary mpds for mpeg dash to support prerolls, midrolls and endrolls with stacking properties
CN118266219A (en) Method and apparatus for defining frame and timing reference Network Abstraction Layer (NALS) structure in haptic signals
JP2023512221A (ja) セッションベースのdash動作を使用したurlカスタマイズ