淘宝网声音采集器app同声音采集器测水管漏水

之前发布过,并介绍了如何屏幕采集编码并进行了封装,简单的调用即可实现MediaProjection权限申请、H264硬编码、错误处理等功能。本文将介绍新增的功能,还是只需一行代码即可实现屏幕、声音采集。

一行代码实现屏幕采集编码

之前的文章,我们已经介绍过如何,这里再次简单介绍一下

ScreenShareKit.init(this).onH264({ buffer, isKeyFrame, w, h, ts -> //获取编码后的屏幕内容数据 }).onStart({ //用户同意采集,开始采集数据 }).start()

通过这段代码,我们可以实现MediaProjection权限申请、H264硬编码、错误处理等功能。同时,我们也新增了一个onStart回调,会在用户同意屏幕采集后回调该方法,更加方便的处理业务。

增加全局屏幕旋转监测

在之前版本中,屏幕旋转,会导致画面变形,宽高错乱。本次更新中,屏幕旋转监测是通过反射监听IRotationWatcher来实现的。IRotationWatcher是一个AIDL接口,它定义了一个旋转监测器,用于监测屏幕旋转事件。在ScreenShare库中,我们通过反射获取IRotationWatcher对象,并注册一个IRotationWatcher.Stub实例来监听屏幕旋转事件。当屏幕旋转时,该Stub实例会收到回调,并根据旋转角度重置编码器,更改宽高,以保证屏幕方向正确。这里不是简单判断设备是否旋转,而是判断屏幕内容或者其他app布局是否旋转。然后重置编码器,更改宽高。始终保持方向正确。

参考:

增加RGBA数据回调

由于Android设备多,各类 CPU 性能不一。很难保证每个设备硬编码后都能够清晰流畅。所以新增一种方式,使用ImageReader采集屏幕截图,有很多开源库截图都是利用这个类。ImageReader是Android系统提供的一个用于获取屏幕截图的类,通过
setOnImageAvailableListener回调,能够不停地获取屏幕变化,并获取RGBA数据。在这里我们通过创建一个ImageReader对象,并设置其宽高、像素格式等参数来获取屏幕数据。在回调函数中,我们可以获取到每一帧的RGBA数据,并进行处理。该实现虽然比硬编码占用的内存高一点,但优势在于非常的均衡,无论性能强悍或是低端的CPU,都能够得到画质较清晰流畅的数据。

ScreenShareKit.init(this).config(screenDataType = EncodeBuilder.SCREEN_DATA_TYPE.RGBA).onRGBA(object : RGBACallBack { override fun onRGBA( rgba: ByteArray, width: Int, height: Int, stride: Int, rotation: Int, rotationChanged: Boolean ) { //采集的RGBA数据 } }).onStart({ //用户同意采集,开始采集数据 }).start()增加屏幕内置声音采集回调

Android 10已引入AudioPlaybackCapture API。应用可以借助此API复制其他应用正在播放的音频。此功能类似于屏幕采集,但采集对象是音频。主要用例是视频在线播放应用,这些应用希望捕获游戏正在播放的音频。

AudioPlaybackCaptureConfiguration config = (new AudioPlaybackCaptureConfiguration.Builder(mediaProjection)).addMatchingUsage(AudioAttributes.USAGE_MEDIA).build(); AudioFormat audioFormat = (new AudioFormat.Builder()).setEncoding(AudioFormat.ENCODING_PCM_16BIT).setSampleRate(sampleRate).setChannelMask(channelConfig).build(); audioRecord = new AudioRecord.Builder().setAudioFormat(audioFormat).setBufferSizeInBytes(bufferSizeInBytes).setAudioPlaybackCaptureConfig(config).build();

**注意:**应用的音频能否被捕获也取决于应用的 targetSdkVersion。

仅支持Android 10及以上版本

默认情况下,适配Android 9.0及之前版本的应用不允许捕获播放的音频。如要启用该功能,请在应用的 manifest.xml 文件中包含 android:allowAudioPlaybackCapture="true"。

默认情况下,适配Android 10 (API级别29)或更高版本的应用允许其他应用捕获其音频。如要停用“捕获播放的音频”功能,请在应用的 manifest.xml 文件中包含 android:allowAudioPlaybackCapture="false"。

使用:

ScreenShareKit.init(this).config(audioCapture = true).onAudio(object : AudioCallBack { override fun onAudio(buffer: ByteArray?, ts: Long) { //应用的音频数据 } }).onStart({ //用户同意采集,开始采集数据 }).start()

参考捕获播放的音频:

增加禁音屏幕内置声音方法

在应用采集过程中,如果不想中断又想禁音,可以调用以下方法。

ScreenShareKit.setMicrophoneMute(true)

设置为true之后,将会回调空数据,已达到静音效果。反正,恢复正常音频采集。

以上就是本文介绍的一些实用功能。通过这个库,我们可以通过简单的一行代码实现屏幕、声音采集,并且支持全局屏幕旋转监测、RGBA数据回调、屏幕内置声音采集等功能。这个库使用起来非常方便,项目地址:

  我们都知道,如果水管出现漏水的话那么就会给我们带来非常多的麻烦。而要想解决漏水的问题,首先得一个工作就是要进行水管漏水检测,只有明确漏水的位置之后才能开始进行维修。那么,究竟检测水管漏水的方法有哪些呢?可能大家对此还不是很了解,那么下面就跟普奇研究院一起来了解一下,外网水管漏水检测的完整流程。

  1、采集管道信息

收集待检测管道的图纸以及立场用水量的数据,企业安排了解管道位置的技术人员到现场,告知管道的平面位置、掩埋的深度、管道的材质、管径大小等有关信息。在进行漏水检测的时候还需要全面了解现场的具体情况,从而为下一步的检测工作的施工安排和选择什么补漏方法做好准备,包括对管网周边环境的勘察、检查辅助设备、用水量多少的调查和排水状况的调查等。

如果没有详细的施工图纸,需要使用管线探测仪来找到管道走向和埋深。

  2、收集漏水情况

  在检测区域内,白天100%直接对区域里面的消防栓、阀门、水表、明管进行听音,从而获取漏水点传到管道的声波,察觉到漏水情况,察觉到异常情况后就要做好非常详细的登记。

  3、使用漏水检测仪听音检测

  用管道漏水检测仪中的“普查模式”模式沿管道上方地面边走边测检测,观察频谱柱状条变化和耳机里面的声音变化,一旦接近漏水点上方,耳机声音音量会变大,并伴有低沉刺耳的声音或者有水流翻滚,水珠爆裂的声音。屏幕上的频谱光标信号会持续走高并维持在一定的高位上面,不会有大幅度的上下浮动。因为漏点是一个持续的信号。

  4、确认漏水点和定位

  找到疑似漏点之后再用管道漏水检测仪中的“定位”模式进一步验证,使用定位模式进行“精测”,在疑似漏点前后左右检测,仪器界面出现细状条和粗状条,细条是外界噪音产生,粗条是漏水噪音,前后左右检测完成后,观察那个点的粗条最高,就是疑似漏点处。

  5、打孔验证

  我们找到疑似漏水处,先进行打孔验证,可以在周围多打几个孔来进行判断,是否有明水,地下是否是湿的。有水往上冒或者是清水,下方就是漏水点。

  6、修理后重新检查泄漏

  在工作区域内完成漏水点修复后,再进行一次漏水检测,找出漏水点的正确位置。如果没有异常漏水区域,那么漏水检测工作就算是彻底地完成了。