从Android Camera创建RTP数据包到发送

M R*_*hfi 19 camera android rtp live-streaming

我是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());
    }
}
Run Code Online (Sandbox Code Playgroud)

我仍然想知道我必须在哪里放置地址和端口信息.我知道上面的代码仍然需要你修改任何主人.谢谢你提前..

Ric*_*ich 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编译库.这里有一个小教程如何执行此操作以及如何使用库:如何为Android构建FFmpeg

UPDATE2:

所述spydroid应用是一个很好的例子以流从一个机器人设备视频,而无需任何外部库.

  • 为什么rtp数据包无法从Android手机发送到PC?我尝试在SipDroid中使用一些类来从onPreviewFrame()参数中的原始数据创建RTP包.对于每个帧,创建了一个rtp数据包.然后通过sipDroid套接字将数据包发送到PC地址.我的PC中的Wireshark可以很好地捕获传入的数据包.但这样的VLC播放器无法播放它们.你能解释一下出了什么问题吗?感谢您的回答.我会尽快理解这些概念. (2认同)