Я новичок в ExoPlayer, в настоящее время я собираюсь использовать его для воспроизведения Native Udp Stream (с французского цифрового телевидения: 1080p 5-10 Мбит / с с переменным битрейтом) Мне удалось воспроизвести поток udp с некоторыми тестовыми видео от http://jell.yfish.us/ на разных устройствах. Я сделал другой тест декодирования видео с HLS и Udp Streaming с этим кодом для UDP:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myactivity);
sufaceview = (SurfaceView) findViewById(R.id.surfaceView2);
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory =
new AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector =
new DefaultTrackSelector(videoTrackSelectionFactory);
LoadControl loadControl = new DefaultLoadControl(
new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE),
15000, 60000, 2500, 6000);
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
Uri uri =
Uri.parse
("udp://@239.192.2.2:1234");
final DefaultBandwidthMeter bandwidthMeterA = new DefaultBandwidthMeter();
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,
Util.getUserAgent(this, "teveolauncher"), bandwidthMeterA);
extractorsFactory = new DefaultExtractorsFactory();
DataSource.Factory udsf = new UdpDataSource.Factory() {
@Override
public DataSource createDataSource() {
return new UdpDataSource(null, 3000, 100000);
}
};
ExtractorsFactory tsExtractorFactory = new ExtractorsFactory() {
@Override
public Extractor[] createExtractors() {
return new TsExtractor[]{new TsExtractor(MODE_SINGLE_PMT,
new TimestampAdjuster(0), new DefaultTsPayloadReaderFactory())};
}
};
MediaSource videoSource = new ExtractorMediaSource
(uri, udsf, tsExtractorFactory, null, null);
player.setVideoSurfaceView(sufaceview);
player.prepare(videoSource);
player.setPlayWhenReady(true);
}
Для HLS я просто меняю MediaSource и datasourceFactory:
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,
Util.getUserAgent(this, "teveolauncher"), bandwidthMeterA);
MediaSource videoSource = new HlsMediaSource
(uri, dataSourceFactory, null, null);
Я знаю, что Udpstreaming официально не поддерживается ExoPlayer, но класс UdpDataSource, похоже, работает хорошо.
После всего теста я заметил, что видео с переменным битрейтом, например французский DTT, не может быть правильно декодировано, но с постоянным битовым видео, таким как Jell yfish, процесс декодирования идеален.
Есть ли улучшения в кодировании, чтобы видео VBR декодировалось правильно? Заранее спасибо :) Извините за плохой английский :)