Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有emscripten C/C和#x2B的RTMP视频+;到Javascript LLVM编译器_Javascript_Emscripten - Fatal编程技术网

带有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。见: