小编sam*_*gak的帖子

如何使用WebRTC Native Code for Android实现三方电话会议视频聊天?

我正在尝试使用适用于AndroidWebRTC本机代码包(即不使用WebView)在Android应用内部实现3路视频聊天.我使用node.js编写了一个信令服务器,并使用客户端应用程序内的Gottox socket.io java客户端库连接到服务器,交换SDP数据包并建立双向视频聊天连接.

但是现在我遇到的问题不仅仅是三方通话.WebRTC本机代码包附带的AppRTCDemo应用程序仅演示双向呼叫(如果第三方尝试加入房间,则返回"房间已满"消息).

根据这个答案(与Android没有特别关系),我应该通过创建多个PeerConnections来实现,因此每个聊天参与者将连接到其他2个参与者.

但是,当我创建多个PeerConnectionClient(一个包装PeerConection的Java类,它在libjingle_peerconnection_so.so中的本机端实现)时,会从库内部抛出异常,因为它们都试图与访问相机:

E/VideoCapturerAndroid(21170): startCapture failed
E/VideoCapturerAndroid(21170): java.lang.RuntimeException: Fail to connect to camera service
E/VideoCapturerAndroid(21170):  at android.hardware.Camera.native_setup(Native Method)
E/VideoCapturerAndroid(21170):  at android.hardware.Camera.<init>(Camera.java:548)
E/VideoCapturerAndroid(21170):  at android.hardware.Camera.open(Camera.java:389)
E/VideoCapturerAndroid(21170):  at org.webrtc.VideoCapturerAndroid.startCaptureOnCameraThread(VideoCapturerAndroid.java:528)
E/VideoCapturerAndroid(21170):  at org.webrtc.VideoCapturerAndroid.access$11(VideoCapturerAndroid.java:520)
E/VideoCapturerAndroid(21170):  at org.webrtc.VideoCapturerAndroid$6.run(VideoCapturerAndroid.java:514)
E/VideoCapturerAndroid(21170):  at android.os.Handler.handleCallback(Handler.java:733)
E/VideoCapturerAndroid(21170):  at android.os.Handler.dispatchMessage(Handler.java:95)
E/VideoCapturerAndroid(21170):  at android.os.Looper.loop(Looper.java:136)
E/VideoCapturerAndroid(21170):  at org.webrtc.VideoCapturerAndroid$CameraThread.run(VideoCapturerAndroid.java:484)
Run Code Online (Sandbox Code Playgroud)

在尝试建立连接之前初始化本地客户端时会发生这种情况,因此它与node.js,socket.io或任何信令服务器内容无关.

如何让多个PeerConnections共享相机,以便我可以将同一视频发送给多个同行?

我的一个想法是实现某种单独的相机类来取代可以在多个连接之间共享的VideoCapturerAndroid,但我甚至不确定它是否会起作用,我想知道是否有办法做3-在我开始在库内进行黑客攻击之前使用API​​进行调用.

是否可能,如果可能,怎么样?

更新:

我尝试在多个PeerConnectionClients之间共享一个VideoCapturerAndroid对象,仅为第一个连接创建它,并将其传递给后续的初始化函数,但这导致了"Capturer只能被捕获一次!" 从VideoCapturer对象为第二个对等连接创建第二个VideoTrack时出现异常:

E/AndroidRuntime(18956): FATAL EXCEPTION: Thread-1397
E/AndroidRuntime(18956): java.lang.RuntimeException: Capturer can only be taken once!
E/AndroidRuntime(18956):    at org.webrtc.VideoCapturer.takeNativeVideoCapturer(VideoCapturer.java:52) …
Run Code Online (Sandbox Code Playgroud)

java android videochat android-camera webrtc

23
推荐指数
2
解决办法
5637
查看次数

如何创建自定义媒体播放器以在Android中播放自定义编解码器?

