我目前正在使用 Xuggler 接收 AR.Drone 的视频流。流格式为 H.264 720p。我可以使用以下代码解码和显示视频,但处理器使用率非常高(双核 2ghz 为 100%),并且流中存在巨大的延迟,并且不断增加。
final IMediaReader reader = ToolFactory.makeReader("http://192.168.1.1:5555");
reader.setBufferedImageTypeToGenerate(BufferedImage.TYPE_3BYTE_BGR);
MediaListenerAdapter adapter = new MediaListenerAdapter()
{
public void onVideoPicture(IVideoPictureEvent e)
{
currentframe = e.getImage();
//Draw frame
}
public void onOpenCoder(IOpenCoderEvent e) {
videostreamopened = true;
}
};
reader.addListener(adapter);
while (!stop) {
try {
reader.readPacket();
} catch(RuntimeException re) {
// Errors happen relatively often
}
}
使用 Xuggler 示例应用程序不能解决任何问题,所以我认为我的方法是正确的。此外,当我将分辨率降低到 360p 时,流是实时的,一切正常。有谁知道这种性能问题是否正常或我必须做些什么来避免这种情况?我对此很陌生,我一直无法找到信息,所以有人有建议吗?
顺便说一句,我尝试更改比特率但没有成功。呼叫reader.getContainer().getStream(0).getStreamCoder().setBitRate(bitrate);
似乎被忽略了...
提前致谢!
更新: 我得到了很多这样的错误:
9593 [Thread-7] ERROR org.ffmpeg - [h264 @ 0x7f12d40e53c0] mmco: unref short failure
39593 [Thread-7] ERROR org.ffmpeg - [h264 @ 0x7f12d40e53c0] number of reference frames (0+2) exceeds max (1; probably corrupt input), discarding one
39593 [Thread-15] ERROR org.ffmpeg - [h264 @ 0x7f12d40e53c0] reference overflow
39593 [Thread-15] ERROR org.ffmpeg - [h264 @ 0x7f12d40e53c0] decode_slice_header error
更新 2:更改编解码器可以解决上述错误,但性能仍然很差。