Forum Discussion
RaptorMatt
2 years agoExpert Protege
H.264 Video is unstable on Quest 3 (black screen/freezing) - No issue on Quest 2
Hello! Our team has been developing a 360 video-based app for Quest (using Unity game engine). After getting Quest 3 headsets, we've discovered evidence that video playback is unstable on the Quest 3, when we had no issues on the Quest 2 with the same APK build.
Specifically, the H.264 codec is not stable on the Quest 3 and we are having issues with the video either turning black when paused (via AVPro Exoplayer Unity plugin), or not being able to resume playing after being paused (via the built-in Unity video player or Meta Quest TV app). The H.265 codec appears to work just fine, however we aren't always able to use this format and we want H.264 to work. The issues for H.264 are present both in our Unity app and also in the Meta Quest TV app, indicating this is a hardware/OS-level issue with the decoder for H.264 video only on Quest 3, and not on Quest 2. I have been able to prove this via Android Logcat error messages I have captured while playing video (see below).
Below are my observations when testing video playback on the Meta Quest TV app, Unity via AVPro, and Unity via the built-in Unity video player. The below is consistent when using either 8k (7680x3840) or 5.7k (5760x2880) 2D (equirectangular) 360 video at 29.97 fps. MetaStoreHelp or Ryanality could you please pass this important information along to the appropriate engineering teams?
*NOTE: I am unable to post the full information in this post because my post gets marked as spam if I do, presumably due to the long length of my post. As a workaround, I have posted the information over on the AVPro Github. Please see here for all of the full information, including Android Logcat error messages: https://github.com/RenderHeads/UnityPlugin-AVProVideo/issues/1660#issuecomment-1762244929
15 Replies
- RaptorMattExpert Protege
It appears that the forums spam filter is still blocking long posts even when using the code block option. I will attempt to post the information via multiple posts:
Meta Quest TV Quest 3: H.264 - After pausing video, waiting at least 5 seconds, then selecting the play button again, the video freezes on the paused frame and does not resume playing. Audio does play, but the video remains frozen. H.265 - No issues. Quest 2: H.264 - No issues. H.265 - No issues. Unity - AVPro Plugin (Exoplayer) Quest 3: H.264 - After pausing video, the video turns completely black after about 5 seconds. Expected behavior is of course to hold the paused frame, but the video blacks out after 5 seconds. When playing the video again, the black screen does go away and the video carries on playing. H.265 - No issues. Quest 2: H.264 - No issues. H.265 - No issues. Unity - Unity's Built-In Video Player Quest 3: H.264 - After pausing the video, waiting at least 5 seconds, then selecting the play button again, the video shows the next couple of frames for a split second and then freezes completely. Audio also does not resume playing. H.265 - No issues. Quest 2: H.264 - No issues. H.265 - No issues. As you can see above, the issues are isolated to H.264 codec video playback on the Quest 3. - RaptorMattExpert Protege
Android Logcat messages (Quest 3, H.264 video playback):
Meta Quest TV: [VideoDirectDecoder] unexpected video info code: -10000 [NdkMediaCodec] sf error code: -38 [VideoSession] 1697223336118080000 - state check failed: playing --> ready [CCodecBufferChannel] [c2.android.aac.decoder#221] MediaCodec discarded an unknown buffer - RaptorMattExpert Protege
Unity - AVPro Plugin (Exoplayer): [MediaCodecVideoRenderer] Video codec error [MediaCodecVideoRenderer] android.media.MediaCodec$CodecException: Error 0x80000000 [MediaCodecUtil] Unknown AVC level: 60 [ExoPlayerImplInternal] Playback error [ExoPlayerImplInternal] com.google.android.explr2avp.ExoPlaybackException: MediaCodecVideoRenderer error, index=0, format=Format(1, null, null, video/avc, avc1.4D403C, -1, null, [7680, 3840, 29.970032, ColorInfo(BT709, Limited range, SDR SMPTE 170M, false)], [-1, -1]), format_supported=YES - RaptorMattExpert Protege
[ExoPlayerImpInternal] Caused by: com.google.android.exoplr2avp.video.MediaCodecVideoDecoderException: Decoder failed: c2.qti.avc.decoder [ExoPlayerImpInternal] Caused by: android.media.MediaCodec$CodecException: Error 0x80000000 [MediaCodec] mapFormat: no mediaType information - RaptorMattExpert Protege
[Codec2Client] query -- param skipped: index = 1107298332 [CCodecConfig] query failed after returning 19 values (BAD_INDEX) [MediaCodec] flushMediametrics [AVProVideo] Changing video size 5760x2880 to 0x0 [CCodecBufferChannel] MediaCodec discarded an unknown buffer - RaptorMattExpert Protege
[System.out] AVProVideo error MediaCodecVideoRenderer error, index=0, format=Format(1, null, null, video/avc, avc1.4D403C, -1, null, [5760, 2880, 29.970032, ColorInfo(BT709, Limited range, SDR SMPTE 170M, false)], [-1, -1]), format_supported=YES [MediaMetricsManagerService] failed to get player_metrics_app_blocklist from DeviceConfig - RaptorMattExpert Protege
Unity - Unity's Built-In Video Player [CCodec] [c2.qti.avc.decoder] previous call to queue exceeded timeout [MediaCodec] Codec reported error 0x80000000, actionCode 0, while in state 6/started [MediaCodec] flushMediaMetrics [QC2Comp] [avcD_24] Stats: Pending(10) i/p-done(6) Works: Q: 175/Done 166|Work-Rate: Q(0.0/s Avg=17.4/s) Done(0.000/s Avg=16.485/s)| Stream: 29.97fps 17.3Mbps - RaptorMattExpert Protege
[mediametrics::Item] selfrecord: failed to record: {codec, (12-31 18:00:00.000), (, -1, -1), (android.media.mediacodec.codec=c2.qti.avc.decoder, android.media.mediacodec.encoder=0, android.media.mediacodec.errcode=-2147483648, android.media.mediacodec.errstate=STARTED, android.media.mediacodec.height=3840, android.media.mediacodec.latency.avg=683468, android.media.mediacodec.latency.max=779014, android.media.mediacodec.latency.min=231505, android.media.mediacodec.latency.n=44, android.media.mediacodec.latency.unknown=108, android.media.mediacodec.level=131072, android.media.mediacodec.lifetimeMs=10055, android.media.mediacodec.log-session-id=, android.media.mediacodec.low-latency.first-frame=-1, android.media.mediacodec.low-latency.off=0, android.media.mediacodec.low-latency.on=0, android.media.mediacodec.mime=video/avc, android.media.mediacodec.mode=video, android.media.mediacodec.profile=2, android.media.mediacodec.rotation-degrees=0, android.media.mediacodec.width=7680)} - RaptorMattExpert Protege
[SurfaceUtils] disconnecting from surface 0xb4000073e9b73010, reason disconnectFromSurface [QC2Comp] Mem-usage: [In-1D: 4 bufs 50.625 MB] [1D-29: 16 bufs 0.250 MB] [2D-30: 16 bufs 677.812 MB] | Total: 728.688 MB [QC2Comp] [avcD_24][RUNNING] comp.release() is called without comp.stop() [CCodecBufferChannel] [c2.qti.avc.decoder#208] MediaCodec discarded an unknown buffer [BufferQueueProducer] SurfaceTexture-183-6851-0 cancelBuffer: BufferQueue has no connected producer [NdkMediaCodec] sf error code: -38 [Unity] AndroidVideoMedia::Flush CodecFlush error: -10000 - RaptorMattExpert Protege
Phew, ok... I think I managed to get past the forum's spam filter and post all of the info via multiple posts.
MetaStoreHelpRyanalitycould you please confirm that this information has been seen and passed along to Meta engineers? This should be very helpful for them to track down the H.264 video decoding errors/bugs that are currently present on the Quest 3!
Quick Links
- Horizon Developer Support
- Quest User Forums
- Troubleshooting Forum for problems with a game or app
- Quest Support for problems with your device
Other Meta Support
Related Content
- 1 month ago
- 1 month ago
- 5 months ago
- 6 months ago