Android Exoplayer 2 UDP解码问题
oalias 发布于 2019-10-05 • 在 android • 最后更新 2019-10-05 18:13 • 89 浏览
我是ExoPlayer的新手,我目前正在使用它来播放Native Udp Stream(来自法国数字电视:1080p 5-10 mbps的可变比特率) 我设法在不同的设备上播放一些来自http://jell.yfish.us/的测试视频的udp流。 我使用HLS和Udp Streaming进行了一些不同的视频解码测试:
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这样的可变比特率的视频不能被正确解码,但使用Constatnt biterate视频像Jell yfish,解码过程是完美的。 有一些编码改进使VBR视频正确解码? 预先感谢您:) 对不起,我的英语不好 :)