And we know that IE doesn't display the webcam image inline using OctoPrint's
<img src="" /> technique, right?
"... but teach a man how to fish and you feed him for life."
Searching the repository itself for webcamStream we see things in the jinja2 space which are surrounded by double french braces. I believe this means—in KnockoutJS terms—that this is then run within the Python engine before rendering so as to resolve those variables or function calls into their true value. Clicking the filter for just Python files on the left, this then leaves us just with /src/server/views.py which is presumably the Python code which populates the ViewModel for OctoPrint or perhaps just the server subset of that. Around line 357:
...we see that this is punched into the ViewModel from running that Python code. It begins with an instance of
settings() which puts this in the realm of what's in the
~/.octoprint/config.yaml file. That "getter" function accepts what appears to be a "path tuple", it would seem.
Reading my own config.yaml file and running to the bottom of that since it's alphabetically-sorted:
So that path tuple from earlier is merely pulling the value of "/webcam/?action=stream" in my case. If instead, there is no
stream variable in the yaml file or it's empty then it could behave like you've described since that might seem "false-y" as we say in coding terms.
So, visit your
Settings -> Webcam & Timelapse page within OctoPrint and make sure that you have something actually in that field. But you've already indicated that you pressed the Test button and this works. So that means that your yaml file has this section already, the
webcamStream value is being punched into the ViewModel and the jinja2 code should have this, then.