我想使用 ffmpeg 从 RTSP 视频中获取帧。但是对于上面的 android 10,我收到如下错误。
E/FFmpeg: Exception while trying to run: [Ljava.lang.String;@55e447f
java.io.IOException: Cannot run program "/data/user/0/com.example.downloadimagefromurl/files/ffmpeg": error=13, Permission denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)
at java.lang.Runtime.exec(Runtime.java:698)
at java.lang.Runtime.exec(Runtime.java:563)
at com.github.hiteshsondhi88.libffmpeg.ShellCommand.run(ShellCommand.java:10)
at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:38)
at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:10)
at android.os.AsyncTask$3.call(AsyncTask.java:378)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
Run Code Online (Sandbox Code Playgroud)
正如@Saurabh Thorat 提供的答案一样,Google 不允许应用程序从 /data/user 目录运行二进制文件。
我知道的一个糟糕的解决方案是将 compileSdkVersion 和 targetSdkVersion 更改为 28 或更低,然后重新发布我不推荐的应用程序。
因此,我也在为未来的版本寻找更可行的解决方案。
任何提示、链接或建议将不胜感激。提前致谢。
我是XMPP的新手.
我需要通过XMPP从Openfire获取聊天记录.
我做谷歌搜索但没有得到满意答案.
任何链接或想法都将是很有帮助的.
成功设备root后.现在,我需要使设备始终处于唤醒状态,即始终可见UI,无黑屏或任何白日梦屏幕.为此,我想我要完成以下事项:
我发现的是关于应用层的所有内容,即有一些应用程序可以执行上述任务.但是,由于我的移动设备是根植的,我想用系统文件实现,这样即使其他一些应用程序试图改变上述功能,他们也应该不能这样做.
我的问题与另外两个尚未回答的问题密切相关.
ViewPager没有响应在Fragment中动态创建的布局区域中的触摸
我的垂直ViewPager在我测试的任何设备和任何操作系统5 - 8中运行得非常好.我最近使用Android Pie升级了像素2XL,现在我的Vertical ViewPager似乎没有响应,然后工作,然后就像失去焦点一样,然后工作.拖动页面,它会移动并快速回到原始位置.或者只是反弹回来.再次,类似于上面链接的其他两个问题.
在Android 9之前,垂直滚动和分页是完美的.我尝试使用反射并取得了一些成功.它会刷得更好,似乎也不会失去焦点.但是,如果我尝试用另一只手轻扫,它会停止,或者如果我改变了我滑动的位置,它将会停止.这非常令人困惑.我已经在运行Android 9的设备上添加了复制此问题所需的所有代码.
活动
public class FullscreenActivity extends AppCompatActivity {
VerticalViewPager verticalViewPager;
FragmentStatePagerExample fragmentStatePagerExample;
int pagerPadding;
/**
* Whether or not the system UI should be auto-hidden after
* {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.
*/
private static final boolean AUTO_HIDE = true;
/**
* If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after
* user interaction before hiding the system UI.
*/
private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
/**
* …Run Code Online (Sandbox Code Playgroud) "自动化测试是开发生命周期中不可或缺的一部分."
在Android app proejcts中,我们使用Retrofit和Content Provider/SQLite,dagger实现了MVP,Rx.每个Android应用程序将始终具有服务器通信,将数据存储在本地数据库中,复杂的ui如naviagtion抽屉和回收器视图等,以及难以导航的应用程序流程.
我们想要实现什么?
基于上述,问题很少,
(随意改进检查清单,因为我们不知道在Android移动应用程序的SDLC中测试模块的最佳实践.)最初在这里问.
我很长时间以来一直面临这些问题,而且我对HLS的android支持感到非常失望,因为它的行为太随机了.
要求:
1)播放多个.m3u8视频流
2)应该在不同的设备和api级别上工作.
我所讨论的和各自的问题:
方法 - 1) 具有原生MediaPlayer的TextureView:
播放的视频数量取决于设备,对于某些设备,它只播放一个视频(My Device - samsung galaxy grand quattro - api level 16),对于某些设备,它可以播放所有四个视频流.
取决于api级别,一些.m3u8网址正在使用软糖而不是kitkat.
方法 - 2) ExoPlayer:
方法 - 3) Vitamio:
成功播放每个.m3u8网址
没有多视频视频的支持
方法 - 4) grafika:
我正在寻找的解决方案:
1)应该播放多个视频流,就像上述任何一种方法一样,我的设备可以播放单个视频,但似乎Milestone Mobile能够在我的设备中播放8个视频流(How?:O).
2)如果本机MediaPlayer无法播放某些.m3u8网址,那么如何调试确切的问题就像aac编解码器,解码器,段,.ts文件等有什么问题?
3)如果本机MediaPlayer无法播放流媒体,那么我该如何制作支持大多数流媒体网址的自定义MediaPlayer?
4)是否有可能与Vitamio一起播放多个视频?
5)符合我要求的任何其他HLS客户的参考?
就个人而言,我想选择Method-1,那么有什么我可以做的吗?
这是一个非常奇怪的小米设备的操作系统异常。即使我确实可以从Fabric获取日志,堆栈跟踪也不会引用我的任何代码。
以下是当机详细资料,如rashalytics(Fabric)中所述:
21K崩溃
小米设备上的所有崩溃
在Android OS版本6、7和8上崩溃
崩溃日志:
# OS Version: 8.1.0
# Device: Redmi Note 5 pro
# RAM Free: 30.1%
# Disk Free: 74.2%
#0. Crashed: main
at android.widget.Editor.touchPositionIsInSelection(Editor.java:1084)
at android.widget.Editor.performLongClick(Editor.java:1205)
at android.widget.TextView.performLongClick(TextView.java:10908)
at android.view.View.performLongClick(View.java:6360)
at android.view.View$CheckForLongPress.run(View.java:24768)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:6606)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
--
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.Editor$SelectionModifierCursorController.getMinTouchOffset()' on a null object reference
at android.widget.Editor.touchPositionIsInSelection(Editor.java:1084)
at android.widget.Editor.performLongClick(Editor.java:1205)
at android.widget.TextView.performLongClick(TextView.java:10908)
at android.view.View.performLongClick(View.java:6360)
at android.view.View$CheckForLongPress.run(View.java:24768)
at android.os.Handler.handleCallback(Handler.java:790) …Run Code Online (Sandbox Code Playgroud)屏幕 1:GridView
屏幕 2:详细信息页面
任务达成:
1)从服务器加载gridview中的所有视频。
2)用户点击gridview项的任意位置。
3) 在详细信息屏幕中打开并播放特定视频。
4) 垂直滚动播放下一个或上一个视频。
目前的实施:
GridFragment {
ArrayList<VideoPostModel> videoPostList;
RecyclerView gridView;
onnItemClick() {
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("data", videoPostList);
intent.putExtra("click_index", clickedIndex);
intent.putExtra("pagination_index", paginationIndex);
startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
DetailActivity {
VerticlaViewPager vertiCalViewPager;
ArrayList<VideoPostModel> videoPostList;
onCreate() {
videoPostList = getIntent().getParcelableArrayListExtra("data");
clickedIndex = getIntent().getIntExtra("clickindex", 0);
paginationIndex = getIntent().getIntExtra("pagination_index", 0);
VideoFragmentStatePagerAdapter viewPagerAdapter = new VideoFragmentStatePagerAdapter(videoPostList);
vertiCalViewPager.setAdapter(viewPagerAdapter);
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
如果 videoPostList 在将数据从片段传递到 Activity 时有更多数据(大约 100 多个 VideoPostModel 对象),则应用程序会崩溃,因为有意图发送数据存在限制(/sf/answers/2593838761/)。
黑客替代方案:
1)静态数组列表
2)Application类中的Arraylist
寻找最佳且有效的解决方案来实现上述功能。 …
android android-intent android-layout android-fragments android-viewpager