gpt4 book ai didi

java - 我怎么能从我的手机发送实时视频流到远程服务器!

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:58 26 4
gpt4 key购买 nike

我在将视频从手机实时流式传输到服务器时遇到问题。也就是说,让我的手机成为一个网络摄像机,服务器可以从我的手机上观看实时视频

我用谷歌搜索了许多解决方案,但没有人能解决我的问题。我使用 MediaRecorder 来录制 .它可以将视频文件正确保存在 SD 卡中。然后,我引用了this page并使用了如下一些方法

 skt = new Socket(InetAddress.getByName(hostname),port);
pfd =ParcelFileDescriptor.fromSocket(skt);
mediaRecorder.setOutputFile(pfd.getFileDescriptor());

现在看来我可以在录制时发送视频流了

然而,我写了一个接收方程序来接收来自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 - 我怎么能从我的手机发送实时视频流到远程服务器!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4534126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com