2011-07-17 89 views
2

我试图建立在Android是从流设备摄像头视频的流媒体服务器的应用程序。视频流从Android设备的相机

我已经看过不同岗​​位和解决方案,这是我目前的状态,用的帮助(我用Sipdroid,JBoss的,网状,并分析数据包上的Wireshark)

  1. 我建立的RTSP协议栈和我成功地连接到服务器
    2.我能够在理论上能够创造一个RTP包,并将其发送到 服务器

我的问题是在拍摄框架和在RTP数据包发送的数据。 我有2个方向:

1-使用相机和AuidoRecorder捕捉原始媒体数据并使用rtp发送,问题是这些数据是否应根据RTSP ANNOUNCE中的.sdp文件描述进行编码???按我的理解从摄像头和麦克风的数据将是未编码的原始数据 Anorther的事情是如何我在RTP分组制定好这个原始数据。

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

我的问题是我在我的事情复杂化是它足以让视频和音频的原始数据的RTP包和流媒体服务器将处理其余部分???? 请我希望在这个问题上的任何帮助和指导..

感谢

+0

您能够发起通过蜂窝连接?如果是这样,你是如何克服手机上所有被阻塞的端口的问题的? – michael

+0

您是否找到解决方案? – Derzu

回答

1

,因为它由.sdp文件中描述首先必须编码数据。你想尝试MediaRecorder而不是AuidoRecord? MediaRecorder允许您设置您将获得的数据的编码。

此外,我建议你用一个Socket创建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传输的方法正是现在困扰我。

+0

@ andro-delva,它工作吗? – Derzu

+1

如何从ParcelFileDescriptor播放视频或音频pfd = ParcelFileDescriptor.fromSocket(socket); mediaPlayer.setDataSource(pfd.getFileDescriptor());它不适用于我,它显示无法创建媒体播放器。我需要做什么? – Aravi