我目前正在使用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:更改编解码器可以解决上述错误,但性能仍然很差。