Android BLE通讯详解,连接JDY-19

Android手机与JDY-19蓝牙BLE模块通讯详解

最近做一款Android与蓝牙BLE设备通讯的项目,记录下开发经验。

蓝牙设备是JDY-19模块,串口透传,非常方便好用。官方教程需要创建Service进行通讯,此处需求为简单数据透传,直接在Activity中收发完成就结束,不开启服务,简单便捷。话不多说,代码伺候。

一、Android扫描BLE设备

0. 开启权限

1. 检查是否有BLE支持

2.检查是否有蓝牙支持

继续阅读“Android BLE通讯详解,连接JDY-19”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: Android BLE通讯详解,连接JDY-19

如何在Visual Studio 中,F5启动调试Firebreath插件

一般我们调试Firebreath的插件,使用的方法是,启动一个老版本的firefox(单进程),打开插件页面后,在调试中选择“附加到进程”,选择firefox进程,触发断点调试。

但有的时候需要调试启动过程,那么这个方法就不行了。
其实直接按F5启动调试的办法也很简单,只需设置“ALL_BUILD属性”,在“配置属性”-》“调试”中。
命令输入firefox.exe的全路径,命令参数输入插件的html地址,可以是本地文件路径,就行了。

如果dll注册就在debug生成目录,那么不需要额外操作,直接就能开始调试了。

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 如何在Visual Studio 中,F5启动调试Firebreath插件

如何在浏览器里面推送H.264+AAC的RTMP直播

如何在浏览器里面推送H.264+AAC的RTMP直播。开发ActiveX,NPAPI,PPAPI直播插件。

这是困扰N年的问题了,Adobe似要放弃但又不舍的flash,一直在更新,但大家呼唤已久的aac编码始终不肯加入。
于是基本上需要做高级点Web页直播的,不是让主播用第三方工具,就是在服务端实时转码,挺费劲的。
简单点的基本上全站flash的也有,flash仅做推流播放的也很多。

WebRTC在大家的期盼下也慢慢得到了大部分浏览器的支持,但结果一看这丫也不用aac,而是用的Opus,似乎是个版权问题?
Opus在语音与音乐等编码场景都能应对,但rtmp不支持呀,还是需要转码。协议接入也是一个麻烦点。

既然Adobe能开发flash插件,大家为啥不直接开发插件呢?

这个说起来似乎更痛苦,ie要开发ActiveX,win10 更新到Edge了,又不知道是支持哪种(有了解的朋友请告知我一下)?早先的chrome和firefox要开发NPAPI,现在不兼任了,又要开发PPAPI。
似乎只有大公司能折腾这些事吧。腾讯云好像有一款ActiveX的推流插件,但没仔细看。尽管可以兼容ie,做点行业应用,但你现在让前端做ie兼容的娱乐向页面,他分分钟摔键盘。

最近有一点研究时间了,回看了一下之前了解过的FireBreath,说是可以一次开发多个平台的浏览器插件,我觉得可以利用它来实现我一直想要实现的功能。
1.x版本可以支持ActiveX和NPAPI的插件,2.x说是准备兼容PPAPI,但似乎有点麻烦,这方面资料也不多,而且项目也已经很长时间未更新了。
似乎又陷入绝境。
继续阅读“如何在浏览器里面推送H.264+AAC的RTMP直播”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 如何在浏览器里面推送H.264+AAC的RTMP直播

如何在aarch64的系统上执行armhf程序

如何在aarch64的系统上执行armhf程序,安装必须的libc6:armhf zlib1g:armhf即可

之前买了一片友善之臂NEO2做NAS,配置了aria2远程服务,下载百度云盘的资源,速度还不错。
但需要下载迅雷链接时,就没有办法了。
以前用Raspberry Pi 1代时,可以用迅雷的嵌入式版本Xware_armel_v5te_glibc.tar.gz
后来用pi3, neo2这种arm64处理器的板子时就无法使用了。

会提示“-bash: ./portal: No such file or directory” 。

今天突然想到,完全可以安装armhf的运行时呀。就好像在Ubunt下安装的一系列i386库一样。
继续阅读“如何在aarch64的系统上执行armhf程序”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 如何在aarch64的系统上执行armhf程序

ffmpeg.js使用libopenh264解码性能低的原因

最近在研究用Emscripten开发JavaScript的直播播放器,使用ffmpeg内置的h264解码速度还是可以接受的,本想使用openh264的解码进行比较,但发现非常慢,无法达到640×480@30帧的解码速度。

本来以前也有过用openh264的项目,直接使用libopenh264进行解码速度还是很快的。但编译进ffmpeg里使用就特别慢,于是-g重新编译NodePlayer.js并开始Chrome Performance录制。
继续阅读“ffmpeg.js使用libopenh264解码性能低的原因”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: ffmpeg.js使用libopenh264解码性能低的原因