这里是n00b(第一个Android项目).我收到了一个与Android固件版本集成的自定义视频编解码器.它是一个.so文件,包含一个继承自MediaPlayerInterface的类,以及一个自定义MediaPlayerService实现,用于从相应文件类型的create()工厂函数返回自定义编解码器类的实例.

我想用这个编解码器,可以在不包含固件的编解码器,通过将.so文件在我的库/ armeabi文件夹,并通过JNI调用它的手机安装一个视频播放器应用程序的一部分.

这个问题的答案我得知,在MediaPlayer框架内无法做到这一点,我必须从头开始创建一个新的媒体播放器.首先,我在Java中实现了一个UI,并将其设置为使用自定义视图(而不是VideoView),该视图扩展了SurfaceView并使用MediaPlayer类的实例来播放视频.然后我用自定义媒体播放器Java类替换了这个MediaPlayer实例.我已经设置了JNI接口,模仿android_media_MediaPlayer.cpp的方式,并在JNI代码中调用MediaPlayer C++类.现在我需要用自定义C++媒体播放器类替换.

这是我开始遇到问题的地方.实施自定义播放器的推荐方法是什么?有吗?除了在源头拖网之外,还有一些关于这些东西的在线文档吗?我可以使用多少框架以及我需要多少重新实现自己?我是否必须实现自己的MediaPlayerService等价物?

任何提示非常感谢.

video android codec media-player mediaplayerservices

14
推荐指数
1
解决办法
7657
查看次数

如何在触发自动对焦时停止相机闪光?

在我的相机应用程序中,当用户点击屏幕时,我使用以下代码触发自动对焦:

mCamera.autoFocus(null);
Run Code Online (Sandbox Code Playgroud)

我还允许用户在选项屏幕中设置相机闪光模式.问题在于,当触发自动对焦时,相机闪光灯有时会在某些手机上触发,用户会抱怨这一点.在大多数这些手机上,可以通过将闪光模式设置为来避免这种情况Parameters.FLASH_MODE_OFF.我已经在Galaxy S2上验证了这一点,但在某些手机(例如Nexus 4)上,它仍然会发生(根据用户报告).

触发自动对焦时,如何可靠地防止相机闪光灯开启?可能吗?

android android-camera camera-api

10
推荐指数
0
解决办法
572
查看次数

AVCaptureVideoPreviewLayer 视频帧大小

我怎样才能得到里面的图像大小AVCaptureVideoPreviewLayer

self.cameraPreviewLayer.frame = self.cameraView.frame; // (0.0, 0.0, 320.0, 568.0)
Run Code Online (Sandbox Code Playgroud)

内部的图像AVCaptureVideoPreviewLayer小于框架。

video frame avfoundation ios swift

8
推荐指数
1
解决办法
3184
查看次数

Dx不支持的类文件版本52.0 ...在解析com/example/test1/BuildConfig.class时

尝试使用JDK 1.8和eclipse neon构建项目时出现以下错误:

[2016-07-03 02:40:59 - Test1] Dx 
PARSE ERROR:

[2016-07-03 02:40:59 - Test1] Dx unsupported class file version 52.0
...while parsing com/example/test1/BuildConfig.class

[2016-07-03 02:40:59 - Test1] Dx 
PARSE ERROR:
[2016-07-03 02:40:59 - Test1] Dx unsupported class file version 52.0
...while parsing com/example/test1/MainActivity.class

[2016-07-03 02:40:59 - Test1] Dx 
PARSE ERROR:
[2016-07-03 02:40:59 - Test1] Dx unsupported class file version 52.0
...while parsing com/example/test1/R.class

[2016-07-03 02:40:59 - Test1] Dx 
PARSE ERROR:
[2016-07-03 02:40:59 - Test1] Dx unsupported class file version 52.0 …
Run Code Online (Sandbox Code Playgroud)

eclipse android java-8 eclipse-neon

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

在应用OpenCV的Viola-Jones方法进行人脸检测之前,我应该考虑哪些预处理图像技术?

基于Viola和Jones 2001/2004描述的技术,我正在学校开展关于面部检测的项目.

