小编Rus*_*nas的帖子

如何在phonegap应用程序中传输音频

我正在尝试在我正在创建的phonegap应用程序中实现音频调用.我正在使用PeerJS让2个客户端连接.这部分正在运作.但问题在于为媒体流创建的URL.它看起来像这样:

<audio src="blob:file%3A///6212fd77-7d1e-46ba-9abe-cfe96d414b28"></audio>
Run Code Online (Sandbox Code Playgroud)

而不是像:

<audio src="blob:http%3A///url-to-server.com/6212fd77-7d1e-46ba-9abe-cfe96d414b28"></audio>
Run Code Online (Sandbox Code Playgroud)

这就是为什么两台设备都没有听到任何消息(我正在使用genymotion和我的智能手机进行测试).

但奇怪的是,当我在浏览器和手机中进行测试时,它可以正常工作.当我在笔记本电脑中使用内置麦克风讲话时,我会在手机上听到它.但是当我用手机说话时,笔记本电脑上没有任何声音.

作为参考,当我选择播放媒体流的音频元素时,这就是我所得到的:

<audio src="blob:http%3A//localhost%3A8100/861180b2-2c12-4134-a6da-89fcb40ef372"></audio>
Run Code Online (Sandbox Code Playgroud)

不确定这是否真的是问题.

我正在使用离子来开发应用程序,它可以与crosswalk顺利集成,基本上只是将最近的Chrome浏览器与你的应用程序打包在一起,这样它就可以毫无问题地使用闪亮的新东西.

这是请求麦克风的代码:

function getAudio(successCallback, errorCallback){
    navigator.getUserMedia({
        audio: true,
        video: false
    }, successCallback, errorCallback);
}
Run Code Online (Sandbox Code Playgroud)

然后每当有人发起呼叫时我都会打电话:

getAudio(
    function(MediaStream){

        console.log('now calling ' + to);
        var call = peer.call(to, MediaStream);
        call.on('stream', onReceiveStream);
});
Run Code Online (Sandbox Code Playgroud)

然后onReceiveStream将媒体流转换为URL,然后将其分配给音频元素:

