Problem with android display
I'm trying to make a zapper with VLC for SD, HD and 4K streaming channels. It can play SD and HD without any problems, but I'm unable to get it to reproduce 4K. When I choose a 4K channel, after loading, the sound starts and I only get a black background. I found this #Issue 902, what its exactly the same problem as I have. But when I try that options, the android_display module is not found. Here is the code.
`private void initPlayer() {
ArrayList<String> options = new ArrayList<>();
options.add("--audio-time-stretch");
options.add("--avcodec-skiploopfilter");
options.add("1");
options.add("--avcodec-skip-frame");
options.add("--avcodec-skip-idct");
options.add("--stats");
options.add("--audio-resampler");
options.add("soxr");
options.add("-vv");
options.add("--vout=android_display,none");
options.add("--subsdec-encoding");
libVLC = new LibVLC(this, options);
surfaceHolder = surfaceview.getHolder();
surfaceHolder.setKeepScreenOn(true);
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
mediaPlayer = new MediaPlayer(libVLC);
mediaPlayer.setAudioDigitalOutputEnabled(true);
mediaPlayer.setAudioOutput("opensles_android");
mediaPlayer.setRenderer(null);
mediaPlayer.setEventListener(new MediaPlayer.EventListener() {
@Override
public void onEvent(MediaPlayer.Event event) {
switch (event.type) {
case MediaPlayer.Event.Buffering:
if (mediaPlayer.isPlaying()) {
//mediaPlayer.pause();
}
if (event.getBuffering() >= 100.0f) {
hideLoading();
Log.i(TAG, "onEvent: buffer success...");
handler.sendEmptyMessageDelayed(CODE_HIDE_BLACK, 500);
handler.sendEmptyMessageDelayed(CODE_GONE_PROGRAMINFO, 5000);
handler.sendEmptyMessageDelayed(CODE_HIDE_BLACK, 500);
handler.sendEmptyMessageDelayed(CODE_GONE_PROGRAMINFO, 5000);
//mediaPlayer.play();
} else {
showLoading();
tvCache.setText("Loading: " + Math.floor(event.getBuffering()) + "%");
}
break;
case MediaPlayer.Event.Playing:
Log.i(TAG, "onEvent: playing...");
mediaPlayer.play();
Log.d("MediaPlayer","Duration: "+media.getDuration());
Log.d("MediaPlayer","AudioTracks: "+mediaPlayer.getAudioTracksCount());
Log.d("MediaPlayer","SubTracks: "+mediaPlayer.getSpuTracksCount());
break;
case MediaPlayer.Event.EncounteredError:
Log.i(TAG, "onEvent: error...");
hideLoading();
mediaPlayer.stop();
Toast.makeText(VideoPlayerActivity.this, "ERROR!", Toast.LENGTH_LONG).show();
break;
}
}
});
media = new Media(libVLC, Uri.parse(liveBean.getData().get(programIndex).getUrl()));
mediaPlayer.setMedia(media);
ivlcVout = mediaPlayer.getVLCVout();
ivlcVout.setVideoView(surfaceview);
ivlcVout.attachViews();
ivlcVout.addCallback(new IVLCVout.Callback() {
@Override
public void onSurfacesCreated(IVLCVout vlcVout) {
int sw = getWindow().getDecorView().getWidth();
int sh = getWindow().getDecorView().getHeight();
if (sw * sh == 0) {
Log.e(TAG, "Invalid surface size");
return;
}
mediaPlayer.getVLCVout().setWindowSize(sw, sh);
mediaPlayer.setAspectRatio("16:9");
mediaPlayer.setScale(0);
}
@Override
public void onSurfacesDestroyed(IVLCVout vlcVout) {
}
});
mediaPlayer.play();
}`
I include full logs here logs.txt. As you can see in lines as 355, the app is looking for android_display but it can't find a match.
I would appreciate any help, I've been looking for the problem several weeks but I couldn't find the solution. Maybe I'm missing something. Thanks in advance.
Versions
- libvlcVersion 3.2-eap3
- medialibraryVersion 0.5-eap3
- minSdkVersion = 23
- targetSdkVersion = 28
- Java 1.8
- NDK r10e
- Android version 6.0.1