小编jan*_*nce的帖子

使用html5在浏览器中可视化mjpeg-over-http流

好吧,我有一台服务器通过http 提供运动jpeg流.我希望能够做的是连接到服务器并在浏览器中可视化流,最好是在canvas元素内部.浏览器应该是Safari Mobile.

是否可以使用XMLHttpRequest获取流,将单个JPEG图像取出并将它们放在canvas元素中?请记住,流是活的,因此可能是无穷无尽的.

html5 jpeg canvas mobile-safari mjpeg

4
推荐指数
1
解决办法
8303
查看次数

如何从云功能调用其他Cloud Firebase功能

假设我有一个 Cloud Firebase函数 -由cron作业调用-每次调用时都会产生30多个任务。

这些任务很慢(平均每个任务5-6秒),我无法直接在原始任务中处理它们,因为它会超时。

因此,该解决方案将是为每个任务调用另一个“工作者”功能,以独立完成任务并将结果写入数据库中。到目前为止,我可以想到三种策略:

  1. Pubsub消息。那真是太神奇了,但是似乎您只能从Cloud Function中监听pubsub消息,而不能创建一个。对我来说,诉诸外部解决方案(例如拥有GAE实例)不是一种选择。

  2. 从第一个调用工作者通过http触发的Firebase Cloud Function。我认为那是行不通的,因为我需要等待所有被调用的工作函数在完成和之后的响应send,并且我的原始函数会超时。

  3. 将任务追加到实时数据库列表中,然后具有由每次数据库更改触发的辅助函数。之后,工作人员必须从队列中删除任务。那可能会起作用,但是感觉到有很多活动部件可以解决一个简单的问题。例如,如果工人扔了怎么办?需要另一个cron来“清理”数据库,等等。

我想到的另一个解决方案是firebase-queue,但其自述文件明确指出:

“ Firebase队列可能还会有特定的用例,但是,如果您正在寻找通用的,可扩展的Firebase排队系统,那么在Google Cloud Functions for Firebase之上构建是理想的选择。”

它没有得到官方的支持,他们实际上是在说我们应该改用Function(这是我正在尝试的方法)。我对在产品库中使用可能会在明天(如果尚未废弃)的库有点担心,并希望避免沿这条路线走。

firebase google-cloud-platform google-cloud-pubsub firebase-realtime-database google-cloud-functions

4
推荐指数
1
解决办法
1534
查看次数

Linux 上的 pthread 条件变量,奇怪的行为

我正在 Linux 上同步读取器和写入器进程。

我有 0 个或多个进程(读者)需要休眠,直到被唤醒、读取资源、重新休眠等等。请注意,我不知道任何时候有多少读取器进程正在运行。我有一个进程(写入者)在资源上写入,唤醒读者并做它的业务,直到另一个资源准备好(详细地说,我开发了一个没有饥饿的读写器解决方案,但这并不重要)。

为了实现睡眠/唤醒机制,我使用了 Posix 条件值 pthread_cond_t。客户端调用变量上的 pthread_cond_wait() 来休眠,而服务器执行 pthread_cond_broadcast() 来唤醒它们。正如手册所说,我用相关 pthread 互斥锁的锁定/解锁来包围这两个调用。

条件变量和互斥锁在服务器中初始化并通过共享内存区域在进程之间共享(因为我不是在使用线程,而是使用单独的进程)我确定我的内核/系统调用支持它(因为我检查了_POSIX_THREAD_PROCESS_SHARED)。

发生的情况是第一个客户端进程完美地休眠和唤醒。当我启动第二个进程时,它会阻塞其 pthread_cond_wait() 并且永远不会唤醒,即使我确定(通过日志)调用了 pthread_cond_broadcast() 也是如此。

如果我杀死第一个进程,然后启动另一个进程,它可以完美运行。换句话说,条件变量 pthread_cond_broadcast() 似乎一次只唤醒一个进程。如果多个进程等待相同的共享条件变量,则只有第一个进程能够正确唤醒,而其他进程似乎忽略了广播。

