在android中,有两个类LocalServerSocket和LocalSocket.我认为它们类似于unix socket中的AF_LOCAL(我不确定它是否正确).
我的问题是:是否可以在Java中创建LocalServerSocket并使用普通的unix套接字客户端在本机或其他进程中连接到它?
如果有可能,我应该在本机中设置"sockaddr_un.sun_path"是什么?
我编写了一个示例项目来测试它,我尝试将.sun_path设置为与LocalServerSocket中使用的字符串名称相同,但是它失败了,本机无法连接到Java LocalServerSocket.
我的Java代码:
package test.socket;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class TestSocketActivity extends Activity {
public static String SOCKET_ADDRESS = "my.local.socket.address";
public String TAG = "Socket_Test";
static{System.loadLibrary("testSocket");}
private native void clientSocketThreadNative();
private native void setStopThreadNative();
localServerSocket mLocalServerSocket;
localClientSocket mLocalClientSocket;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLocalServerSocket = new localServerSocket(); …Run Code Online (Sandbox Code Playgroud) 我的项目中有一个要求,即录制视频并将其上传到服务器,但由于移动网络不可靠,开始时我决定每隔30秒做一次
停止录音机
重置录像机状态
检索由记录器写入的文件,并将其(多部分表单数据)上载到不同的线程中.
根据当前时间戳的哈希值将记录器的outfile更改为新文件.
每30秒重复一次
这样做完全符合我的需要,因为每个30秒的视频文件大小不超过1MB,上传顺利进行.
但我面临的问题是,每次媒体录音机停止再次启动时都会有大约500ms的延迟,所以我在服务器上收到的视频每隔30秒会有500ms的时间,这对我目前的情况非常不利,所以我在想是否有可能只是改变录音机正在写入的文件?
相关代码:
GenericCallback onTickListener = new GenericCallback() {
@Override
public void execute(Object data) {
int timeElapsedInSecs = (int) data;
if (timeElapsedInSecs % pingIntervalInSecs == 0) {
new API(getActivity().getApplicationContext()).pingServer(objInterviewQuestion.getCurrentAccessToken(),
new NetworkCallback() {
@Override
public void execute(int response_code, Object result) {
// TODO: HANDLE callback
}
});
}
if (timeElapsedInSecs % uploadIntervalInSecs == 0 && timeElapsedInSecs < maxTimeInSeconds) {
if (timeElapsedInSecs / uploadIntervalInSecs >= 1) {
if(stopAndResetRecorder()) {
openConnectionToUploadQueue();
uploadQueue.add(
new InterviewAnswer(0,
objInterviewQuestion.getQid(),
objInterviewQuestion.getAvf(),
objInterviewQuestion.getNext(), …Run Code Online (Sandbox Code Playgroud) 我已经工作了一段时间的 android 相机视频流。我首先尝试了 libstreaming 包,但遇到了这个问题。所以我跟着谷歌相机示例代码编写了自己的类。但是在我传递了一个ParcelFileDescriptorto 之后mMediaRecorder.setOutputFile,我收到了这个错误:
E/MediaRecorder: start failed: -2147483648
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: sharedcameraandroid, PID: 14868
java.lang.RuntimeException: start failed.
at android.media.MediaRecorder.start(Native Method)
at MainActivity.startRecordingVideo(MainActivity.java:268)
at MainActivity.setUpMediaRecorder(MainActivity.java:257)
Run Code Online (Sandbox Code Playgroud)
所以,我在网上查,发现这个(OUTPUTFORMAT到3GPP变化), 这要add Thread.sleep和这个。但他们都没有工作。所以我来问是否有人知道如何解决这个问题。
这是我的代码:
private void setUpMediaRecorder() throws IOException {
final Activity activity = mActivity;
if (null == activity) {
return;
}
ParcelFileDescriptor[] parcelFileDescriptors = ParcelFileDescriptor.createPipe();
mParcelRead = new ParcelFileDescriptor(parcelFileDescriptors[0]);
mParcelWrite = new …Run Code Online (Sandbox Code Playgroud)