繁体   English   中英

如何从手机向远程服务器发送实时视频流!

[英]How could I send live video stream to remote server from my phone!

我有一个问题是通过手机实时将视频流式传输到服务器。 也就是说,让我的手机成为IP摄像头,服务器可以通过手机观看实时视频

我搜索了许多解决方案,但没有人可以解决我的问题。 我使用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();

我困惑了很久......提前感谢

POC,

MediaRecorder写入文件的方式如下:为空标题留出空间录制时写入文件内容录制完成后,查找文件的开头在文件开头写入标题然后(我相信)还有另一个搜索结束写入元数据的文件的名称。

因为在套接字上没有“寻找”的概念,所以你必须弄清楚标题何时到来,寻找文件的开头,然后在适当的位置写入标题。

从这里开始的最佳位置是使用hexeditor来确定有效3gpp文件的格式,然后根据接收器程序的十六进制输出分析这个十六进制。 您还需要查看3gpp文件格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM