我已经在websocket上编写了一些代码流视频,因此sourcebuffer可以在Chrome和Edge中使用.
但是,当我在Firefox中运行时,视频永远不会播放,只显示旋转轮动画.当我检查<video>统计信息时,它读HAVE_METADATA作就绪状态和NETWORK_LOADING网络状态.
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<video controls></video>
<script>
var mime = 'video/mp4; codecs="avc1.4D401E,mp4a.40.2"';
var address = 'ws://localhost:54132'
/* Media Source */
var source = new MediaSource();
var video = document.querySelector('video');
video.src = URL.createObjectURL(source);
source.addEventListener('sourceopen', sourceOpen);
/* Buffer */
var buffer;
var socket;
var queue = [];
var offset = -1;
var timescale;
// When the media source opens:
function sourceOpen() {
buffer = source.addSourceBuffer(mime);
buffer.addEventListener('updateend', processQueue); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个包含一组自定义JavaFX组件的相当大的项目.对于每个要重用的自定义组件,我已经开始使用JemmyFX和JUnit编写一组自动化测试.在开发过程中,我从Eclipse Juno中运行它们.
一次运行整套测试已经证明是困难的.这个问题似乎源于这个事实,因为我想测试多个组件,理想情况下我会为每个组件运行一个不同的应用程序(这样在一个组件上执行的测试不会影响其他测试).
我创建了一个基类,它执行以下操作:
@BeforeClass
public static void beforeClass() {
Thread t = new Thread("JavaFX Init Thread") {
@Override
public void run() {
Application.launch(UITester.class, new String[0]);
}
};
t.setDaemon(true);
t.start();
}
使用这个基类,我创建了一个单独的类,其中@Test包含每个自定义控件的测试.当我运行这个测试套件时,第一个测试用例运行正常,但其余测试用例失败:
Exception in thread "JavaFX Init Thread" java.lang.IllegalStateException: Application launch must not be called more than once
我尝试了以下方法来解决此问题:
我在基类中添加了以下内容:
@AfterClass
public static void afterClass() {
Platform.exit();
}
同样的问题仍然存在.也许是因为VM没有在测试之间重启?
我输入一个静态变量来检查并查看应用程序是否已在运行.当我从Eclipse运行测试时,这会使问题消失.当我从命令行运行它们时,问题仍然存在.当我们尝试在集成服务器上运行这些测试时,这不太好.
这是一个奇怪的.我可以捕获异常,并且我的大多数问题都消失了,除了整个测试套件Ubuntu的每4或5次运行崩溃到shell并且我必须重新登录的事实.
那么,我如何最好地为大量自定义控件编写测试?我的方法不正确吗?
我正在检查核心转储,并注意到在一帧中的“this”指针与下一帧(在同一线程中)不同。不仅仅是有点不同,它从 0x8167428 变为 0x200。
我不太熟悉使用 GDB,但这对我来说似乎不正确。这是否有问题,如果有,可能是什么原因?