我已经读过OpenCV有这个算法的实现,它的工作非常好.

我想知道你是否有任何关于在测试面部存在之前应用于图像的技术(预处理)的建议(例如直方图均衡)?

c opencv computer-vision face-detection

5
推荐指数
1
解决办法
3232
查看次数

EditText提示中的光标不是从右边开始的阿拉伯语

我正在尝试EditText使用提示文本:在英文"password"中..光标正确设置在左侧.但对于提示为"كلمهالمرور"的阿拉伯语,光标始终设置为左侧(提示的结尾)而不是右侧.

<EditText
        android:id="@id/ETPass"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/etUsrName"
        android:layout_marginLeft="@dimen/_25sdp"
        android:layout_marginRight="@dimen/_25sdp"
        android:layout_marginTop="@dimen/_5sdp"
        android:background="@drawable/signup_edittext_input"
        android:ellipsize="start"
        android:gravity="center|right"
        android:hint="@string/Password"
        android:imeOptions="actionNext"
        android:inputType="textPassword"
        android:paddingRight="@dimen/_5sdp"
        android:singleLine="true"
        android:textColor="@color/orange"
        android:textColorHint="@color/orange" />
Run Code Online (Sandbox Code Playgroud)

这种情况只发生在android:inputType="textPassword".对于普通文本,一切正常inputType.

android hint arabic right-to-left android-edittext

5
推荐指数
2
解决办法
1850
查看次数

使用 ImageReader 后,无法在三星 Note5 上使用 Camera2 API 录制视频

正如标题所说,我在使用 Camera2 API 在三星 Note5 上录制视频时遇到问题。

我已经从 Camera2Video 示例中修改了我的代码,但不同之处在于我设置了类中的MediaRecorderusing 配置选项,CamcorderProfile并且在开始视频录制之前进行预览时,我正在捕捉到一个ImageReader以及将预览渲染到一个SurfaceTexture(示例不使用ImageReader)。

这是我的startVideoCapture功能(几乎与示例相同)

