我使用Glide在我的Android应用程序中加载图像.
3.5更新后,开发人员提供了GlideModule接口.
根据这篇文章(Disk Cache)我可以设置缓存目录,使用setDiskCache方法和ExternalCacheDiskCacheFactory.
但我没有看到任何区别.所有缓存仍在默认缓存目录中的内部存储上.
build.gradle:
dependencies {
...
compile 'com.github.bumptech.glide:glide:3.6.1'
}
Run Code Online (Sandbox Code Playgroud)
Android清单:
<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" />
<application ...>
<meta-data
android:name="com.myapp.GlideConfig"
android:value="GlideModule" />
</application>
Run Code Online (Sandbox Code Playgroud)
GlideConfig.java:
public class GlideConfig implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
Log.e("GlideConfig", "MEDIA_MOUNTED");
builder.setDiskCache(
context.getString(R.string.app_name),
419430400));//400Mb
//Environment.getExternalStorageDirectory().getPath()
// + "/"
// + context.getString(R.string.app_name)
}
else {
Log.e("GlideConfig", …Run Code Online (Sandbox Code Playgroud) 我正在使用OnImageAvailableListener获取预览帧:
@Override
public void onImageAvailable(ImageReader reader) {
Image image = null;
try {
image = reader.acquireLatestImage();
Image.Plane[] planes = image.getPlanes();
ByteBuffer buffer = planes[0].getBuffer();
byte[] data = new byte[buffer.capacity()];
buffer.get(data);
//data.length=332803; width=3264; height=2448
Log.e(TAG, "data.length=" + data.length + "; width=" + image.getWidth() + "; height=" + image.getHeight());
//TODO data processing
} catch (Exception e) {
e.printStackTrace();
}
if (image != null) {
image.close();
}
}
Run Code Online (Sandbox Code Playgroud)
每次数据长度不同但图像宽度和高度相同.
主要问题:data.length对于3264x2448这样的分辨率来说太小了.
数据阵列的大小应为3264*2448 = 7,990,272,而不是300,000 - 600,000.
怎么了?
imageReader = ImageReader.newInstance(3264, …Run Code Online (Sandbox Code Playgroud) 我想播放youtube视频Surface,使用MediaPlayer.
所以,我应该把那里直接视频链接.
问题是:如何在Android设备上获取此链接?
像这样的链接:http://gdata.youtube.com/feeds/api/videos/VIDEO_ID
不再可用.可能是因为旧的和不推荐使用的API v2.0.
但是这个网络服务不知怎的做了.
结果链接工作完美.所以它仍然有可能.
以 1080 x 1440 显示预览;使用代码在 iPhone 8 Plus 上获取最大分辨率 (3024 x 4032) 和质量的照片:
capturePhotoOutput?.capturePhoto(with: configurePhotoSettings(), delegate: self)
Run Code Online (Sandbox Code Playgroud)
使用照片设置:
private func configurePhotoSettings() -> AVCapturePhotoSettings {
let photoSettings = AVCapturePhotoSettings()
photoSettings.isHighResolutionPhotoEnabled = true
photoSettings.isAutoStillImageStabilizationEnabled = (capturePhotoOutput?.isStillImageStabilizationSupported)!
photoSettings.isAutoDualCameraFusionEnabled = (capturePhotoOutput?.isDualCameraFusionSupported)!
return photoSettings
}
Run Code Online (Sandbox Code Playgroud)
即使我在didFinishProcessingPhoto.
正在寻找使捕获顺利的解决方案,也许在后台线程中,但目前我被卡住了..
我有8个mp3文件.而且我必须同时播放(不是很接近.肯定会).
我正在使用' AudaCity '来控制精度.但是我的代码没有给我想要的结果......
(异步= 30~90 ms)
所以,这是我的代码:(
首次开始播放)
public void start() {
//songInfo.getMediaPlayer() - it's array of MediaPlayers, source already setted
for (MediaPlayer player : songInfo.getMediaPlayer()) {
try {
if (player != null) {
player.prepare();
player.seekTo(0);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
songInfo.getMediaPlayer()[0]
.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//code for play next setlist
}
});
resume();
}
Run Code Online (Sandbox Code Playgroud)
(暂停)
public void pause() {
for (MediaPlayer player : songInfo.getMediaPlayer()) {
if (player …Run Code Online (Sandbox Code Playgroud) 由于这还没有明确的答案,并且stackoverflow还没有关于Camera 2 API Gamma的问题/答案,因此我寻求使用Android Camera 2 API修改亮度,对比度和Gamma的解决方案。
我的代码来获取范围和步骤:
Rational controlAECompensationStep = characteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP);
if (controlAECompensationStep != null) {
compensationStep = controlAECompensationStep.doubleValue();
}
Range<Integer> controlAECompensationRange = characteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE);
if (controlAECompensationRange != null) {
minCompensationRange = controlAECompensationRange.getLower();
maxCompensationRange = controlAECompensationRange.getUpper();
}
Run Code Online (Sandbox Code Playgroud)
我的方法以百分比设置亮度:
public void setBrightness(int value) {
int brightness = (int) (minCompensationRange + (maxCompensationRange - minCompensationRange) * (value / 100f));
previewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, brightness);
applySettings();
}
private void applySettings() {
try {
captureSession.setRepeatingRequest(previewRequestBuilder.build(), null, …Run Code Online (Sandbox Code Playgroud) 我试图连接GoogleApiClient与Games.API和Auth.GOOGLE_SIGN_IN_API(用于获取用户资料信息).
得到此错误:
java.lang.IllegalStateException: Auth.GOOGLE_SIGN_IN_API cannot be used with Games.API
Run Code Online (Sandbox Code Playgroud)
码:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestProfile()
.build();
googleApiClient = new GoogleApiClient.Builder(activity)
.addConnectionCallbacks(connectionCallbacks)
.addOnConnectionFailedListener(onConnectionFailedListener)
.addApi(Games.API).addScope(Games.SCOPE_GAMES)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
Run Code Online (Sandbox Code Playgroud)
为什么我不能用Games.API有Auth.GOOGLE_SIGN_IN_API?
我有什么选择连接Games.API并获取用户档案信息?
我在 Android 设备上有libstreaming RTSP服务器(打开一些端口并等待客户端p2p 连接)。
我能够通过本地网络连接到服务器。对于外部p2p 连接,我必须使用STUN / TURN。
我读了很多关于Twilio 的文章。他们写了关于TURN server: NETWORK TRAVERSAL 的文章,但实际上并没有提供如何使用它的清晰示例。他们有一些我不需要的现成解决方案。
是否可以将Twilio直接用作视频流的TURN服务器,而无需任何附加功能?
如果没有,我有什么选择?