来自Android设备相机的视频流

时间:2011-07-17 17:21:55

标签: android video-streaming rtsp rtp

我正在尝试在Android上构建一个应用程序,将视频从设备摄像头传输到流媒体服务器。

我查看了不同的帖子和解决方案,这是我当前的状态,借助于(我使用Sipdroid,jboss-netty,并在wireshark上分析数据包)

  1. 我构建了RTSP堆栈并成功连接到服务器
    2.理论上我能够创建一个rtp数据包并将其发送给 服务器
  2. 我的问题是捕获帧并在RTP数据包中发送数据。 我有两个方向:

    1-使用相机和AuidoRecorder捕获原始媒体数据并使用rtp发送,问题是该数据是否应根据RTSP的ANNOUNCE中的.sdp文件描述进行编码?据我所知,相机和麦克风的数据将是未编码的原始数据 另一件事是我如何正确地在RTP数据包中制定这些原始数据。

    2-媒体记录器已对数据进行编码,我可以设置.sdp文件中定义的编码。我试图找到一种从输出文件中读取的方法,但这需要我转换。 mp4文件数据流数据似乎是一项复杂的任务。

    我的问题是,我是否过于复杂,是否足以在RTP数据包中发送视频和音频的原始数据,流媒体服务器将处理其余的? 在这件事情上,我将不胜感激任何帮助和指导。

    由于

1 个答案:

答案 0 :(得分:1)

首先,您必须按照.sdp文件的描述对数据进行编码。您想尝试MediaRecorder而不是AuidoRecord吗? MediaRecorder允许您设置您将获得的数据的编码。

此外,我建议您通过套接字创建FileDescriptor,以便数据可以通过套接字流而不是静态文件传输。 代码可能是这样的:

Socket socket = new Socket(serverAddr, serverPort);
socket.setTcpNoDelay(true);
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
Camera camera = Camera.open();
camera.unlock();
MediaRecorder recorder = new MediaRecorder();
recorder.setCamera(camera);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
recorder.setVideoFrameRate(15);
recorder.setVideoSize(480, 320);
recorder.prepare();
recorder.start();

在RTP中传输的方法正是我现在遇到的麻烦。

相关问题