我有关于通过电话将视频实时流式传输到服务器的问题.
也就是说,让我的电话成为IP摄像机,服务器可以从我的电话观看实时视频
我用Google搜索了许多解决方案,
但是没有人能解决我的问题.
我使用MediaRecorder进行记录.
它可以将视频文件正确保存在SD卡中.
然后,我引用了this page并使用了以下方法
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写入文件的方式如下:
留空标题
录制时写入文件内容
录制完成后,查找到文件的开头
将标头写入文件开头
然后(我相信)在写入元数据的文件末尾还有另一个寻找.
因为套接字上没有“寻找”的概念,所以您必须弄清楚标题何时到达,查找文件的开头,然后将标题写在适当的位置.
从此处开始的最佳位置是使用十六进制编辑器来确定有效的3gpp文件的格式,然后针对接收程序的十六进制输出分析此十六进制.另外,您将需要研究3gpp文件格式.
总结以上是内存溢出为你收集整理的java-如何将实时视频流从手机发送到远程服务器!全部内容,希望文章能够帮你解决java-如何将实时视频流从手机发送到远程服务器!所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)