function onReceiveStream(stream){
    var audio = document.querySelector('audio');
    audio.src = window.URL.createObjectURL(stream);
    audio.onloadedmetadata = function(e){
        console.log('now playing the audio');
        audio.play();
    }
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?提前致谢.

更新

似乎真正的问题是无法从手机中捕获音频,因为它在navigator.getUserMedia调用时不会请求访问麦克风.我确认navigator.getUserMedia在使用genymotion进行测试时可以访问.虽然它也没有要求在genymotion中访问.我正在使用recordRTC作为垫片提供者.

更新2

好吧,我放弃了这个.它真的不可能要求麦克风.我现在正在尝试的是PhoneRTC.但我再次陷入困境.我安装插件时它没有建立.有关更多详细信息,请在项目Github页面上查看此问题:https: //github.com/alongubkin/phonertc/issues/151

cordova peerjs ionic

16
推荐指数
1
解决办法
2535
查看次数

如何使用Snap.svg选择现有SVG的片段

我正在尝试在本地运行Snap.svg,但是Snap.load()函数发出了一个AJAX请求,这是本地不允许的(无论如何都在Chrome中).以下是我的代码:

window.onload = function () {

    var s = Snap("#headDiv");
    Snap.load("emotions.svg", function(f) {

        eyes = f.select("#eyes");
        lids = f.select("#lids");
        head = f.select("#head");

        s.append(f);
    });
};
Run Code Online (Sandbox Code Playgroud)

因此,虽然这可以从服务器正常工作,但我想让它在本地运行.在没有发出AJAX请求的情况下,包含my emotions.svg文件的最佳选择是什么?

我知道将SVG放入DIV很容易,但我无法使用当前脚本以这种方式访问​​片段.有任何想法吗?

javascript ajax svg snap.svg

6
推荐指数
1
解决办法
1814
查看次数

如何在AngularJS中正确清理?

我有AngularJS应用程序(见下文),它使用指令从外部库创建自定义块.我想Building.destroyBlock()在块被加载时调用(不是所有块都需要).我在考虑$scope.$watch().是否有更好的方式ng-destroy或什么?

var app = angular.module('app', []);

app.controller('MainCtrl', function($scope) {
  $scope.blocks = [
    {name: 'item #1', id: 1},
    {name: 'item #2', id: 2}
  ];
}).directive('externalBlock', function() {
  return {
    restrict: 'A',
    scope: {
      block: '=data'
    },
    link: function(scope, elm, attrs) {
      Building.addBlock(elm[0], scope.block);
    }
  }
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://code.angularjs.org/1.4.0-rc.2/angular.js"></script>
<script>
  // this comes from external library
  var Building = {
    blocks: [],
    addBlock: function(elm, block) {
      elm.innerHTML = block.name + ' [ready]';
      this.blocks[block.id] = block;
    }, …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

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

printf char as c in hex

我希望\9b\d9\c0...从下面的代码输出一些东西,但我得到了\ffffff9b\ffffffd9\ffffffc0\ffffff9d\53\ffffffa9\fffffff4\49\ffffffb0\ffff ffef\ffffffd9\ffffffaa\61\fffffff7\54\fffffffb.我向char添加了显式转换,但它没有效果.这里发生了什么?

typdef struct PT {
    // ... omitted
    char GUID[16];
} PT;
PT *pt;
// ... omitted
int i;
for(i=0;i<16;i++) {
    printf("\\%02x", (char) pt->GUID[i]);
}
Run Code Online (Sandbox Code Playgroud)

编辑:(unsigned char)为我工作.使用%02hhx(gcc -Wall)时编译器会向我发出警告.(unsigned int)没有效果.

c printf

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

如何覆盖Android应用程序中的配置?

已解决(底部的解决方案)

在我的活动中,我需要阅读首选项,然后覆盖配置。在构造函数中 Context 还没有准备好:

尝试在空对象引用上调用虚拟方法“java.lang.String android.content.Context.getPackageName()”

onCreate为时已晚:

java.lang.IllegalStateException: getResources() 已经被调用

ContextThemeWrapper文档

[ applyOverrideConfiguration ] 方法只能调用一次,并且必须在调用 getResources() 或 getAssets() 之前调用。

什么是覆盖配置的正确时间和地点?

下面是我当前工作解决方案的代码摘录。

class OverrideActivity extends AppCompatActivity {

    // ...

    private boolean __overrideConf = false;

    @Override
    public Resources getResources() {
        if (!__overrideConf) {
            // ...
            // read shared preferences needs context
            // ...
            applyOverrideConfiguration(configuration);
            __overrideConf = true;
        }
        return super.getResources();
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方案(覆盖受保护的方法attachBaseContext

@Override
protected void attachBaseContext(Context newBase) …
Run Code Online (Sandbox Code Playgroud)

android android-preferences activity-lifecycle android-activity

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

cakephp 3.0 isAuthorized()没有被调用

我已经按照教程和所有CakePHP授权指南,我无法调用我的isAuthorized()方法.我的理解(纠正我,如果我错了,这是令人难以置信的可能)是通过委派做授权给特定的控制器'authorize'->['Controller']AppController.php,当UsersController的方法被调用,在这种情况下,"添加",UsersController将运行isAuthorized()我定义的方法.我正在测试看看这个方法是否在isAuthorized()调用时输出flash->错误消息,但没有任何反应.如果我明确地调用isAuthorized($hardcodeduser)我的beforeFilter()方法它将工作,但只有我硬编码用户.

该方法应该起作用的方式是:如果注册用户请求添加/创建新用户,系统将检查用户是否具有管理员/员工级权限(在数据库中只是0或1值)如果用户没有权限,则会重定向到主屏幕,并显示"您无权访问该功能"的错误消息.

任何帮助或建议或其他链接将非常感谢!

class AppController extends Controller {

    public $components = ['Flash', 'Auth', 'Session'];

    public function initialize() {

        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authorize' => ['Controller'],
            'loginRedirect' => [
                'controller' => 'Articles',
                'action' => 'index'
            ],
            'logoutRedirect' => [
                'controller' => 'Pages',
                'action' => 'display',
                'home'
            ]

        ]);
    }

    public function beforeFilter(Event $event) {
        $this->Auth->authorize = 'Controller';
    }

    public function isAuthorized($user) {

        if(isset($user['is_staff']))
            return true;

        return false;
    }
}


class …
Run Code Online (Sandbox Code Playgroud)

authorization cakephp cakephp-3.0

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

为什么这个循环会冻结我的浏览器?

为什么浏览器挂起执行此操作?

for(var i= 9007199254740993;i<9007199254740994;i++) {
    console.log(i);
}
Run Code Online (Sandbox Code Playgroud)

javascript integer-overflow

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