用Go语言开发的新版NodeMediaServer

之前曾介绍过一款用Node.JS实现的开源RTMP流媒体服务端。目前更新到2.1.3版本,这是个从15年出开始接触Node.js作为研习而建立的项目。说起写完这个项目,对理解nodejs异步架构,rtmp网络协议还是起到了非常重要的作用。

rtmp协议如果用异步解析数据还是比较麻烦的,最早的版本写了个buffer缓冲,再用Generators/yield来转成同步逻辑,简单了许多。接触到async、await后又更新了个版本,代码可读性提高了不少。最后又学习了一个异步状态机的实现,比较满意。

继续阅读“用Go语言开发的新版NodeMediaServer”

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

本文链接地址: 用Go语言开发的新版NodeMediaServer

[转] GStreamer has grown a WebRTC implementation

In other news, GStreamer is now almost buzzword-compliant! The next blog post on our list: blockchains and smart contracts in GStreamer.

Late last year, we at Centricular announced a new implementation of WebRTC in GStreamer.  Today we’re happy to announce that after community review, that work has been merged into GStreamer itself! The plugin is called webrtcbin, and the library is, naturally, called gstwebrtc.

The implementation has all the basic features, is transparently compatible with other WebRTC stacks (particularly in browsers), and has been well-tested with both Firefox and Chrome.

Some of the more advanced features such as FEC are already a work in progress, and others will be too—if you want them to be! Hop onto IRC on #gstreamer @ Freenode.net or join the mailing list.

How do I use it?

Currently, the easiest way to use webrtcbin is to build GStreamer using either gst-uninstalled(Linux and macOS) or Cerbero (Windows, iOS, Android). If you’re a patient person, you can follow @gstreamer and wait for GStreamer 1.14 to be released which will include Windows, macOS, iOS, and Android binaries.

The API currently lacks documentation, so the best way to learn it is to dive into the source-tree examples. Help on this will be most appreciated! To see how to use GStreamer to do WebRTC with a browser, checkout the bidirectional audio-video demos that I wrote.

Show me the code! [skip]

继续阅读“[转] GStreamer has grown a WebRTC implementation”

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

本文链接地址: [转] GStreamer has grown a WebRTC implementation

微信小程序蓝牙BLE发送数据包大于20字节的写法

  • 小程序不会对写入数据包大小做限制,但系统与蓝牙设备会限制蓝牙4.0单次传输的数据大小,超过最大字节数后会发生写入错误,建议每次写入不超过20字节。

可能你已经在用小程序开发BLE应用了,也遇上了这个问题,我这儿是一种写法,并不限于这一种,仅供参考

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

本文链接地址: 微信小程序蓝牙BLE发送数据包大于20字节的写法

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

RTMP流媒体服务端应用开发系列 – Nginx-Rtmp-Win32实时转码

首先,为什么需要转码?
目前,Flash作为跨平台,跨浏览器的多媒体插件,在基于浏览器的视频直播发布应用上,仍然是不可替代的.
但它输出RTMP直播流时有个致命问题,只支持Speex或NellyMoser,不支持AAC音频编码.
即使是Flash Media Live Encoder这种应用程序仍然需要购买付费差价才能支持,不知道Adobe是处于什么考虑.
支持AAC有什么好处? 那太多了.
1.转出的HLS流可以直接被iOS/Android播放,可以使用HTML5技术在绝大多数浏览器内进行播放.
2.转出的HTTP-FLV流也可以依靠flv.js在绝大多数浏览器内进行播放,并且实时性非常好.
3.保存的录像文件可以被绝大多数播放器直接播放,speex/nellymoser很可能就无声了.

Nginx-Rtmp-Win32程序怎么实时转码? 继续阅读“RTMP流媒体服务端应用开发系列 – Nginx-Rtmp-Win32实时转码”

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

本文链接地址: RTMP流媒体服务端应用开发系列 – Nginx-Rtmp-Win32实时转码

RTMP流媒体服务端应用开发系列 – Nginx-Rtmp-Win32仿星域CDN鉴权配置

Nginx-Rtmp-win32 服务器开启仿星域CDN的鉴权配置,播放防盗链,推流鉴权

之前在RTMP流媒体服务端应用开发系列 – Nginx-Rtmp鉴权设置这篇中介绍了Nginx-Rtmp服务器通过on_play和on_publish事件回调到http服务上,再用ngx_http_secure_link_module进行鉴权.

今天介绍一种原生的方式

注:只在博主编译的Nginx-Rtmp-Win32版本中有此功能
下载https://github.com/illuspas/nginx-rtmp-win32/archive/master.zip版本

首先配置nginx.conf

继续阅读“RTMP流媒体服务端应用开发系列 – Nginx-Rtmp-Win32仿星域CDN鉴权配置”

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

本文链接地址: RTMP流媒体服务端应用开发系列 – Nginx-Rtmp-Win32仿星域CDN鉴权配置

SRS-win32 版更新,支持HTTP-FLV

