我正在开发一个Android应用程序,应该能够将视频流式传输到我的网络上的本地服务器,而无需将其存储在SD卡上.
为此,我在C#中使用了一个简单的套接字应用程序来监听特定的IP:PORT
在Android部分,我设置了setOutputFile()这个IP:PORT使用套接字.
此应用程序在Android手机上完美启动,但它不显示预览,当我开始录制时,它会毫无例外地退出.它也不会向网络发送任何数据流.
当我设置setOutPutFile()为SD卡时,它可以正常工作并录制视频.
对于服务器部分,当我从任何其他应用程序(从PC)向同一IP:PORT发送数据时,它会接收数据.
简而言之,我想使用socket进行流媒体建立PC和Android之间的通信通道.
这是我的Android代码:
Socket soc=new Socket("192.168.1.3",8210);
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(soc);
...
...
// other Recorder setup steps
...
...
Recorder.setOutputFile(pfd.getFileDescriptor()); // working fine for sdcard
Recorder.setPreviewDisplay(holder.getSurface());
Recorder.prepare();
Run Code Online (Sandbox Code Playgroud)
这是我在C#中的服务器应用程序并在PC上运行:
socketForServer = new TcpClient("192.168.1.3", 8210);
NetworkStream networkStream = socketForServer.GetStream();
byte[] rData = new byte[1024];
networkStream.Read(rData, 0, 1024);
...
...
// process rData
...
...
Run Code Online (Sandbox Code Playgroud)
我无法理解这里发生的问题.我正朝着正确的方向前进吗?
我正在尝试(再次)创建实际上正常工作的相机预览逻辑,适用于所有场景:
android.hardware.Camera 和 android.hardware.camera2因为我minSdkVersion15岁,因为我并不特别关心表现,所以我试图用一个TextureView.并且,根据fadden在这里和这里的地方的建议,我试图setTransform()在TextureView适当的情况下使用Matrix它:
TextureView完全填充,以TextureView纵横比与预览帧宽高比不匹配的裁剪为代价在我的情况下,TextureView填充屏幕,减去状态栏和导航栏.
adjustAspectRatio()从GrafikaPlayMovieActivity.java开始,我现在有:
private void adjustAspectRatio(int videoWidth, int videoHeight,
int rotation) {
if (iCanHazPhone) {
int temp=videoWidth;
videoWidth=videoHeight;
videoHeight=temp;
}
int viewWidth=getWidth();
int viewHeight=getHeight();
double aspectRatio=(double)videoHeight/(double)videoWidth;
int newWidth, newHeight;
if (getHeight()>(int)(viewWidth*aspectRatio)) {
newWidth=(int)(viewHeight/aspectRatio);
newHeight=viewHeight;
}
else {
newWidth=viewWidth;
newHeight=(int)(viewWidth*aspectRatio);
}
int xoff=(viewWidth-newWidth)/2;
int yoff=(viewHeight-newHeight)/2;
Matrix …Run Code Online (Sandbox Code Playgroud) 我已经尝试了几个我在网上找到的答案,例如:
Camera.Parameters parameters = mCamera.getParameters();
parameters.set("camera-id", 2);
mCamera.setParameters(parameters);
Run Code Online (Sandbox Code Playgroud)
要么
mMediaRecorder.setVideoSource(2);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我还在清单文件上设置了权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?我已经搜索了StackOverflow,我知道之前已经问过这个问题,但似乎没有确定的解决方案,任何形式的帮助都将受到赞赏.
注意:我在2.1平台上使用Galaxy S.
我要做的是:打开相机并将拍摄的照片保存在SD卡中,但是当相机活动开始时,我会收到一个自动生成的警告,显示在"吐司"中并说:"之前插入SD卡使用相机"
注意:我正在使用模拟器.
任何想法如何解决这个问题?

我的相机应用程序有问题.相机活动处于纵向模式.所以我给了
camera.setDisplayOrientation(90);
Run Code Online (Sandbox Code Playgroud)
根据SO中的不同帖子,这将在纵向模式下正常工作.
但它不能正常使用不同的设备.问题是,预览向左或向右旋转90度.在Htc中没关系.但是对于Galaxy系列,它不起作用.
谁能帮我 ?
我有一个完全正常工作的应用程序.我的Camera Intent或权限只有1个问题.
该应用程序应该在用户按下按钮时启动Camera Activity.这工作正常,但当用户通过单击相机上的确定按钮接受图片时,它不会回到我的应用程序.如果按下相机上的取消按钮,它会按预期返回到我的应用程序.
我已经阅读了我在这里可以找到的所有类似问题,但没有一个能解决我的问题.我需要告诉相机确切的保存图像的位置,因为我想在我的应用程序中交替2.这是创建Camera Intent并启动它的代码:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.parse(imagePath));
startActivityForResult(intent, 11);
Run Code Online (Sandbox Code Playgroud)
我已经尝试了多个值imagePath(这是一个字符串),但是相机的OK按钮没有使用它们中的任何一个.这些是我尝试过的路径:
/mnt/sdcard/<appName>/cameraImages/image1.jpg
from Environment.getExternalStorageDirectory()
/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg
from context.getExternalCacheDir()
/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg
from context.getCacheDir()
Run Code Online (Sandbox Code Playgroud)
我的清单文件中有以下权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
你能帮助我弄清楚我的代码有什么问题,或者告诉我一条有效的路径是什么?我更喜欢图像存储在缓存位置,因为在用户离开应用程序后图像继续存在并不重要,但我并不关心谁有权访问图像.
我正在4.1模拟器上进行所有测试,使用4.1 SDK进行编译,我的最低版本是API 8(2.2).
我已经为意图提出了一个案例onActivityResult(),但我不认为你们需要看到那些代码,因为它不应该影响问题.
我正在创建一个具有首选项活动的应用程序,其中列表首选项条目有问题.这个应用程序在我的模拟器上工作正常,但我在移动设备上测试我的应用程序时显示错误
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
at android.widget.AbsListView.obtainView(AbsListView.java:2033)
Run Code Online (Sandbox Code Playgroud)
当我在移动设备中单击该列表首选项时,会出现此问题.这是我的代码
prference.xml
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/settings">
<ListPreference
android:key="@string/resolution"
android:title="@string/imageres"
android:summary="@string/summaryres"
android:dialogTitle="@string/resFormat"
/>
</PreferenceCategory>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
settings.java
package com.example;
import android.database.Cursor;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
public class Settings extends PreferenceActivity {
private SQLiteoperations SQLiteAdapter;
DTO get;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
get = (DTO) getIntent().getExtras().get("obj");
SQLiteAdapter = new SQLiteoperations(this);
SQLiteAdapter.openToWrite();
addPreferencesFromResource(R.xml.preferences);
ListPreference pref = (ListPreference) findPreference("resolution");
pref.setEntries(getEntries());
pref.setEntryValues(getEntries());
System.out.println("after set entries");
System.out.println(get.getDefaultvalues());
pref.setDefaultValue(get.getDefaultvalues());
}
private CharSequence[] getEntries() …Run Code Online (Sandbox Code Playgroud) android preferenceactivity android-preferences android-camera
我知道在Galaxy Samsung SIII中可以在设置中配置一个选项,以避免在用户查看屏幕时屏幕关闭.我认为手机使用相机或一种存在传感器.
是否可以在fragment相似的视图中使用相机,以便它不会打开另一个应用程序并远离我的特殊应用程序?
我想要一些像SurfaceView相机一样的东西?
我正在尝试让Android camera2在后台服务中运行,然后在回调ImageReader.OnImageAvailableListener中处理帧.我已经使用建议的原始格式YUV_420_888来获得最大fps,但是我只能在分辨率640x480上获得7fps左右.这甚至比我使用旧的Camera接口(我想升级到Camera2以获得更高的fps)或使用OpenCV JavaCameraView(我不能使用它,因为我需要在后台服务中运行处理)更慢.
以下是我的服务类.我错过了什么?
我的手机是运行Android 5.0.2的Redmi Note 3
public class Camera2ServiceYUV extends Service {
protected static final String TAG = "VideoProcessing";
protected static final int CAMERACHOICE = CameraCharacteristics.LENS_FACING_BACK;
protected CameraDevice cameraDevice;
protected CameraCaptureSession captureSession;
protected ImageReader imageReader;
// A semaphore to prevent the app from exiting before closing the camera.
private Semaphore mCameraOpenCloseLock = new Semaphore(1);
public static final String RESULT_RECEIVER = "resultReceiver";
private static final int JPEG_COMPRESSION = 90;
public static final int RESULT_OK = 0;
public static final …Run Code Online (Sandbox Code Playgroud) android ×10
android-camera ×10
camera ×1
fragment ×1
java ×1
opencv ×1
orientation ×1
textureview ×1
user-input ×1