javacv
javacv copied to clipboard
按顺序推流多个文件
如何按顺序推流多个webm文件?
public void liveStreamingVideos(List<String> urls, String rtmpAddress) {
try {
avutil.av_log_set_level(avutil.AV_LOG_INFO);
FFmpegLogCallback.set();
int count = 0;
for (String url : urls) {
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(url);
grabber.setOption("analyzeduration", "10000");
grabber.setFormat("webm");
grabber.start();
int frameWidth = grabber.getImageWidth();
int frameHeight = grabber.getImageHeight();
// 实例化FFmpegFrameRecorder,将SRS的推送地址传入
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(rtmpAddress, 800, 450, 1);
recorder.setFrameRate(25); // 设置帧率
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); // 视频编码格式
recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); // 音频编码格式
recorder.setFormat("flv");
recorder.start();
count++;
Frame frame = null;
// 释放探测时缓存下来的数据帧,避免pts初始值不为0导致画面延时
// grabber.flush();
Frame pkt = null;
long startTime = System.currentTimeMillis();
while ((pkt = grabber.grabAtFrameRate()) != null) {
Thread.sleep(4);
recorder.setTimestamp(1000 * (System.currentTimeMillis() - startTime));
recorder.record(pkt);
}
grabber.close();
}
} catch (Exception e) {
BytePointer buffer = new BytePointer(256);
av_strerror(-32, buffer, buffer.capacity());
buffer.getString();
LoggerUtil.error(LOGGER, "推流失败", e);
}
}
try to create several grabber to do that.