flv.js icon indicating copy to clipboard operation
flv.js copied to clipboard

flv直播流在chrome下播放,大概率性播放失败

Open cheerful-li opened this issue 7 years ago • 12 comments

我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>flv.js test</title>
</head>
<body>
	<script src="../flvjs/dist/flv.min.js"></script>
<video id="videoElement" width="800"></video>
<script>
    if (flvjs.isSupported()) {
        var videoElement = document.getElementById('videoElement');
        var flvPlayer = flvjs.createPlayer({
            type: 'flv',
            url: 'http://flvdl7524d1f2.live.126.net/live/a27c2e6c29c84112a3552d2ae37c7ae4.flv?netease=flvdl7524d1f2.live.126.net'
        });
        flvPlayer.attachMediaElement(videoElement);
        flvPlayer.load();
        flvPlayer.play();
    }
</script>
</body>
</html>

cheerful-li avatar Jan 03 '17 02:01 cheerful-li

chrome版本: 54.0.2840.59 m 错误信息: 2017-01-03 10:23:43.306 logger.js:99[MSEController] > MediaSource onSourceOpen 2017-01-03 10:23:43.884 logger.js:99 [FLVDemuxer] > Parsed onMetaData 2017-01-03 10:23:43.886 logger.js:99 [FLVDemuxer] > Parsed AVCDecoderConfigurationRecord 2017-01-03 10:23:43.888 logger.js:99 [FLVDemuxer] > Parsed AudioSpecificConfig 2017-01-03 10:23:43.889 logger.js:68 [FLVDemuxer] > Found another AVCDecoderConfigurationRecord!value @ logger.js:68value @ flv-demuxer.js:697value @ flv-demuxer.js:667value @ flv-demuxer.js:651value @ flv-demuxer.js:295value @ transmuxing-controller.js:265value @ io-controller.js:436value @ io-controller.js:527(anonymous function) @ fetch-stream-loader.js:171 2017-01-03 10:23:43.890 logger.js:99 [FLVDemuxer] > Parsed AVCDecoderConfigurationRecord 2017-01-03 10:23:43.890 logger.js:68 [FLVDemuxer] > Found another AudioSpecificConfig!value @ logger.js:68value @ flv-demuxer.js:461value @ flv-demuxer.js:292value @ transmuxing-controller.js:265value @ io-controller.js:436value @ io-controller.js:527(anonymous function) @ fetch-stream-loader.js:171 2017-01-03 10:23:43.890 logger.js:99 [FLVDemuxer] > Parsed AudioSpecificConfig 2017-01-03 10:23:43.891 logger.js:68 [FLVDemuxer] > Found another AVCDecoderConfigurationRecord!value @ logger.js:68value @ flv-demuxer.js:697value @ flv-demuxer.js:667value @ flv-demuxer.js:651value @ flv-demuxer.js:295value @ transmuxing-controller.js:265value @ io-controller.js:436value @ io-controller.js:527(anonymous function) @ fetch-stream-loader.js:171 2017-01-03 10:23:43.891 logger.js:99 [FLVDemuxer] > Parsed AVCDecoderConfigurationRecord 2017-01-03 10:23:43.892 logger.js:68 [FLVDemuxer] > Found another AudioSpecificConfig!value @ logger.js:68value @ flv-demuxer.js:461value @ flv-demuxer.js:292value @ transmuxing-controller.js:265value @ io-controller.js:436value @ io-controller.js:527(anonymous function) @ fetch-stream-loader.js:171 2017-01-03 10:23:43.892 logger.js:99 [FLVDemuxer] > Parsed AudioSpecificConfig 2017-01-03 10:23:43.897 logger.js:99 [MSEController] > Received Initialization Segment, mimeType: video/mp4;codecs=avc1.42c028 2017-01-03 10:23:43.898 logger.js:99 [MSEController] > Received Initialization Segment, mimeType: audio/mp4;codecs=mp4a.40.2 2017-01-03 10:23:43.898 logger.js:99 [MSEController] > Received Initialization Segment, mimeType: video/mp4;codecs=avc1.42c028 2017-01-03 10:23:43.899 logger.js:99 [MSEController] > Received Initialization Segment, mimeType: audio/mp4;codecs=mp4a.40.2 2017-01-03 10:23:43.899 logger.js:99 [MSEController] > Received Initialization Segment, mimeType: video/mp4;codecs=avc1.42c028 2017-01-03 10:23:43.899 logger.js:99 [MSEController] > Received Initialization Segment, mimeType: audio/mp4;codecs=mp4a.40.2 2017-01-03 10:23:43.903 logger.js:32 [MSEController] > SourceBuffer Error: [object Event]value @ logger.js:32value @ mse-controller.js:406 2017-01-03 10:23:43.903 logger.js:32 [MSEController] > SourceBuffer Error: [object Event]value @ logger.js:32value @ mse-controller.js:406 2017-01-03 10:23:43.903 logger.js:99 [MSEController] > MediaSource onSourceEnded 2017-01-03 10:23:43.908 originFlv.js.test.html:1 Uncaught (in promise) DOMException: The play() request was interrupted by a call to pause(). 2017-01-03 10:23:45.726 logger.js:32 [MSEController] > Failed to execute 'appendBuffer' on 'SourceBuffer': The HTMLMediaElement.error attribute is not null.value @ logger.js:32value @ mse-controller.js:343value @ mse-controller.js:206(anonymous function) @ flv-player.js:215i.emit @ events.js:84(anonymous function) @ transmuxer.js:145 2017-01-03 10:23:45.727 logger.js:32 [MSEController] > Failed to execute 'appendBuffer' on 'SourceBuffer': The HTMLMediaElement.error attribute is not null.value @ logger.js:32value @ mse-controller.js:343value @ mse-controller.js:206(anonymous function) @ flv-player.js:215i.emit @ events.js:84(anonymous function) @ transmuxer.js:145 2017-01-03 10:23:45.727 events.js:62 Uncaught (in promise) Error: Uncaught, unspecified "error" event. (MediaError)(…)i.emit @ events.js:62(anonymous function) @ flv-player.js:151i.emit @ events.js:81value @ mse-controller.js:344value @ mse-controller.js:206(anonymous function) @ flv-player.js:215i.emit @ events.js:84(anonymous function) @ transmuxer.js:145 2017-01-03 10:23:45.728 events.js:62 Uncaught (in promise) Error: Uncaught, unspecified "error" event. (MediaError)(…)i.emit @ events.js:62(anonymous function) @ flv-player.js:151i.emit @ events.js:81value @ mse-controller.js:344value @ mse-controller.js:206(anonymous function) @ flv-player.js:215i.emit @ events.js:84(anonymous function) @ transmuxer.js:145 2017-01-03 10:23:46.581 logger.js:32 [MSEController] > Failed to execute 'appendBuffer' on 'SourceBuffer': The HTMLMediaElement.error attribute is not null.value @ logger.js:32value @ mse-controller.js:343value @ mse-controller.js:206(anonymous function) @ flv-player.js:215i.emit @ events.js:84(anonymous function) @ transmuxer.js:145 2017-01-03 10:23:46.581 logger.js:32 [MSEController] > Failed to execute 'appendBuffer' on 'SourceBuffer': The HTMLMediaElement.error attribute is not null.

