相关疑难解决方法(0)

Android LocalServerSocket

在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)

java unix sockets java-native-interface android

11
推荐指数
2
解决办法
1万
查看次数

如何在不停止mediarecorder的情况下更改mediarecorder的输出文件

我的项目中有一个要求,即录制视频并将其上传到服务器,但由于移动网络不可靠,开始时我决定每隔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)

c++ java android native-code

10
推荐指数
1
解决办法
2497
查看次数

Android MediaRecorder:启动失败:-2147483648

我已经工作了一段时间的 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)

android video-streaming

6
推荐指数
1
解决办法
846
查看次数