node.js - WebRTC Video Track 到 Node 中的 ffmpeg
问题描述
我已经成功地在 Node(服务器)和浏览器之间建立了 WebRTC 连接。服务器在 RTCPeerConnection 中获取视频轨道onTrack回调。有什么方法可以潜在地转换视频轨道并使其在 ffmpeg 上运行,以便我可以将其输出到 rtmp。
提前致谢。
解决方案
我这样做的方式是使用到节点服务器的套接字,然后使用 ffmpeg 转换为 RTMP:
我产生 FFMPEG
var spawn = require('child_process').spawn;
spawn('ffmpeg',['-h']).on('error',function(m){
console.error("FFMpeg not found in system cli; please install ffmpeg properly or make a softlink to ./!");
process.exit(-1);
});
我确保我从套接字获取视频,然后将其通过管道传输到 FFMPEG 并输出到我的 RTMP 服务器:
var ops=['-i','-',
'-c:v', 'libx264', '-preset', 'ultrafast', '-tune', 'zerolatency', // video codec config: low latency, adaptive bitrate
'-c:a', 'aac', '-ar', audioBitrate, '-b:a', audioEncoding, // audio codec config: sampling frequency (11025, 22050, 44100), bitrate 64 kbits
//'-max_muxing_queue_size', '4000',
//'-y', //force to overwrite
//'-use_wallclock_as_timestamps', '1', // used for audio sync
//'-async', '1', // used for audio sync
//'-filter_complex', 'aresample=44100', // resample audio to 44100Hz, needed if input is not 44100
//'-strict', 'experimental',
'-bufsize', '5000',
'-f', 'flv', socket._rtmpDestination
];
}
console.log("ops", ops);
console.log(socket._rtmpDestination);
ffmpeg_process=spawn('ffmpeg', ops);
console.log("ffmpeg spawned");
你可以看到我的代码:https ://github.com/dougsillars/browserLiveStream/blob/master/server.js
以及livestream.a.video上的一个工作示例
推荐阅读
- angular - “AngularFireObject<{}>”类型上不存在属性“管道”
- uwp - 为什么 StorageFile.GetFilesAsync() 在 dll 中崩溃?
- android - 如何使用 EditText 在片段和活动之间传递信息?
- windows - 如何修复命令提示符上的 Python“版本错误”?
- reactjs - 为每个 onChangeText 更新 TextInput 的 redux 状态是否是一个好习惯
- ios - 如何在 iPhone X 上获取 tabBar 的高度
- vim - 当 ^n 在 ssh 上的 vim 中时,突出显示行上的文本被隐藏
- python - Jupyter Notebook 中的 Tqdm 4.28.1“未找到 IntProgress。请更新 jupyter 和 ipywidgets。”
- canvas - P5.JS:将生成艺术(使用噪声())保存为设备上的图像并在 HTML 上重新上传它们
- python - Python Flask - 没有名为“wtforms.csrf”的模块