cheerful-li avatar Jan 03 '17 02:01 cheerful-li

在firefox下播放不会出现播放报错的情况。

麻烦大神帮忙看下,希望咱们的flv.js越来越强大。

cheerful-li avatar Jan 03 '17 02:01 cheerful-li

这么久都不没人理么。。。

心塞塞的

cheerful-li avatar Jan 12 '17 06:01 cheerful-li

看看 chrome://media-internals 里的 logcat 和报错描述

xqq avatar Jan 23 '17 13:01 xqq

@cheerful-li @xqq load() 和 play() 那 2 句改成

flvPlayer.load();
setTimeout(function() { flvPlayer.play(); }, 100);  //100 改成 0 我试过也可以

可能是新版 chrome 的一些 load 的操作有异步成分,造成没有操作完毕就直接 play 了,而在 firefox 就没这种情况。

djx314 avatar Apr 12 '17 16:04 djx314

噢,补充一下,原因应该是 load 的时候运行了 pause() 然后又在几行代码这个级别的时间内运行了 play() 导致 chrome 直接报错,只要把 play() 改成异步使得这 2 个操作不是立刻连续发生就行了。@xqq 个人觉得应该有修复的空间。

djx314 avatar May 22 '17 11:05 djx314

你应该在收到 video 的 loadedmetadata 或者 canplay 事件后才 play video.addEventListener(event, listener);

xqq avatar May 22 '17 11:05 xqq

@xqq 是否有必要修改文档来回避这个错误?

djx314 avatar May 23 '17 00:05 djx314

我这边调用flvplayer的load函数,不做任何play动作,依然在控制台上看到Found another AVCDecoderConfigurationRecord!

yunnysunny avatar Nov 22 '18 14:11 yunnysunny

@cheerful-li 请问您的问题解决了么,我也是同样的问题呢

dbb1215 avatar Jul 31 '19 08:07 dbb1215

@xqq请问一下我在使用了video.addEventListener(event, listener);video 的 loadedmetadata 或者 canplay 事件后才 play还是有概率出现Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.有解决的办法吗?现在播放有机率出现不会自动播放的情况

htx-github avatar Mar 02 '20 04:03 htx-github

@xqq请问一下我在使用了video.addEventListener(event, listener);video 的 loadedmetadata 或者 canplay 事件后才 play还是有概率出现Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.有解决的办法吗?现在播放有机率出现不会自动播放的情况

这个是浏览器安全限制问题,页面有交互再播放就行

zhupp034 avatar Mar 02 '22 08:03 zhupp034