如何在iOS的浏览器环境内实现 “真·实时视频播放”

iOS的浏览器环境,当然就包括微信,QQ内打开。目前实现直播的协议一般都是HLS, 延迟大可想而知,“真·实时” 当然指的是2秒以内的延迟。

浏览器环境下支持常见的低延迟直播,首选的是flv.js。它支持多种数据获取方式(fetch,websocket,xhr),兼容性很好。解析flv流后再封装为mp4数据,使用Media Source Extensions 特性,将数据投喂给播放器以实现实时的解码播放。按浏览器支持情况,具有硬件加速的性能。

而iOS是目前无法实现的平台,https://caniuse.com/#search=mediasource 可以看到,到目前为止系统11.2仍然不支持该特性。

但通过websocket+WebAssembly技术,可以曲线救国。我已经实现了一个初版https://github.com/illuspas/NodePlayer.js
继续阅读“如何在iOS的浏览器环境内实现 “真·实时视频播放””

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 如何在iOS的浏览器环境内实现 “真·实时视频播放”

How to debug node.js addons in xcode

I recently started programming native addons but couldn’t find how to debug them easily. After couple nights, I found very easy solution described below.

To debug native addons generate an xcode project file. From the root of your project (where binding.gyp lives) run:

This will create ./build/binding.xcodeproj folder, which you can open:

Once project is opened, make sure to configure the scheme. Open Product -> Scheme -> Edit Scheme, and then: 继续阅读“How to debug node.js addons in xcode”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: How to debug node.js addons in xcode

Debian 9 AMD64版本运行32位arm-gcc-toolchain

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: Debian 9 AMD64版本运行32位arm-gcc-toolchain

海思 HiMPP-IPC 媒体处理平台开发参考阅读笔记 二

重采样

Hi35xx 的音频输入和音频输出模块支持对音频数据实施重采样。如果启用 AI 重采样功 能,则在 HI_MPI_AI_GetFrame 获取数据返回前,内部将会先执行重采样处理,再返 回处理后的数据。如果启用了 AO 重采样功能,则音频数据在发送给 AO 之前,内部 先执行重采样处理,处理完成后再发送给 AO 通道进行播放。

音频重采样支持任意两种不同采样率之间的重采样。重采样支持的输入输出采样率 为:8kHz,11.025kHz,12kHz,16kHz,22.05kHz,24kHz,32kHz,44.1kHz, 48kHz。

  • 当 AI-AENC 或 AI-AO 的数据传输方式为系统绑定方式时,AI 或 AO 的重采样无效
  • 非系统绑定方式下,用户可以通过 HI_MPI_AI_GetFrame 接口获取重采样处理后的 AI 音频帧,并发送给 AENC/AO,以建立 AI-AENC 或 AI-AO 的数据传输,此时 AI 或 AO 的重采样有效。
  • ADEC-AO的数据传输方式无上述限制,当为系统绑定方式时,AO的重采样仍有 效。

当你使用hi35xxx_enc.cpp提供的方法来开发时,实际上重采样功能是无法实现的,因为在StartAenc方法里,AI->AENC是通过系统绑定的方式(HI3516A_COMM_AUDIO_AencBindAi)关联的,如果需要重采样功能,这个地方应该使用(HI3516A_COMM_AUDIO_CreatTrdAiAenc).
这个函数创建了一个线程,先从AI(HI_MPI_AI_GetFrame)里获取数据,再发送给AENC(HI_MPI_AENC_SendFrame),然后释放(HI_MPI_AI_ReleaseFrame),这时从AENC里取回(HI_MPI_AENC_GetStream)的数据,才是重采样后的数据. 当然,这一切的前提是需要HI_MPI_AI_EnableReSmp,并正确传入输入与输出采样.

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 海思 HiMPP-IPC 媒体处理平台开发参考阅读笔记 二

海思 HiMPP-IPC 媒体处理平台开发参考阅读笔记 一

海思媒体处理平台架构

  • 视频输入 VI
  • 视频处理 VPSS
  • 视频编码 VENC
  • 视频解码 VDEC
  • 视频输出 VO
  • 视频侦测分析 VDA
  • 音频输入 AI
  • 音频输出 AO
  • 音频编码 AENC
  • 音频解码 ADEC
  • 区域管理 REGION

海思媒体处理平台内部处理流程图

继续阅读“海思 HiMPP-IPC 媒体处理平台开发参考阅读笔记 一”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 海思 HiMPP-IPC 媒体处理平台开发参考阅读笔记 一