- javascript/
- 带有emscripten C/C和#x2B的RTMP视频+;到Javascript LLVM编译器
带有emscripten C/C和#x2B的RTMP视频+;到Javascript LLVM编译器
带有emscripten C/C和#x2B的RTMP视频+;到Javascript LLVM编译器,javascript,emscripten,Javascript,Emscripten,我知道emscripten是一种将C代码编码为Javascript的超级强大的方法
是否可以将其用于视频、捕获网络摄像头并使用rtmpdump库之类的工具通过RTMP传输?rtmpdump可以使用Emscripten重新编译为javascript。但是,这并不保证重新编译的代码能够在Javascript环境中以RTMP规范要求的方式执行(即TCP要求)
使用Emscripten重新编译rtmpdump的步骤:
获得:
获取rtmpdump源:
git克隆git://git.ffmpeg.org/
我知道emscripten是一种将C代码编码为Javascript的超级强大的方法
是否可以将其用于视频、捕获网络摄像头并使用rtmpdump库之类的工具通过RTMP传输?rtmpdump可以使用Emscripten重新编译为javascript。但是,这并不保证重新编译的代码能够在Javascript环境中以RTMP规范要求的方式执行(即TCP要求)
使用Emscripten重新编译rtmpdump的步骤:
获得:
获取rtmpdump源:
git克隆git://git.ffmpeg.org/rtmpdump
清除生成缓存
澄清
在Makefile中将C编译器设置为CC
将第5行的rtmpdump Makefile编辑为以下内容:
CC=$(交叉编译)CC
运行emmake从make输出创建字节码:
emmake make CRYPTO=
(根据rtmpdump自述文件,我选择使用“CRYPTO=”在没有SSL支持的情况下构建,因为它会给出错误)
运行emcc编译并将生成的字节码链接到javascript中:
emcc-01./librtmp/*.o rtmpdump.o-o rtmpdump.js
运行重新编译的rtpmpdump.js:
chmod 755 rtmpdump.js
节点rtmpdump.js-rrtmp://127.0.0.1/live/STREAM_NAME
当然,我们需要一个实时RTMP流来测试
创建实时RTMP流的步骤:
获取最新信息:
git克隆
通过RTMP向livestream添加mp4:
(使用大公兔作为我们的测试视频)
cd节点rtps rtmp服务器/
npm安装-d
cd文件/
wget
启动RTMP服务器
sudo咖啡服务器
使用ffmpeg将mp4发布到RTMP服务器
ffmpeg-re-i/node rtsp rtmp server/file/BigBuckBunny_320x180.mp4-c:v copy-c:a copy-f flvrtmp://localhost/live/STREAM_NAME
观察结果
您应该能够通过连接VLC Media Player之类的设备来确认RTMP流已成功发布。一旦我们确认流正常运行,我们就可以使用以下工具测试rtmpdump.js:
节点rtmpdump.js-4rtmp://127.0.0.1/live/STREAM_NAME -o out.flv
然而,我们立即遇到:
错误:RTMP_Connect0,无法连接套接字。113(无法访问主机)
结论
虽然我的答案探索了将rtmpdump及其支持库(librtmp)重新编译为Javascript的路径,但它并没有产生一个有效的实现
一些人得出结论,RTMP依赖TCP通信从服务器传输到客户端。我概述的重新编译rtmpdump的步骤为RTMP_Connect0方法生成基于HTTP(即!=TCP)的XHR请求。可以重写RTMP客户机以使用websockets,并使用类似的方式将这些连接传递到TCP,但是,如果成功,如果您打算使用RTMP流,则可以将RTMP对flash的依赖性移动到对Websockify的依赖性。生成一个无flashless RTMP客户端似乎不是将RTMP重新编译为Javascript的简单问题,因为必须考虑传输机制(TCP)
注释
对于希望了解这项工作的任何人来说,请注意,在Javascript中运行理论上正确的rtmp实现的浏览器中对远程流进行测试需要在远程主机上根据同源策略启用CORS。见: