我有一个问题,需要将我的实时视频从手机流式传输到服务器上。
也就是说,让我的手机成为IP摄像头,服务器可以从我的手机上观看实时视频。
我已经搜索了很多解决方案, 但没有一个能够解决我的问题。 我使用MediaRecorder进行录制。 它可以正确地保存视频文件到SD卡中。 然后,我参考了这个页面并使用了以下方法。
我已经搜索了很多解决方案, 但没有一个能够解决我的问题。 我使用MediaRecorder进行录制。 它可以正确地保存视频文件到SD卡中。 然后,我参考了这个页面并使用了以下方法。
skt = new Socket(InetAddress.getByName(hostname),port);
pfd =ParcelFileDescriptor.fromSocket(skt);
mediaRecorder.setOutputFile(pfd.getFileDescriptor());
现在似乎我可以在录制时发送视频流了。
然而,我编写了一个接收端程序来从Android接收视频流,但它无法正常工作。是否有任何错误?我可以接收文件,但无法打开视频文件。我猜问题可能是由于文件格式引起的?
以下是我的代码概述。
在Android端:
Socket skt = new Socket(hostIP,port);
ParcelFileDescriptor pfd =ParcelFileDescriptor.fromSocket(skt);
....
....
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setOutputFile(pfd.getFileDescriptor());
.....
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
.....
mediaRecorder.start();
在接收端(我的ACER笔记本电脑)
// anyway , I don't think the file extentions will do any effect
File video = new File (strDate+".3gpp");
FileOutputStream fos;
try {
fos = new FileOutputStream(video);
byte[] data = new byte[1024];
int count =-1;
while( (count = fin.read(data,0,1024) ) !=-1)
{
fos.write(data,0,count);
fos.flush();
}
fos.close();
fin.close();
我困惑了很长时间....
提前感谢。