使用scrcpy的开源框架,获取到的将h.264视频流转码为其他视频流时遇到了麻烦。
因为scrcpy的框架获取到的是h.264裸流,在浏览器上没法直接播放,因此一开始我是使用了h264-converter的ts包进行解析,但是经常会遇到解析错误。所以想想还是得先转码成hlv还是mp4格式的数据流才行,查看了下ffmpeg的一些demo,好像都是文件转文件的,想问一下得怎么流转流然后在web上进行播放。
用代码块功能插入代码,请勿粘贴截图。
尝试过node的方法调用本地的FFMPEG进行解码,流到流的转码,虽然可以,但是延迟有1-2s左右
function DecodeH264ByteToFlv(){
//ffmpeg -r 30 -i .\android.264 -c:v libx264 -vcodec copy 'C.flv'
ffmpeg = spawn('ffmpeg', [
'-r', '30',
'-i', '-',
'-c:v',
'libx264',
'-vcodec', 'copy',
'-f', 'flv',
// 'abc.flv'
'pipe:1'
])
ffmpeg.stdin.on('error', (e) => {
console.log('FFmpeg STDIN Error', e);
});
// FFmpeg outputs all of its messages to STDERR. Let's log them to the console.
ffmpeg.stderr.on('data', (data) => {
console.log('FFmpeg STDERR:', data.toString());
});
ffmpeg.stdout.on('data', (data)=>{
//output flv stream
console.log(data)
});
}
运行结果及详细报错内容
延迟性太高了。想问一下又没有什么办法?
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
尝试过的方法主要有两种,
- 浏览器解码播放,但是只在chrome上可以,safari或者firefox基本就是PPT一样,而且也会有解码错误卡死的情况出现。
- 在服务端转码,但是现在服务端都转成golang了,不知道怎么写,想问一下又没有什么办法?
我想要达到的结果
想要知道有没有什么办法实时再浏览器播放?或者说又没有h264流封装成其他格式流的golang库或者代码?