private boolean startVideoCapture() {
    if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) {
        debugToast("Can't start video preview");
        return false;
    }
    try {           
        closePreviewSession();
        if(!setUpMediaRecorder())
        {
            debugToast("setUpMediaRecorder failed");
            return false;
        }
        SurfaceTexture texture = mTextureView.getSurfaceTexture();
        assert texture != null;
        texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
        final CaptureRequest.Builder previewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
        List<Surface> surfaces = new ArrayList<Surface>();

        Surface previewSurface = new Surface(texture); …
Run Code Online (Sandbox Code Playgroud)

android samsung-mobile android-camera2

5
推荐指数
1
解决办法
3053
查看次数

Mandelbrot集的多线程计算

我创建了一个创建Mandelbrot集合的程序。现在我正在尝试使其成为多线程。

// mandelbrot.cpp
// compile with: g++ -std=c++11 mandelbrot.cpp -o mandelbrot
// view output with: eog mandelbrot.ppm

#include <fstream>
#include <complex> // if you make use of complex number facilities in C++
#include <iostream>
#include <cstdlib>
#include <thread>
#include <mutex>
#include <vector>


using namespace std;

template <class T> struct RGB { T r, g, b; };

template <class T>
class Matrix {
public:
Matrix(const size_t rows, const size_t cols) : _rows(rows), _cols(cols) {
    _matrix = new T*[rows];
    for …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading fractals mandelbrot

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

数独的javascript递归?

我正在进行一个数独谜题,所以我将所有项目都放在一个数组中.
因此,每当我得到一个无效的数字,我必须递归调用一个函数,但我不能这样做.我无法理解id的问题.

我的方法是:

function checkValidity(x,y) {
    var number = Math.floor((Math.random()) * 10);
    var validnumber = true;
        for (i = 0; i < 9; i++) {
            if (sudokuValueArray[i][y] == number) {
                validnumber = false;
            }
        }
        for (i = 0; i < 9; i++) {
            if (sudokuValueArray[x][i] == number) {
                validnumber = false;
            }
        }
    if(validnumber==true) {
        return number;
    }
    else if(validnumber == false) {
     return   checkValidity(x, y);
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个功能是:

function CreateSudokeSample() {
    for (var x = 0; x < …
Run Code Online (Sandbox Code Playgroud)

javascript sudoku

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

重新安装应用程序时,旧数据出现在SQLite数据库中

我有一个Xamarin Forms应用程序,该应用程序使用SQLite数据库存储用户数据,包括用于通过REST API进行身份验证的登录令牌。

我在Android上遇到一个奇怪的问题,在Visual Studio中通过重新部署应用程序来更新应用程序会导致SQLite数据库中的数据恢复为旧版本(它始终是相同的旧数据)。

我打开SQLiteConnection里面DependencyService像这样:

public SQLite.Net.SQLiteConnection GetConnection()
    {
        var sqliteFilename = "mydatabase.db3";
        string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); // Documents folder
        var path = Path.Combine(documentsPath, sqliteFilename);

        var platform = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid();
        var conn = new SQLite.Net.SQLiteConnection(platform, path);

        // Return the database connection 
        return conn;
    }
Run Code Online (Sandbox Code Playgroud)

登录令牌存储在数据库的一个表中,该表仅包含一行(当前登录的用户)。

从字面上看,打开数据库并读取此令牌是我在App.xaml.cs中要做的第一件事InitializeComponent。然后,我可以注销并再次登录以刷新令牌,并且该应用程序可以正常运行,并且新数据可以在该应用程序的多次打开和关闭中正确保存。

我的问题是,这个过时的令牌来自哪里?

我试图阻止它出现的一些方法:

  • 做了一个干净的应用程序构建(包括手动删除项目中的obj和bin文件夹)。
  • 在Visual Studio中的选项-> Xamarin-> Android设置中未选中“在部署之间保留设备上的应用程序数据缓存”
  • 从设备上卸载了该应用程序。由于数据库存储在System.Environment.SpecialFolder.Personal文件夹中(与相对应/data/user/0/com.example.myapp/files/mydatabase.db3),据我所知,这应该擦除数据库。
  • 已更新为最新版本的Xamarin Forms(2.3.4.231)和Xamarin(4.4.0.34)。SQLite库等都是最新的。

我的应用程序中只有一个地方,我将令牌插入数据库中(当用户登录时),并且我将其记录到控制台中,并且我的应用程序肯定不会将旧令牌重新插入数据库中。我的项目中没有包含此数据的db3文件。无论如何,它将如何到达那里?

此问题仅在最近几周才开始发生,可能是由于更新所致。在此之前,卸载应用程序足以擦除所有数据。

尽管搜索了SQLite和Xamarin文档,但是显然还有一些额外的数据缓存层,尽管我不知道,但是有人可以告诉我它是什么吗?

sqlite android xamarin.forms

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

OpenGL绕组不正确

初始化OpenGL时,我设置了以下内容:

glEnable(GL_CULL_FACE);
glFrontFace(GL_CCW);
glCullFace(GL_FRONT);
Run Code Online (Sandbox Code Playgroud)

然后,我在屏幕上画一个三角形.这就是我所做的一切,真的.但是OpenGL总是使用我指定使用的相反绕组类型glFrontFace.

三角形顶点定义如下:

static GLfloat TRIANGLE[] = {
   0.0f,  0.5f,  0.0f,  // Point 1 on image
  -0.5f, -0.5f,  0.0f,  // Point 2
   0.5f, -0.5f,  0.0f,  // Point 3
};
Run Code Online (Sandbox Code Playgroud)

您可以在以下图片中看到结果:

在此输入图像描述

我期望的是GL_CCW绘制三角形而CL_CW没有.但结果恰恰相反.

我的观点和观点矩阵都是正确的.什么可能导致这个问题?

c++ opengl

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