Enable HW Acceleration on Android
I am developing an application for Android and Amazon Fire Stick. I am trying to enable the hardware acceleration on Amazon Fire Stick. I am trying to stream a ts that is in HD. The following parameters did nothing:
// Set hardware acceleration MediaPlayer.Media.AddOption(":codec=avcodec"); MediaPlayer.Media.AddOption(":avcodec-hw=any"); MediaPlayer.Media.AddOption(":avcodec-threads=1");
I search the net and I saw mkl's suggestion to use:
MediaPlayer.Media.AddOption(":codec=mediacodec_ndk");
That seemed to work on the old Amazon Fire Stick but I still got some occasional video jitter. I was looking even more and I found out that someone said the Audio output was causing the stuttering too, so he/she had to turn on HW acceleration and change the audio output to OpenSL ES.
My question is this:
What is the proper way to enable HW acceleration using libvlcsharp and maybe what is the way to change default audio output?
This is my log using latest libvlc for android v 3.0.0, libvlcsharp.forms 0.3.1, and Xamarin Forms 3.3.0.967583
This is the output when using :codec=mediacodec_ndk:
[0:] OnMediaPlayerChanged 02-11 22:27:09.025 D/Mono ( 5860): DllImport searching in: 'libvlc' ('libvlc.so'). 02-11 22:27:09.025 D/Mono ( 5860): Searching for 'libvlc_media_player_set_android_context'. 02-11 22:27:09.025 D/Mono ( 5860): Probing 'libvlc_media_player_set_android_context'. 02-11 22:27:09.025 D/Mono ( 5860): Found as 'libvlc_media_player_set_android_context'. 02-11 22:27:09.902 I/VLC ( 5860): [55af7690/173b] libvlc packetizer: AAC channels: 2 samplerate: 48000 02-11 22:27:10.351 W/VideoCapabilities( 5860): Unrecognized profile/level 1/256 for video/mp4v-es 02-11 22:27:10.351 W/VideoCapabilities( 5860): Unrecognized profile/level 32768/256 for video/mp4v-es 02-11 22:27:10.353 W/VideoCapabilities( 5860): Unsupported mime video/mpeg2 02-11 22:27:10.357 W/VideoCapabilities( 5860): Unsupported mime video/spark 02-11 22:27:10.360 W/VideoCapabilities( 5860): Unsupported mime video/wmv3 02-11 22:27:10.363 W/VideoCapabilities( 5860): Unsupported mime video/wvc1 02-11 22:27:10.366 W/VideoCapabilities( 5860): Unsupported mime video/x-ms-wmv 02-11 22:27:10.372 W/AudioCapabilities( 5860): Unsupported mime audio/ac3 02-11 22:27:10.374 W/AudioCapabilities( 5860): Unsupported mime audio/eac3 02-11 22:27:10.375 W/AudioCapabilities( 5860): Unsupported mime audio/ec3 02-11 22:27:10.380 W/VideoCapabilities( 5860): Unrecognized profile 128 for video/avc 02-11 22:27:10.403 D/android.media.AudioTrack( 5860): No AudioTrackFlags provided. Using internal defaults. 02-11 22:27:10.469 D/android.media.AudioTrack( 5860): AUDIOINFO: audio_input: format: 2 sample_rate: 48000 channels: 2 content_type: 2 02-11 22:27:10.499 I/VideoCapabilities( 5860): Unsupported profile 4 for video/mp4v-es 02-11 22:27:10.596 E/VLC ( 5860): [55dfef90/1742] libvlc window: request 1 not implemented 02-11 22:27:10.596 E/VLC ( 5860): [55dfef90/1742] libvlc window: request 1 not implemented 02-11 22:27:10.602 W/khrn_client( 5860): init_window num_buffers 3 min undequeued buffers 1 02-11 22:27:10.603 W/khrn_client( 5860): init_window window 0x55a111c0, 1920x1080 hintTransform 0x0 do_pre 0 02-11 22:27:10.629 E/VLC ( 5860): [55dfee98/1742] libvlc gl: shader 0: Compiled 02-11 22:27:10.629 E/VLC ( 5860): [55dfee98/1742] libvlc gl: shader 1: Compiled 02-11 22:27:10.690 E/VLC ( 5860): [55dfee98/1742] libvlc gl: shader 0: Compiled 02-11 22:27:10.690 E/VLC ( 5860): [55dfee98/1742] libvlc gl: shader 1: Compiled 02-11 22:27:10.748 E/VLC ( 5860): [55dfef90/1742] libvlc window: request 0 not implemented 02-11 22:27:10.748 E/VLC ( 5860): [55dfef90/1742] libvlc window: request 0 not implemented 02-11 22:27:10.748 E/VLC ( 5860): [55dfef90/1742] libvlc window: request 1 not implemented 02-11 22:27:10.765 I/OMXClient( 5860): Using client-side OMX mux. 02-11 22:27:10.787 I/MediaCodecLogger( 5860): [ASAP] HW.video.avc P2 + 420721 02-11 22:27:10.825 I/MediaCodecLogger( 5860): [ASAP] HW.video.avc P2 - 420759 02-11 22:27:10.827 I/MediaCodecLogger( 5860): [ASAP] HW.video.avc P3 + 420761 02-11 22:27:10.841 I/MediaCodecLogger( 5860): [ASAP] HW.video.avc P3 - 420776 02-11 22:27:10.916 E/VLC ( 5860): [55adfe88/1749] libvlc decoder: output: 258 unknown, 1920x1088 stride 0 1088, crop 0 0 0 0 02-11 22:27:11.610 E/VLC ( 5860): [55dfef90/1742] libvlc window: request 3 not implemented 02-11 22:27:14.357 W/AudioTrack( 5860): releaseBuffer() track 0x54027560 disabled due to previous underrun, restarting 02-11 22:27:15.854 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 3382 02-11 22:27:20.860 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 4857 02-11 22:27:25.942 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5153 02-11 22:27:31.063 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5369 02-11 22:27:36.141 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5511 02-11 22:27:41.183 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5475 02-11 22:27:46.224 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5628 02-11 22:27:51.263 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5830 02-11 22:27:56.382 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5406 02-11 22:28:01.462 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5457 02-11 22:28:06.542 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5579 02-11 22:28:11.622 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5668 02-11 22:28:16.702 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5380 02-11 22:28:21.743 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5837 02-11 22:28:26.822 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5958 02-11 22:28:32.162 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 1770 02-11 22:28:32.167 E/VLC ( 5860): [55af9990/1739] libvlc input: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 5000 ms) 02-11 22:28:32.167 I/MediaCodecLogger( 5860): Flushing: com.android.mediaplayer.HW.video.avc.framerate = 24.566 fps 02-11 22:28:32.169 E/NdkMediaCodec( 5860): sf error code: -38 02-11 22:28:38.633 W/AudioTrack( 5860): releaseBuffer() track 0x54027560 disabled due to previous underrun, restarting 02-11 22:28:38.637 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 305 02-11 22:28:43.650 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 6393 02-11 22:28:48.691 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5220 02-11 22:28:53.731 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5468 02-11 22:28:58.771 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5874 02-11 22:29:03.811 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5503 02-11 22:29:08.891 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5694 02-11 22:29:13.970 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5538 02-11 22:29:19.052 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5823 02-11 22:29:24.132 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5625 02-11 22:29:29.217 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5883 02-11 22:29:34.254 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 4570 02-11 22:29:48.422 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 682 02-11 22:29:48.425 E/VLC ( 5860): [55af9990/1739] libvlc input: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 6702 ms) 02-11 22:29:48.426 I/MediaCodecLogger( 5860): Flushing: com.android.mediaplayer.HW.video.avc.framerate = 10.749 fps 02-11 22:29:48.427 E/NdkMediaCodec( 5860): sf error code: -38 02-11 22:29:57.445 W/AudioTrack( 5860): releaseBuffer() track 0x54027560 disabled due to previous underrun, restarting 02-11 22:29:57.446 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 408 02-11 22:30:02.486 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5936 02-11 22:30:07.527 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5415 [aac @ 0x55af78f0] channel element 2.3 is not allocated 02-11 22:30:14.573 E/VLC ( 5860): [55a8b440/1739] libvlc demux: libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 1) for PID 0 02-11 22:30:14.573 E/VLC ( 5860): [55a8b440/1739] libvlc demux: libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 1) for PID 66 02-11 22:30:14.927 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 1269 02-11 22:30:14.950 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc Dropping frame 02-11 22:30:18.752 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc Dropping frame 02-11 22:30:18.753 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc Dropping frame 02-11 22:30:18.753 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc Dropping frame 02-11 22:30:19.616 W/AudioTrack( 5860): releaseBuffer() track 0x54027560 disabled due to previous underrun, restarting 02-11 22:30:20.807 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc Dropping frame 02-11 22:30:20.807 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc Dropping frame 02-11 22:30:20.807 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc Dropping frame 02-11 22:30:20.843 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 1987 02-11 22:30:24.182 E/VLC ( 5860): [55a8b440/1739] libvlc demux: libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 10) for PID 0 02-11 22:30:24.182 E/VLC ( 5860): [55a8b440/1739] libvlc demux: libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 10) for PID 66 02-11 22:30:25.926 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 4044 02-11 22:30:30.568 E/VLC ( 5860): [55a8b440/1739] libvlc demux: libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 1) for PID 0 02-11 22:30:30.568 E/VLC ( 5860): [55a8b440/1739] libvlc demux: libdvbpsi error (PSI decoder): TS discontinuity (received 5, expected 1) for PID 66 02-11 22:30:30.969 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc Dropping frame 02-11 22:30:30.969 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc Dropping frame 02-11 22:30:30.969 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc Dropping frame 02-11 22:30:30.988 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 3476 [aac @ 0x55af78f0] Number of bands (59) exceeds limit (42). 02-11 22:30:36.006 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5031 02-11 22:30:41.087 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 4232 02-11 22:30:46.128 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5456 02-11 22:30:51.206 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5466 02-11 22:30:56.285 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5719 02-11 22:31:01.326 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5449 02-11 22:31:06.367 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5147 02-11 22:31:11.448 I/MediaCodecLogger( 5860): com.android.mediaplayer.HW.video.avc.bitrateInKbps = 5501