我是Android和套接字编程的新手。我想创建一个Android应用程序,将视频从设备相机实时传输到PC。我首先要做的是从PreviewCallback参数获取原始视频数据并将其转换为RTP数据包。我只是使用JLibRTP来做到这一点。关于传输数据包我认为,有一些相关的类:RtpPkt,RtpSession和RtpSocket。
这是我的一瞥代码:
DatagramSocket rtpSocket = new DatagramSocket();
DatagramSocket rtcpSocket = new new DatagramSocket();
RtpSession rtpSession = new RtpSession(rtpSocket, rtcpSocket);
public void surfaceCreated(SurfaceHolder holder) {
try {
camera = Camera.open();
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] _data, Camera _camera) {
int height = 240;
try {
rtps.sendData(_data);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.toString(),
Toast.LENGTH_SHORT).show();
}
}
});
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
Log.d("CAMERA", e.getMessage());
}
}
我仍然想知道我必须在哪里放置地址和端口信息。我知道上面的代码仍然需要你修改任何主人。谢谢你提前..
答案 0 :(得分:5)
我不知道这个库是否包含将数据包流式传输到PC的内容, 但如果没有,你就有问题了,因为android只支持自版本3.1(API级别12)以来的RTP流。如果您的级别较低,则必须编写自己的“rtp-server”,它能够将数据包从您的设备流式传输到PC。
了解更多信息,请查看sipdroid项目。他们创建了自己的“rtp-server”:http://code.google.com/p/sipdroid/source/browse/trunk/src/org/sipdroid/sipua/ui/VideoCamera.java
<强>更新强>
另一种可能性是使用ffmpeg库中的ffserver,但因此你必须为android编译库。这是一个小教程,如何执行此操作以及如何使用库:How to Build FFmpeg for Android
<强> UPDATE2:强>
spydroid application是从没有任何外部库的Android设备流式传输视频的一个很好的例子。