从Firefox 49开始,IP摄像机的MJPEG流使用内部服务冻结第一帧。这在Chrome中不会发生。我找不到可能导致此错误的FF 49更改日志中的任何更改。请记住,这段代码不是我的,并且非常古老,但它仍然可以在Chrome中正常工作。代码 件我认为可能会导致错误:自从Firefox 49开始,MJPEG流在第一帧冻结49
CameraplayerUI.js
self.drawStream = function (image) {
//#region Argument validation and sanitization
if (typeof image === "undefined" || image === null) { return false; }
if (typeof image.src === "undefined" || image.src === null) { return false; }
if (!image.complete) { return false; }
if (_stream.width !== image.width) { _stream.width = image.width; }
if (_stream.height !== image.height) { _stream.height = image.height; }
//#region Argument validation and sanitization
if(_isLive !== true){
_isLive = true;
$(_image).hide();
$(_stream).show();
}
_ctx.drawImage(image, 0, 0, _stream.width, _stream.height);
self.source = image.src;
return true;
/** Mjpegstream.js
* Updates the current stream based on the elapsed time since last update.
* Warning: Numeric representations for all parameters are used without validation for
* performance considerations.
*
* @param {Integer} time - Current time}
* @param {Integer} elapsedTime - Elapsed time since last update cycle.
*/
this.update = function (time, elapsedTime) {
if (!self.isOpen) { return false; }
//#region Argument validation and sanitization
time = +time; // Unary plus operation. Numeric representation.
elapsedTime = +elapsedTime; // Unary plus operation. Numeric representation.
//#endregion Argument validation and sanitization
_serviceReauthenticationTimer = _serviceReauthenticationTimer - elapsedTime;
if (_serviceReauthenticationTimer <= 0) {
downloadAsync(_userId, _userKey, this.cameraId, update_callback);
}
// Firefox MJPEG stream fix.
if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) {
if (this.data !== "undefined" && this.data !== null) {
self.data.src = _stream.src;
}
}
return true;
};
Cameraplayer.js
if (self.isLive) {
_time = now;
ui.setTime(_time);
if (!_mjpegStream.isAuthenticated) {
ui.showAuthenticationNotification(false, _mjpegStream.error);
self.hasError = true;
} else if (_mjpegStream.error !== null) {
ui.showError(true, _mjpegStream.error);
self.hasError = true;
} else if (_mjpegStream.isOpen) {
ui.clearNotifications();
if (_mjpegStream.isPlaying) {
if (_mjpegStream.update(_time, elapsedTime)) {
ui.drawStream(_mjpegStream.data);
}
} else {
_mjpegStream.play();
}
} else if (_mjpegStream.isConnecting) {
ui.showLoading(true);
return false;
} else {
ui.showLoading(true);
_mjpegStream.open(_request);
return false;
}
} else {
_time = time;
记住这个节目是巨大的,我只是把我认为可能会导致错误的片段。它适用于49之前的所有Firefox版本,当前在Chrome上。