- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有从后置摄像头录制视频的服务:
this.mMediaRecorder = new MediaRecorder();
this.mMediaRecorder.setCamera(mCamera);
this.mMediaRecorder.setVideoSource(VideoSource.CAMERA);
this.mMediaRecorder.setOutputFormat(OutputFormat.DEFAULT);
this.mMediaRecorder.setVideoEncoder(VideoEncoder.DEFAULT);
this.mMediaRecorder.setVideoSize(photo_resolution[0], photo_resolution[1]);
this.mParcelFileDescriptor = ParcelFileDescriptor.fromSocket(this.mSocket);
this.mMediaRecorder.setOutputFile(this.mParcelFileDescriptor.getFileDescriptor());
this.mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
this.mMediaRecorder.prepare();
this.mMediaRecorder.start();
视频没有声音。我使用以下代码连接到服务器:
this.mSocket = new Socket();
this.mSocket.connect(new InetSocketAddress(...), 30000);
this.in = new BufferedReader(new InputStreamReader(this.mSocket.getInputStream(), "UTF-8"));
this.out = this.mSocket.getOutputStream();
this.out.write(("some string" + "\n").getBytes("UTF-8"));
this.out.flush();
...
我已经将所有需要的权限添加到 AndroidManifest.xml 中。
问题是视频未广播到服务器。我尝试将 this.mParcelFileDescriptor.getFileDescriptor()
替换为 "/sdcard/video.mp4"
,一切正常 - 视频录制正确。但它不发送到套接字。客户端(在我的应用程序中)没有发生任何事情,但服务器端向我抛出异常java.net.SocketTimeoutException:读取超时
。我在服务器端尝试了此代码:
byte[] bytes = new byte[1024];
int read = mSocket_inputStream.read(bytes, 0, 1024);
System.out.println(read);
调试我从客户端(从我的应用程序)读取的字节数 - 控制台中没有调试任何内容,因为发送了 0 个字节。请帮我解决这个问题。我在谷歌中没有找到解决方案。
最佳答案
文件描述符仅适用于 MediaRecorder 中的本地服务器套接字。
this.mParcelFileDescriptor = ParcelFileDescriptor.fromSocket(this.mSocket);
this.mMediaRecorder.setOutputFile(this.mParcelFileDescriptor.getFileDescriptor();
您可以创建自己的 LocalServerSocket,然后将数据从本地服务器套接字传递到实际服务器套接字
要了解有关本地服务器套接字的更多信息,您可以通过 https://developer.android.com/reference/android/net/LocalServerSocket.html
更有效的方法是使用 MediaCodec API 进行录制,因为它将以字节缓冲区的格式逐帧为您提供数据,并且您可以将该数据发送到服务器。
关于java - mMediaRecorder.setOutputFile(ParcelFileDescriptor.fromSocket(mSocket)) - 没有写入 mSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40362154/
我使用 eclipse-indigo 和 android 2.3.3_r1,我从网络中的服务器下载了一个字符串。它是 docx 文件的内容。 我可以从它接收一个 ParcelFileDescritor
我正在尝试弄清楚如何在 ContentProvider.openFile 中传递数据流。要发送的数据是在 JNI 中创建的。我尝试使用传输线程创建管道,但由于管道损坏而遇到了很多麻烦。所以我想我可以将
我从下面的链接中了解了 ParcelFileDescriptor。 http://developer.android.com/reference/android/os/ParcelFileDescri
我有一个使用 ContentProvider 类的应用程序。在 openFile 方法中,我需要能够解码文件并作为数据流返回。所以我决定使用内置管道。 问题是如果我使用 createPipe 方法,我
我正在为这段安静的漫长岁月而苦苦挣扎,我决定需要帮助。此处描述了基本想法:Link 我想在录制时通过套接字将 MediaRecorder 的输出直接流式传输到我的服务器。 (在这种特定情况下,我想看看
我成功地通过 Mediarecorder 将视频录制到 SD 卡上但我想将此视频发送到服务器而不写入 SD 卡。我搜索了一下,发现 parcelFileDescriptor 是发送方式视频到 TCP
我正在两部安卓手机之间创建一个实时视频流的安卓应用程序。我已经在这些设备之间建立了套接字连接。我正在一个设备中捕获视频并将流发送到其他设备,但目前我只想保存在接收方移动设备中并保存它。我正在使用 Me
我正在尝试制作一个使用 MediaRecorder 录制音频的示例,录制的数据通过 Android(>=4.0) 上的 UDP 套接字传递。 阅读文章: Broadcasting video with
与 my recent question on MediaRecorder and createPipe() 相关,并在 this other SO question 中讨论了 createPipe(
我正在尝试制作一个录制音频的示例,数据存储由应用程序处理,而不是 MediaRecorder。用例包括将录音存储在内部存储器上或加密录音。 原则上,这应该使用 createPipe() 在 Parce
我已经解决了在 NDK 上编码时遇到的问题,但我不确定该解决方案是否规范,或者是否有规范的方法可以做到这一点。首先描述一下我所做的事情: 我似乎无法使用 Java 的 File 或 FileDescr
我有从后置摄像头录制视频的服务: this.mMediaRecorder = new MediaRecorder(); this.mMediaRecorder.setCamera(mCamera);
我的应用正在创建一个使用 ACTION_GET_INTENT 寻找图像 mime 类型的 Intent。返回后,我将检查数据 Intent 、从 URI 的内容解析器获取游标、检查 uri.toStr
我为我的 InstrumentationTestCase 子类编写了一个通用的 shellCommand 函数。对 executeShellCommand 的调用有效(命令已执行),但我对返回的 Pa
我有一个要传递给 ContentProvider 的 openFile() 方法的 InputStream。我能否以某种方式直接传递我的 InputStream,以某种方式将其包装在 ParcelFi
我应该如何形成在第 3 方查看器中显示我的应用程序内容的正确方式?我需要在画廊(或任何其他图像查看器)中显示图像,在某些 pdf 阅读器中显示 pdf,.. 数据通过实现 openFile() 方法并
我想通过使用 ParcelFileDescriptor.createPipe() 将 InputStream 从一个 Android 服务“发送”到在不同进程中运行的另一个服务。 ,一个流到流的复制线
我是一名优秀的程序员,十分优秀!