javaCV系列文章:
补充篇:
补充:解决javaCV的FFmpegFrameRecorder中dts为空导致播放器过快解码进而导致画面时快时慢等影响视频正常解码播放的问题,目前解决办法如下:
注意:本代码已提交给javacv,目前1.4.4-snapshot版本已修复该问题
javaCV开发详解之4:转流器实现中我们使用了Grabber和Recorder的garbFrame和recordFrame实现转流,但是这种方式消耗很大,通过javacv源码发现garbFrame实际上进行decode操作(也就是把h264编码数据解码为yuv数据并保存到Frame对象中,然后在recordFrame中把Frame中的yuv图像像素数据又通过encode为h264编码数据,音频部分则是在garbFrame时先解码成pcm数据,然后在garbFrame中编码为aac),这两部分的编解码操作非常耗资源,显然会影响到转流的整体效率。
既然rtsp和rtmp本身都支持h264视频编码,那么视频编码这块完全可以跳过视频编解码的步骤,音频如果也都是aac编码那当然更好,这样我们可以避免很多不必要的编解码操作。
假设rtsp的视频编码和音频编码是h264和aac,那么我们只需要一步转封装即可完成转流,代码参考如下:
资源占用降低了十倍都不止,性能提升还是不错的,延迟也降低很多。
感谢支持eguid原创