'./track-enums'에서 {VideoTrackKind} 가져오기;
'./track'에서 트랙 가져오기;
'../utils/merge-options'에서 병합 가져오기;

/**
 * 단일 `VideoTrack`의 표현입니다.
 *
 * @see [사양]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack}
 * @extends 트랙
 */
클래스 VideoTrack 확장 트랙 {

  /**
   * 이 클래스의 인스턴스를 만듭니다.
   *
   * @param {객체} [옵션={}]
   * 옵션 이름 및 값의 개체
   *
   * @param {문자열} [옵션.종류='']
   * 유효한 {@link VideoTrack~Kind}
   *
   * @param {string} [options.id='vjs_track_' + Guid.newGUID()]
   * 이 AudioTrack의 고유 ID입니다.
   *
   * @param {문자열} [옵션.라벨='']
   * 이 트랙의 메뉴 레이블입니다.
   *
   * @param {문자열} [옵션.언어='']
   * 유효한 두 문자 언어 코드입니다.
   *
   * @param {부울} [옵션.선택됨]
   * 이 트랙이 현재 재생 중인 트랙인 경우.
   */
  생성자(옵션 = {}) {
    const 설정 = 병합(옵션, {
      친절한: VideoTrackKind[options.kind] || ''
    });

    슈퍼(설정);

    선택하자 = 거짓;

    /**
     * @memberof VideoTrack
     * @member {boolean} 선택됨
     * 이 `VideoTrack`이 선택되었는지 여부. 이것을 설정할 때
     * 선택한 상태가 변경되면 {@link VideoTrack#selectedchange}를 실행합니다.
     * @사례
     *
     * @fires VideoTrack#selectedchange
     */
    Object.defineProperty(이것, '선택됨', {
      얻다() {
        선택 반환;
      },
      set(newSelected) {
        // 유효하지 않거나 변경되지 않은 값
        if (newSelected 유형!== '부울' || newSelected === 선택됨) {
          반품;
        }
        선택 = newSelected;

        /**
         * 이 트랙에서 선택된 변경 사항이 발생하면 실행되는 이벤트입니다. 이를 통해
         * 이 트랙을 보유하고 있는 VideoTrackList가 적절하게 작동합니다.
         *
         * > 메모: 이것은 사양의 일부가 아닙니다! 기본 트랙이 가능합니다.
         * 내부적으로는 이벤트가 없습니다.
         *
         * @event VideoTrack#selectedchange
         * @type {이벤트대상~이벤트}
         */
        this.trigger('선택된 변경');
      }
    });

    // 사용자가 이 트랙을 선택으로 설정하면
    // 그렇지 않으면 선택된 값을 참 값으로 설정합니다.
    // 거짓으로 유지
    경우 (settings.selected) {
      this.selected = 설정.선택됨;
    }
  }
}

기본 VideoTrack 내보내기;