我正在尝试在我正在创建的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
我正在尝试在本地运行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很容易,但我无法使用当前脚本以这种方式访问片段.有任何想法吗?
我有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)我希望\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)没有效果.
已解决(底部的解决方案)
在我的活动中,我需要阅读首选项,然后覆盖配置。在构造函数中 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
我已经按照教程和所有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) 为什么浏览器挂起执行此操作?
for(var i= 9007199254740993;i<9007199254740994;i++) {
console.log(i);
}
Run Code Online (Sandbox Code Playgroud)