问题
I get the warning that a function will be deprecated in Chrome future release.
It's this script:
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;
if (navigator.getUserMedia) {
navigator.getUserMedia({
video: true
}, (stream) => {
this.src = window.URL.createObjectURL(stream);
this.stream = stream;
}, (error) => {
console.log(error);
});
}
That records webcam so I can save it, but the following warning is shown in the console:
[Deprecation] URL.createObjectURL with media streams is deprecated and will be removed in M68, around July 2018. Please use HTMLMediaElement.srcObject instead.
But when I change:
this.src = window.URL.createObjectURL(stream);
To
this.src = window.HTMLMediaElement.srcObject(stream);
It doesn't work anymore like it did before..
回答1:
Your misunderstanding what HTMLMediaElement is.
It is the JavaScript Class/Prototype that represents a HTML <audio> or <video> tag whether it's in the HTML or not.
For a more class like explanation
<audio> on the page is an object of type HTMLAudioElement and that extends HTMLMediaElement and that in turn extends HTMLElement.
If you get the media element with querySelector() or getElementById() or create a media element in JavaScript with createElement("audio") or createElement("video")
you'll get an instance of HTMLMediaElement.
In your case this is an object of HTMLMediaElement class.
With JavaScript, as a rule of thumb if the object type name starts with HTML it is referring to an HTML Element / Tag.
All you need to do is change
this.src = window.URL.createObjectURL(stream);
to
try {
this.srcObject = stream;
} catch (error) {
this.src = window.URL.createObjectURL(stream);
}
This is taken from Mozilla Documentation
You can read more about how this change should be used, and where this answer takes knowledge from: https://www.fxsitecompat.com/en-CA/docs/2017/url-createobjecturl-stream-has-been-deprecated/
回答2:
Replacing this.src = window.URL.createObjectURL(stream); by this.srcObject = stream; should fix the problem.
回答3:
If you are using Chrome you can use:
video.srcObject = stream;
instead of:
this.srcObject = stream;
来源:https://stackoverflow.com/questions/51101408/deprecation-of-createobjecturl-and-replace-with-the-new-htmlmediaelement-srcobje