srs-win32编译版 simple rtmp server是Linux环境下运营级流媒体服务器SRS的windows编译版,目的是方便windows平台开发者快速部署流媒体服务器开发测试环境.
同经典的Nginx-Rtmp-Win32项目一样,SRS-win32编译版提供了基本的RTMP\HLS服务.另外,还提供了目前直播app中非常流行的HTTP-FLV格式.
同样,该项目不建议做运营使用,项目是在cygwin环境下编译,默认最大打开文件数256,尽管可以在cygwin环境下修改ulimit数(2016.9.22:最新版2.0.217已默认设置最大打开文件数1024,注意:后来经过验证,即使是改了这地方,程序仍然不能开上百个连接), 但是由于没有Linux环境的epoll,无法高并发.但作为开发测试用已经足够了.
非常建议之前使用Nginx-Rtmp-Win32的开发者使用此项目.

都散了吧,博主精力有限,不会再出新版本了.
如果希望使用Windows平台开发,可以试试博主用Node.js实现的服务端:Node-Media-Server  真正跨平台,高性能谈不上,但上千路没有一点问题.流媒体服务不像HTTP,连接数还没上去,带宽已经跑满了,别太在意并发数.支持RTMP输入,RTMP/HTTP-FLV/WEBSOCKET-FLV输出,支持GOP_CACHE,推流鉴权,播放防盗链.

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

本文链接地址: SRS-win32 版更新,支持HTTP-FLV

RTMP流媒体服务端应用开发系列 – Nginx-Rtmp鉴权设置

鉴权验证在自建直播流媒体服务端应用中是非常重要的。用以防止非法推流,控制收费播放盗链等场景。
目前各大直播云平台都支持url参数形式的鉴权验证法,例如rtmp://serverhost/app-name/stream-name?key=md5(secret+expires_timestemp)&time=expires_timestemp 这种既有私密key,又有时间戳过期判断的最简单形式,当然还能根据使用场景增加其他判断条件。
Nginx-Rtmp模块作为rtmp直播流媒体服务端,本身没有这种鉴权验证法,但能通过Notify 转为本地的http请求,使用Nginx内置的ngx_http_secure_link_module即能达到同样效果。

首先利用Nginx-Rtmp的on_play通知,将rtmp的播放事件通知到本地的http处理上来 继续阅读“RTMP流媒体服务端应用开发系列 – Nginx-Rtmp鉴权设置”

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

本文链接地址: RTMP流媒体服务端应用开发系列 – Nginx-Rtmp鉴权设置

RTMP流媒体服务端应用开发系列 – Nginx-Rtmp分离音视频流

开一个RTMP 流媒体服务端开发系列的坑,主要用到Rtmp-Nginx, Linux平台。

需求:推流端发布后,播放端只希望拉取播放纯音频或视频流。

分析:这种需求可能是为了效仿映客直播分离音视频流来播放的方法。从抓包来看,映客使用http-flv的CDN加速直播流,形如
http://pull.a8.com/live/1458696839457751.flv?only-video=1
http://pull.a8.com/live/1458696839457751.flv?only-audio=1
有什么好处? 不确定,估计播放端网络卡时,可以断开视频流但保持码率不大的音频流,体验较好。 还有一种可能是方便做纯音频类应用,播放端只想听到音频,虽然可以不解码视频,但是视频的数据也不想拉下来,节省移动数据流量。

思路:使用Nginx-Rtmp的exec来调用ffmpeg,在服务端分离rtmp流。

实现: 继续阅读“RTMP流媒体服务端应用开发系列 – Nginx-Rtmp分离音视频流”

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

本文链接地址: RTMP流媒体服务端应用开发系列 – Nginx-Rtmp分离音视频流

在DD-WRT路由器上设置VPN服务为3G/4G网络提供google服务

目前Google系列服务使用hosts的方式访问仍然是比较方便的,在DD-WRT路由器上设置DNSMas来通配google.com 来为本局域网内所有设备提供简单的访问方式。

但有时候外出使用3/4G时也想使用,又不想花钱,在自家DD-WRT路由器上开启VPN服务就行!

首先需要满足如下条件:

  1. 一台DD-WRT路由器
  2. 家里的宽带有公网IP,并能从外部链入。

步骤:

  1. 先注册花生壳动态域名解析,网上教程颇多这里就不重复了。
  2. DDWRT-> 设置->动态DNS
    QQ20160316-1
  3. DDWRT->服务->VPN
    QQ20160316-2
    服务器IP就填路由器IP,客服端IP是一个范围,CHAP-Secrets 就是账户区,格式是
    用户名+ 空格 + * + 空格 + 密码 + 空格 + *
  4. DDWRT->NAT/QoS ->端口转发
    QQ20160316-3
    添加一条VPN的1723端口转发。
  5. DDWRT->服务->服务
    QQ20160316-4
    开启DNSMasq,添加规则。至于hosts我就不公布我用的了,网上也挺多。

手机切到3G/4G,添加VPN,地址填花生壳注册下来的动态域名,用户名密码就是CHAP-Secrets里添加的,连接成功,试试看google.com是否就能打开了。

当然,也不只是3,4G网络环境,你在其它WIFI环境下也能用。也不只google服务可以用hosts+https来访问,facebook,twitter也是可以的,浏览器、APP都可以。

关键是一分钱都不用花,博主路由器是TP-LINK WR841N-V7刷的。

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

本文链接地址: 在DD-WRT路由器上设置VPN服务为3G/4G网络提供google服务