Do more on the web, with a fast and secure browser!

Download Opera browser with:

  • built-in ad blocker
  • battery saver
  • free VPN
Download Opera

Opera sometimes does not play WebRTC video encoded in H.264

  • I have a media server which translates some videos encoded in H.264 to browsers via WebRTC. I tested various browsers (Firefox, Chrome, Opera, Edge) in various operating systems (Windows, Linux) and everything works fine in most cases, except for the case when Opera is run on a Windows 7/10 virtual machine in VMware. Opera receives the video stream but can't decode it for some reason.

    I turned on WebRTC debug logs in Opera and got the following:

    [2184:2312:1211/141911.062:INFO:decoder_database.cc(144)] Initializing decoder with payload type '102'.
    [2184:2312:1211/141911.062:ERROR:h264_decoder_impl.cc(210)] FFmpeg H.264 decoder not found.
    [2184:2312:1211/141911.062:INFO:generic_decoder.cc(216)] Decoder implementation: FFmpeg
    [2184:2312:1211/141911.062:ERROR:decoder_database.cc(178)] Failed to initialize decoder. Error code: -1
    

    When I run Opera on Windows 10 outside of any virtual machines, video plays successfully and I see in logs:

    [6132:16856:1211/151144.100:INFO:decoder_database.cc(144)] Initializing decoder with payload type '102'.
    [6132:16856:1211/151144.100:INFO:generic_decoder.cc(216)] Decoder implementation: ExternalDecoder
    

    So I have two questions:

    1. How is that possible that FFmpeg is unable to initialize H.264 decoder?
    2. Why does Opera use different decoder implementations in different cases - FFmpeg decoder in the first case and some ExternalDecoder in the second case? What does this choise depend on? What does "ExternalDecoder" exactly mean?

    I tried to solve this issue with no luck so far. I tried to do the following:

    • Uninstalled Opera and installed it again from scratch.
    • Tweaked various command line options containing "webrtc" in their names.
    • Disabled hardware acceleration in Opera settings.
    • Compared the list of video codecs installed in the non-working system with the codec list in a working system: they are the same!
    • Installed K-Lite codec pack.
    • Tried to play the same WebRTC video stream in different browsers using the same web client in the same system. Chrome and Firefox play video fine! Only Opera doesn't.
    • Tried to use a third party software for testing purposes: Unreal Media Server and its WebRTC player for browsers. I got the same results. WebRTC player works fine in Chrome and Firefox but doesn't play video in Opera.

    Is there anything else I could try? Is there a bug in Opera? Or maybe VMware is to blame?

    Opera 73.0.3856.260 (x64 for Windows)
    Windows x64 Pro (Install date 16.10.2020)

  • Real Windows has its own decoder (usually) and Opera uses that when available. I say "usually" because early versions of 7 and Windows 10 N do not.