这不是一个真正的问题,因为它是我尝试解决我所面临的最具挑战性功能之一的所有尝试.
我使用libstreaming库将实时视频流式传输到Wowza Server,我需要在SD卡内同时录制它.为了从社区中收集新的想法,我将在下面展示我的所有尝试.
发展
我们在libstreaming库中创建了一个拦截,将所有发送的字节复制到mp4文件中.Libstreaming通过LocalSocket将字节发送到Wowza服务器.它使用MediaRecorder访问摄像头和设备的麦克风,并将输出文件设置为LocalSocket的输入流.我们要做的是围绕从InputStream扩展的输入流创建一个包装器,并在其中创建一个File输出流.因此,每当libstreaming通过LocaSocket的输入流执行读取时,我们都会将所有数据复制到输出流,尝试创建有效的MP4文件.
障碍
当我们尝试读取文件时,它已损坏.我们意识到MP4文件中缺少元信息.特别是moov原子.我们试图延迟关闭流媒体,以便有时间发送这个标题(这仍然是一个猜测)但它没有用.为了测试这些数据的一致性,我们使用付费软件尝试恢复视频,包括标题.它变得可玩了,但它主要是绿屏.所以这成了一个不值得信赖的解决方案.我们还尝试使用"untrunc",一个免费的开源命令行程序,它甚至无法启动恢复,因为没有moov原子.
发展
FFMPEG有一个带有java接口的gradle插件,可以在Android应用程序中使用它.我们以为我们可以通过命令行访问摄像机(可能在"/ dev/video0"中)并将其发送到媒体服务器.
障碍
我们在尝试访问相机时收到错误"Permission Denied".解决方法是使设备具有访问权限,但它会使手机失去保修范围,并且可能会破坏它们.
发展
我们尝试通过MediaRecorder使FFMPEG流成为手机内部录制的mp4文件
障碍
FFMPEG无法流式传输尚未完成录制的MP4文件.
发展
Libstreaming使用LocalServerSocket作为应用程序和服务器之间的连接,因此我们认为可以使用与LocalServerSocket本地地址连接的ffmpeg将流直接复制到SD卡内的本地文件.在流式传输开始之后,我们还运行了ffmpeg命令以开始将数据记录到文件中.使用ffmpeg,我们相信它会以正确的方式创建一个MP4文件,这意味着包含了moov原子头.
障碍
创建的"地址"不能通过命令行读取,作为手机内的本地地址.所以副本是不可能的.
发展
OpenCV是一个开源的跨平台库,为计算机视觉实验和应用程序提供构建块.它提供用于捕获,处理和呈现图像数据的高级接口.它有自己的API与设备摄像头连接,所以我们开始研究它,看它是否具有同时流和记录的必要功能.
障碍
我们发现库并没有真正定义为这样做,而是更像图像数学操作.我们甚至得到了使用libstreaming的建议(我们已经这样做了).
发展
Kickflip是一种媒体流服务,为Android和IOS开发提供自己的SDK.它还使用HLS而不是RTMP,这是一种较新的协议.
障碍
他们的SDK要求我们创建一个带有摄像头视图的Activity,它占据设备的整个屏幕,打破了我们应用的可用性.
发展
我们开始咨询Play商店中已经提供的应用程序的其他开发人员,这些应用程序已经流入服务器.
障碍
与这些开发人员取得联系后,他们再次保证使用这项技术无法同时录制和流式传输.更重要的是,我们必须使用Adobe Air从头开始重做整个应用程序.
发展
我们在这个伟大的项目之后开始使用WebRTC .我们在NODEJS服务器中包含了信令服务器,并开始通过套接字进行标准握手.我们仍在通过webrtc在本地录制和流媒体之间切换.
障碍
Webrtc不适用于所有网络配置.除此之外,相机获取是所有本机代码,这使得尝试复制字节或拦截它变得更加困难.
我有一个Angularjs项目,我正在使用业力来运行测试.我遇到了一些问题,得到了这个错误:
ReferenceError: Can't find variable: require
at http://localhost:9876/base/src/test/bower_components/angular-animate/index.js?b8fe1c0a06b723a75c7e596fd8a86d91965f681c:1
Run Code Online (Sandbox Code Playgroud)
在一些论坛上,我被告知使用karma browserify,但我现在收到此错误:
28 07 2015 22:41:15.573:WARN [preprocess]: Can not load "browserify", it is not registered!
Perhaps you are missing some plugin?
/Users/brunosiqueira/WebstormProjects/copcast-admin/node_modules/karma/node_modules/di/lib/injector.js:9
throw error('No provider for "' + name + '"!');
^
Error: No provider for "framework:browserify"! (Resolving: framework:browserify)
at error (/Users/brunosiqueira/WebstormProjects/copcast-admin/node_modules/karma/node_modules/di/lib/injector.js:22:68)
at Object.parent.get (/Users/brunosiqueira/WebstormProjects/copcast-admin/node_modules/karma/node_modules/di/lib/injector.js:9:13)
at get (/Users/brunosiqueira/WebstormProjects/copcast-admin/node_modules/karma/node_modules/di/lib/injector.js:54:19)
at /Users/brunosiqueira/WebstormProjects/copcast-admin/node_modules/karma/lib/server.js:128:20
at Array.forEach (native)
at Server._start (/Users/brunosiqueira/WebstormProjects/copcast-admin/node_modules/karma/lib/server.js:127:21)
at invoke (/Users/brunosiqueira/WebstormProjects/copcast-admin/node_modules/karma/node_modules/di/lib/injector.js:75:15)
at Server.start (/Users/brunosiqueira/WebstormProjects/copcast-admin/node_modules/karma/lib/server.js:92:18)
at Function.Server.start (/Users/brunosiqueira/WebstormProjects/copcast-admin/node_modules/karma/lib/server.js:101:10)
at Object.<anonymous> (/Applications/WebStorm.app/Contents/plugins/js-karma/js_reporter/karma-intellij/lib/intellijServer.js:10:8)
at Module._compile (module.js:460:26)
at …
Run Code Online (Sandbox Code Playgroud) 大家。我正在这个样板文件上构建一个 Ionic 应用程序。现在,我正在为特定页面构建测试,我正在使用 jasmine 来模拟提供程序并设置方法的预期行为。这就是beforeEach()方法的样子:
beforeEach(() => {
mockLoadingController = jasmine.createSpyObj('ModalController', ['create', 'present', 'dismiss']);
mockLoadingController.create.and.returnValue(mockLoadingController);
mockModalController = jasmine.createSpyObj('LoadingController', ['create', 'present',
'onDidDismiss', 'dismiss']);
mockModalController.create.and.returnValue(mockModalController);
mockGeolocation = jasmine.createSpyObj('Geolocation', ['getCurrentPosition']);
mockGeolocation.getCurrentPosition.and.callFake(( ) => {
return {then: ( ) => { }};
});
mockEvents = jasmine.createSpyObj('Events', ['publish', 'subscribe']);
TestBed.configureTestingModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [
{ provide: NavController, useValue: mockNavController },
{ provide: LoadingController, useValue: mockLoadingController },
{ provide: ModalController, useValue: mockModalController },
{ provide: Geolocation, useValue: mockGeolocation },
{ provide: Events, …
Run Code Online (Sandbox Code Playgroud) 我正在迁移几年前创建的Rails应用程序,并且很长时间没有将它部署到新服务器上.当时,我使用capistrano没有任何问题,现在,当我运行cap deploy时,我得到以下步骤失败:
* executing "ls -1 /home/deploy/mywebsite.com/shared/assets/.sprockets-manifest* | wc -l"
servers: ["45.79.142.32"]
[45.79.142.32] executing command
command finished in 727ms
* executing "ls /home/deploy/mywebsite.com/shared/assets/.sprockets-manifest*"
servers: ["45.79.142.32"]
[45.79.142.32] executing command
command finished in 783ms
*** [deploy:update_code] rolling back
* executing "rm -rf /home/deploy/mywebsite.com/releases/20150812101128; true"
servers: ["45.79.142.32"]
[45.79.142.32] executing command
command finished in 944ms
failed: "rvm_path=/home/deploy/.rvm /home/deploy/.rvm/bin/rvm-shell 'ruby-2.2.2' -c 'ls /home/deploy/mywebsite.com/shared/assets/.sprockets-manifest*'" on 45.79.142.32
Run Code Online (Sandbox Code Playgroud)
我在几个地方读到有关sprockets更改清单文件名或类型的信息(从.sprockets-manifest到.manifest或其他),但我不知道如何以不是黑客的方式解决它.我不确定这是否是由于使用旧的Rails版本或其他东西.这是我使用的版本:
capistrano ruby-on-rails ruby-on-rails-3 sprockets rvm-capistrano
jasmine ×2
android ×1
angularjs ×1
browserify ×1
capistrano ×1
ffmpeg ×1
javascript ×1
karma-runner ×1
opencv ×1
sprockets ×1
stream ×1
tslint ×1
typescript ×1
webrtc ×1