为什么会有这种行为?如果我发送一个 pthread_cond_broadcast(),每个等待的进程都应该被唤醒,而不仅仅是一个(但是,并不总是同一个)。

linux api synchronization pthreads

3
推荐指数
2
解决办法
4933
查看次数

在div中水平对齐html5音频元素

我有这个简单的div:

#div-2 {
    margin-left: auto;
    margin-right: auto;
}
Run Code Online (Sandbox Code Playgroud)

和我页面正文中的html5音频元素:

<div ID="div-2">
        <audio id="a1" src="../../audio/sound_files/mystuff.ogg"></audio>
</div>
Run Code Online (Sandbox Code Playgroud)

我希望音频元素(即显示给用户的音频控件)在div中水平居中.请注意我无法为音频控件或音频元素指定宽度属性(我尝试过,什么也没做),作为一般规则,我不知道浏览器之间的音频控件宽度(以像素为单位)(所以我可以不要调整div中的width属性.

有没有办法在CSS中或者在Javascript中执行此操作?如果有人能够将我指向网络上的相关资源,那将是一个奖励.

javascript css html5 html5-audio

3
推荐指数
1
解决办法
1万
查看次数

杰克的"32位浮动单声道音频"

我和杰克一起玩,我注意到默认音频类型JACK_DEFAULT_AUDIO_TYPE设置为"32位浮点单声道音频".

我有点困惑:IEEE定义32位C浮点范围大约从3.4E-38到3.4E + 38,我想知道jack_default_audio_sample_t该音频类型可以容纳的最大和最小"未失真"幅度是多少.例如,如果某些DSP算法给出了[0,1]范围内的样本,我怎样才能正确地在它们和Jack的格式之间进行转换?

c audio signal-processing jack

3
推荐指数
1
解决办法
1221
查看次数

git:签出一个标签,修改一些东西,然后重新标记

我觉得我应该知道这一点,但我感到很困惑.

我在github上分叉了一个存储库.我需要的是签出一个标签(称为"v1.0.5"),修改文件上的语句,用一个名为"1.0.5"的新标签(没有"v")重新标记该状态,然后执行同样的改变掌握.

让我更清楚一点.我正在将EightMedia的Hammer.js从命名的AMD模块改为匿名模块.

我必须改变的唯一文件是src/outro.js.该文件不会从标记v1.0.5 更改为HEAD.

我想改变

// requireJS module definition
if(typeof window.define === 'function' && window.define.amd) {
    window.define('hammer', [], function() {
        return Hammer;
    });
}
Run Code Online (Sandbox Code Playgroud)

// requireJS module definition
if(typeof window.define === 'function' && window.define.amd) {
    window.define(function() {
        return Hammer;
    });
}
Run Code Online (Sandbox Code Playgroud)

我想要的是:checkout v1.0.5,更改该文件,并以我拥有1.0.5包含v1.0.5 的确切内容的标记以及更改的方式推送repo .必须将标签推送到远程.

然后,checkout master,再次更改文件并再次将其推送到master.

结帐时v1.0.5我很失落,而且我处于分离的HEAD状态.提交后,我在哪里推动修改?我如何标记它们并将标签推送到远程?

tags git github

3
推荐指数
2
解决办法
3607
查看次数

image.Onload无法完成图像

这真让我抓狂.

我需要在Javascript中加载一组图像,但我想确保在开始绘制之前加载所有图像.所以,我忙 - 等待每个图像onLoad事件被调用.首先,我创建图像并设置它们的源和onload函数:

// Load images from names
for (i = 0; i < this.nImages; i++) {
    this.imagesArray[i] = new Image();
    this.imagesArray[i].onload = this.onLoad(i);
    this.imagesArray[i].src = images[i];
}
Run Code Online (Sandbox Code Playgroud)

这是onLoad函数,我正在开发的类的成员(前两个步骤在构造函数中):

MyClass.prototype.onLoad = function (nimage) {
    console.log ("Image completed? ", nimage, " ", this.imagesArray[nimage].complete);
    this.imagesLoaded++;
Run Code Online (Sandbox Code Playgroud)

}

然后我忙等待所有的onLoad函数来递增计数器(再次,在构造函数中):

while (this.imagesLoaded < this.nImages) {
    // This is busy wait, and I don't like it.
    continue;
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是当我尝试用我的drawClass在HTMl5画布上绘制时:

MyClass.prototype.refresh = function () {

    // Gets one of the images in the range    
    var imageNum …
Run Code Online (Sandbox Code Playgroud)

javascript canvas image javascript-events

2
推荐指数
1
解决办法
4318
查看次数

测试一个操纵DOM的angularjs指令

我是Karma的初学者,如果这是一个愚蠢的问题,请原谅我.

我正在测试我的一个dirctive,这是两种特殊的方式:

1 - 它根据范围内容有条件地更改模板,并重新编译链接器中的指令元素

var linker = function(scope, element, attrs) {
//...

var getTemplate = function(contentType) {
            var template = '';

            switch(contentType) {
            case 'canvas':
                template = '<div> stuff here </div>';
                break;
            case 'div':
                template = '<div> other stuff here </div>';
                break;
                //...
             }

            return template;
        };

var html = getTemplate(scope.content.uiType);
            var ae = angular.element(html);

            element.replaceWith(ae);
            $compile(ae)(scope);

}
Run Code Online (Sandbox Code Playgroud)

2 - 它在链接器中使用jsplumb来指示指令元素并设置一些jsplumb端点:

// Inside the linker function

var outEndPoint = jsPlumb.addEndpoint (ae, { /* parameters */ }, AudioOutPoint);
Run Code Online (Sandbox Code Playgroud)

调用jsPlumb.addEndpoint时会出现问题.调试库,似乎在某个时刻,jsPlumb使用jQuery返回一个元素 - …

jquery angularjs angularjs-directive karma-runner

2
推荐指数
1
解决办法
4872
查看次数

使用MongoDB升级文档,递增字段并将其设置为0(如果不存在)

我在node.js中使用MongoDB

我想要的是在一个集合中插入一个文档.该文档具有唯一的ID,lastAccess字段,用于存储上次访问的日期,以及timesAccessed字段,在创建文档时应设置为0,如果更新则应增加1.

我试过了:

// coll is a valid collection
coll.update(
    {user: accountInfo.uid},
    {user: accountInfo.uid,
     lastAccess: new Date(),
     $inc: {timesAccessed: 1},
     $setOnInsert: {timesAccessed: 0}
    },
    {upsert: true, w: 1},
    function(err, result) {
        if (err) throw err;
        console.log("Record upserted as " + result);
    });
Run Code Online (Sandbox Code Playgroud)

但节点说:

MongoError: Modifiers and non-modifiers cannot be mixed
Run Code Online (Sandbox Code Playgroud)

什么是巧妙和安全的方法来做到这一点?

mongodb node.js node-mongodb-native

2
推荐指数
1
解决办法
3337
查看次数

Firebase 规则:使用父值进行验证?

我有这一套规则:

{
  "rules": {
    "facebook_users": {
      "$user": {
        ".read": "$user == auth.id",
        ".write": "$user == auth.id",
        "userData": {
          "maxProjects": {
            ".validate": false
          },
        "userProjects": {
            ".validate": ???
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想让用户无法将子项添加到userProjects数组 if userProjects.length > userData.maxProjects。由于".validate": false规则,用户已经被拒绝写入 maxProjects 。如何将 userProjects 的长度与 maxProjects 进行比较?

如果不可能,那么正确的方法是什么?

firebase firebase-security

2
推荐指数
1
解决办法
1885
查看次数