Java 类com.google.android.exoplayer2.extractor.ts.TsPayloadReader.EsInfo 实例源码

项目:Exoplayer2Radio    文件:DefaultTsPayloadReaderFactory.java   
@Override
public TsPayloadReader createPayloadReader(int streamType, EsInfo esInfo) {
  switch (streamType) {
    case TsExtractor.TS_STREAM_TYPE_MPA:
    case TsExtractor.TS_STREAM_TYPE_MPA_LSF:
      return new PesReader(new MpegAudioReader(esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_AAC:
      return isSet(FLAG_IGNORE_AAC_STREAM)
          ? null : new PesReader(new AdtsReader(false, esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_AC3:
    case TsExtractor.TS_STREAM_TYPE_E_AC3:
      return new PesReader(new Ac3Reader(esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_DTS:
    case TsExtractor.TS_STREAM_TYPE_HDMV_DTS:
      return new PesReader(new DtsReader(esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_H262:
      return new PesReader(new H262Reader());
    case TsExtractor.TS_STREAM_TYPE_H264:
      return isSet(FLAG_IGNORE_H264_STREAM) ? null
          : new PesReader(new H264Reader(buildSeiReader(esInfo),
              isSet(FLAG_ALLOW_NON_IDR_KEYFRAMES), isSet(FLAG_DETECT_ACCESS_UNITS)));
    case TsExtractor.TS_STREAM_TYPE_H265:
      return new PesReader(new H265Reader(buildSeiReader(esInfo)));
    case TsExtractor.TS_STREAM_TYPE_SPLICE_INFO:
      return isSet(FLAG_IGNORE_SPLICE_INFO_STREAM)
          ? null : new SectionReader(new SpliceInfoSectionReader());
    case TsExtractor.TS_STREAM_TYPE_ID3:
      return new PesReader(new Id3Reader());
    case TsExtractor.TS_STREAM_TYPE_DVBSUBS:
      return new PesReader(
          new DvbSubtitleReader(esInfo.dvbSubtitleInfos));
    default:
      return null;
  }
}
项目:K-Sonic    文件:DefaultTsPayloadReaderFactory.java   
@Override
public TsPayloadReader createPayloadReader(int streamType, EsInfo esInfo) {
  switch (streamType) {
    case TsExtractor.TS_STREAM_TYPE_MPA:
    case TsExtractor.TS_STREAM_TYPE_MPA_LSF:
      return new PesReader(new MpegAudioReader(esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_AAC:
      return isSet(FLAG_IGNORE_AAC_STREAM)
          ? null : new PesReader(new AdtsReader(false, esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_AC3:
    case TsExtractor.TS_STREAM_TYPE_E_AC3:
      return new PesReader(new Ac3Reader(esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_DTS:
    case TsExtractor.TS_STREAM_TYPE_HDMV_DTS:
      return new PesReader(new DtsReader(esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_H262:
      return new PesReader(new H262Reader());
    case TsExtractor.TS_STREAM_TYPE_H264:
      return isSet(FLAG_IGNORE_H264_STREAM) ? null
          : new PesReader(new H264Reader(buildSeiReader(esInfo),
              isSet(FLAG_ALLOW_NON_IDR_KEYFRAMES), isSet(FLAG_DETECT_ACCESS_UNITS)));
    case TsExtractor.TS_STREAM_TYPE_H265:
      return new PesReader(new H265Reader(buildSeiReader(esInfo)));
    case TsExtractor.TS_STREAM_TYPE_SPLICE_INFO:
      return isSet(FLAG_IGNORE_SPLICE_INFO_STREAM)
          ? null : new SectionReader(new SpliceInfoSectionReader());
    case TsExtractor.TS_STREAM_TYPE_ID3:
      return new PesReader(new Id3Reader());
    default:
      return null;
  }
}
项目:K-Sonic    文件:TsExtractor.java   
/**
 * Returns the stream info read from the available descriptors. Sets {@code data}'s position to
 * the end of the descriptors.
 *
 * @param data A buffer with its position set to the start of the first descriptor.
 * @param length The length of descriptors to read from the current position in {@code data}.
 * @return The stream info read from the available descriptors.
 */
private EsInfo readEsInfo(ParsableByteArray data, int length) {
  int descriptorsStartPosition = data.getPosition();
  int descriptorsEndPosition = descriptorsStartPosition + length;
  int streamType = -1;
  String language = null;
  while (data.getPosition() < descriptorsEndPosition) {
    int descriptorTag = data.readUnsignedByte();
    int descriptorLength = data.readUnsignedByte();
    int positionOfNextDescriptor = data.getPosition() + descriptorLength;
    if (descriptorTag == TS_PMT_DESC_REGISTRATION) { // registration_descriptor
      long formatIdentifier = data.readUnsignedInt();
      if (formatIdentifier == AC3_FORMAT_IDENTIFIER) {
        streamType = TS_STREAM_TYPE_AC3;
      } else if (formatIdentifier == E_AC3_FORMAT_IDENTIFIER) {
        streamType = TS_STREAM_TYPE_E_AC3;
      } else if (formatIdentifier == HEVC_FORMAT_IDENTIFIER) {
        streamType = TS_STREAM_TYPE_H265;
      }
    } else if (descriptorTag == TS_PMT_DESC_AC3) { // AC-3_descriptor in DVB (ETSI EN 300 468)
      streamType = TS_STREAM_TYPE_AC3;
    } else if (descriptorTag == TS_PMT_DESC_EAC3) { // enhanced_AC-3_descriptor
      streamType = TS_STREAM_TYPE_E_AC3;
    } else if (descriptorTag == TS_PMT_DESC_DTS) { // DTS_descriptor
      streamType = TS_STREAM_TYPE_DTS;
    } else if (descriptorTag == TS_PMT_DESC_ISO639_LANG) {
      language = new String(data.data, data.getPosition(), 3).trim();
      // Audio type is ignored.
    }
    // Skip unused bytes of current descriptor.
    data.skipBytes(positionOfNextDescriptor - data.getPosition());
  }
  data.setPosition(descriptorsEndPosition);
  return new EsInfo(streamType, language,
      Arrays.copyOfRange(data.data, descriptorsStartPosition, descriptorsEndPosition));
}
项目:transistor    文件:DefaultTsPayloadReaderFactory.java   
@Override
public TsPayloadReader createPayloadReader(int streamType, EsInfo esInfo) {
  switch (streamType) {
    case TsExtractor.TS_STREAM_TYPE_MPA:
    case TsExtractor.TS_STREAM_TYPE_MPA_LSF:
      return new PesReader(new MpegAudioReader(esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_AAC_ADTS:
      return isSet(FLAG_IGNORE_AAC_STREAM)
          ? null : new PesReader(new AdtsReader(false, esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_AAC_LATM:
      return isSet(FLAG_IGNORE_AAC_STREAM)
          ? null : new PesReader(new LatmReader(esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_AC3:
    case TsExtractor.TS_STREAM_TYPE_E_AC3:
      return new PesReader(new Ac3Reader(esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_DTS:
    case TsExtractor.TS_STREAM_TYPE_HDMV_DTS:
      return new PesReader(new DtsReader(esInfo.language));
    case TsExtractor.TS_STREAM_TYPE_H262:
      return new PesReader(new H262Reader());
    case TsExtractor.TS_STREAM_TYPE_H264:
      return isSet(FLAG_IGNORE_H264_STREAM) ? null
          : new PesReader(new H264Reader(buildSeiReader(esInfo),
              isSet(FLAG_ALLOW_NON_IDR_KEYFRAMES), isSet(FLAG_DETECT_ACCESS_UNITS)));
    case TsExtractor.TS_STREAM_TYPE_H265:
      return new PesReader(new H265Reader(buildSeiReader(esInfo)));
    case TsExtractor.TS_STREAM_TYPE_SPLICE_INFO:
      return isSet(FLAG_IGNORE_SPLICE_INFO_STREAM)
          ? null : new SectionReader(new SpliceInfoSectionReader());
    case TsExtractor.TS_STREAM_TYPE_ID3:
      return new PesReader(new Id3Reader());
    case TsExtractor.TS_STREAM_TYPE_DVBSUBS:
      return new PesReader(
          new DvbSubtitleReader(esInfo.dvbSubtitleInfos));
    default:
      return null;
  }
}
项目:transistor    文件:TsExtractorTest.java   
@Override
public TsPayloadReader createPayloadReader(int streamType, EsInfo esInfo) {
  if (provideCustomEsReader && streamType == 3) {
    esReader = new CustomEsReader(esInfo.language);
    return new PesReader(esReader);
  } else {
    return defaultFactory.createPayloadReader(streamType, esInfo);
  }
}
项目:Exoplayer2Radio    文件:TsExtractor.java   
/**
 * Returns the stream info read from the available descriptors. Sets {@code data}'s position to
 * the end of the descriptors.
 *
 * @param data A buffer with its position set to the start of the first descriptor.
 * @param length The length of descriptors to read from the current position in {@code data}.
 * @return The stream info read from the available descriptors.
 */
private EsInfo readEsInfo(ParsableByteArray data, int length) {
  int descriptorsStartPosition = data.getPosition();
  int descriptorsEndPosition = descriptorsStartPosition + length;
  int streamType = -1;
  String language = null;
  List<DvbSubtitleInfo> dvbSubtitleInfos = null;
  while (data.getPosition() < descriptorsEndPosition) {
    int descriptorTag = data.readUnsignedByte();
    int descriptorLength = data.readUnsignedByte();
    int positionOfNextDescriptor = data.getPosition() + descriptorLength;
    if (descriptorTag == TS_PMT_DESC_REGISTRATION) { // registration_descriptor
      long formatIdentifier = data.readUnsignedInt();
      if (formatIdentifier == AC3_FORMAT_IDENTIFIER) {
        streamType = TS_STREAM_TYPE_AC3;
      } else if (formatIdentifier == E_AC3_FORMAT_IDENTIFIER) {
        streamType = TS_STREAM_TYPE_E_AC3;
      } else if (formatIdentifier == HEVC_FORMAT_IDENTIFIER) {
        streamType = TS_STREAM_TYPE_H265;
      }
    } else if (descriptorTag == TS_PMT_DESC_AC3) { // AC-3_descriptor in DVB (ETSI EN 300 468)
      streamType = TS_STREAM_TYPE_AC3;
    } else if (descriptorTag == TS_PMT_DESC_EAC3) { // enhanced_AC-3_descriptor
      streamType = TS_STREAM_TYPE_E_AC3;
    } else if (descriptorTag == TS_PMT_DESC_DTS) { // DTS_descriptor
      streamType = TS_STREAM_TYPE_DTS;
    } else if (descriptorTag == TS_PMT_DESC_ISO639_LANG) {
      language = data.readString(3).trim();
      // Audio type is ignored.
    } else if (descriptorTag == TS_PMT_DESC_DVBSUBS) {
      streamType = TS_STREAM_TYPE_DVBSUBS;
      dvbSubtitleInfos = new ArrayList<>();
      while (data.getPosition() < positionOfNextDescriptor) {
        String dvbLanguage = data.readString(3).trim();
        int dvbSubtitlingType = data.readUnsignedByte();
        byte[] initializationData = new byte[4];
        data.readBytes(initializationData, 0, 4);
        dvbSubtitleInfos.add(new DvbSubtitleInfo(dvbLanguage, dvbSubtitlingType,
            initializationData));
      }
    }
    // Skip unused bytes of current descriptor.
    data.skipBytes(positionOfNextDescriptor - data.getPosition());
  }
  data.setPosition(descriptorsEndPosition);
  return new EsInfo(streamType, language, dvbSubtitleInfos,
      Arrays.copyOfRange(data.data, descriptorsStartPosition, descriptorsEndPosition));
}
项目:transistor    文件:TsExtractor.java   
/**
 * Returns the stream info read from the available descriptors. Sets {@code data}'s position to
 * the end of the descriptors.
 *
 * @param data A buffer with its position set to the start of the first descriptor.
 * @param length The length of descriptors to read from the current position in {@code data}.
 * @return The stream info read from the available descriptors.
 */
private EsInfo readEsInfo(ParsableByteArray data, int length) {
  int descriptorsStartPosition = data.getPosition();
  int descriptorsEndPosition = descriptorsStartPosition + length;
  int streamType = -1;
  String language = null;
  List<DvbSubtitleInfo> dvbSubtitleInfos = null;
  while (data.getPosition() < descriptorsEndPosition) {
    int descriptorTag = data.readUnsignedByte();
    int descriptorLength = data.readUnsignedByte();
    int positionOfNextDescriptor = data.getPosition() + descriptorLength;
    if (descriptorTag == TS_PMT_DESC_REGISTRATION) { // registration_descriptor
      long formatIdentifier = data.readUnsignedInt();
      if (formatIdentifier == AC3_FORMAT_IDENTIFIER) {
        streamType = TS_STREAM_TYPE_AC3;
      } else if (formatIdentifier == E_AC3_FORMAT_IDENTIFIER) {
        streamType = TS_STREAM_TYPE_E_AC3;
      } else if (formatIdentifier == HEVC_FORMAT_IDENTIFIER) {
        streamType = TS_STREAM_TYPE_H265;
      }
    } else if (descriptorTag == TS_PMT_DESC_AC3) { // AC-3_descriptor in DVB (ETSI EN 300 468)
      streamType = TS_STREAM_TYPE_AC3;
    } else if (descriptorTag == TS_PMT_DESC_EAC3) { // enhanced_AC-3_descriptor
      streamType = TS_STREAM_TYPE_E_AC3;
    } else if (descriptorTag == TS_PMT_DESC_DTS) { // DTS_descriptor
      streamType = TS_STREAM_TYPE_DTS;
    } else if (descriptorTag == TS_PMT_DESC_ISO639_LANG) {
      language = data.readString(3).trim();
      // Audio type is ignored.
    } else if (descriptorTag == TS_PMT_DESC_DVBSUBS) {
      streamType = TS_STREAM_TYPE_DVBSUBS;
      dvbSubtitleInfos = new ArrayList<>();
      while (data.getPosition() < positionOfNextDescriptor) {
        String dvbLanguage = data.readString(3).trim();
        int dvbSubtitlingType = data.readUnsignedByte();
        byte[] initializationData = new byte[4];
        data.readBytes(initializationData, 0, 4);
        dvbSubtitleInfos.add(new DvbSubtitleInfo(dvbLanguage, dvbSubtitlingType,
            initializationData));
      }
    }
    // Skip unused bytes of current descriptor.
    data.skipBytes(positionOfNextDescriptor - data.getPosition());
  }
  data.setPosition(descriptorsEndPosition);
  return new EsInfo(streamType, language, dvbSubtitleInfos,
      Arrays.copyOfRange(data.data, descriptorsStartPosition, descriptorsEndPosition));
}