小编M.G*_*M.G的帖子

Android NDK和FFMPEG构建

我正在尝试使用NDK为我的Android应用程序构建FFMPEG库.我已经从它的网站上下载了源代码,我想我是在构建它(这是我第一次尝试使用NDK和ffmpeg).我已经创建了一个build.sh文件,我用它来从Mac OS X上的命令行执行它.但是我有几个问题......

首先,我知道我需要Android.mk文件,所以我可以在我的应用程序中使用构建库,但我不知道如何做到这一点,原因我上面告诉你.在我运行带有几个文件夹和一些库的build.shI get android文件夹之后.所以我的第一个问题是,我如何构建我需要的Android.mk文件......也许如果有人能解释我为什么需要它.

在此输入图像描述

我的第二个问题是我需要一些来自ffmpeg的库才能在我的应用程序中使用它们,但是在构建之后我无法在源代码树中看到它们.我知道我必须在我身上启用它们,我build.sh想我做到了,但我看不到它们.因此,有关我的构建文件的任何类型的信息将有助于我了解如何配置它.这是它的样子:

    #!/bin/bash
######################################################
# Usage:
# put this script in top of FFmpeg source tree
# ./build_android
# It generates binary for following architectures:
# ARMv6 
# ARMv6+VFP 
# ARMv7+VFPv3-d16 (Tegra2) 
# ARMv7+Neon (Cortex-A8)
# Customizing:
# 1. Feel free to change ./configure parameters for more features
# 2. To adapt other ARM variants
# set $CPU and $OPTIMIZE_CFLAGS 
# call build_one
######################################################
NDK=~/Desktop/android-ndk-r5b
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86
function …
Run Code Online (Sandbox Code Playgroud)

android ffmpeg android-ndk

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

如何从URL显示视频

我的应用程序的主选项卡上有一个按钮,尝试通过第二个活动从URL启动视频

我已经使用空白活动进行了测试,并在单击所述按钮时成功显示"Hello".然后我删除了'Hello'edite文本,并在另一个类似的帖子中建议将代码添加到java文件中.

当点击视频btn时,我收到消息;无法播放此视频,Ok'

我已经测试了youtube链接,它是一个有效的链接.然而,logcat错误消息包括:

10-07 09:04:36.785: I/MediaPlayer(11397): path is null
10-07 09:04:36.795: D/MediaPlayer(11397): setDataSource IOException happend : 
10-07 09:04:36.795: D/MediaPlayer(11397): 
java.io.FileNotFoundException: No content provider: http://youtu.be/RFrg1xFoxeQ 
Run Code Online (Sandbox Code Playgroud)

我从哪里开始?

第二项活动的XML如下: -

<VideoView
    android:id="@+id/videoView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</TableLayout>
Run Code Online (Sandbox Code Playgroud)

对应的Java文件

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_serve_motion_up_together);
    String videoPath2 = "http://youtu.be/RFrg1xFoxeQ";
    VideoView videoView1 = (VideoView) findViewById(R.id.videoView1);

    videoView1.setVideoURI(Uri.parse(videoPath2));
    videoView1.setMediaController(new MediaController(this));
    videoView1.setVisibility(1);
    videoView1.bringToFront();
    videoView1.requestFocus();
    videoView1.start();       

}
Run Code Online (Sandbox Code Playgroud)

logcat的

10-07 09:04:36.765: D/dalvikvm(11397): GC_CONCURRENT freed 97K, 12% free 9619K/10887K, paused 13ms+2ms, total 47ms
10-07 09:04:36.785: V/MediaPlayer(11397): constructor
10-07 09:04:36.785: …
Run Code Online (Sandbox Code Playgroud)

android android-videoview

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

如何创建发出单个事件并仅通知最后订阅的观察者的 LiveData?

我创建了实时数据,它发出单个事件,如本例所示

接下来我的问题是:当 LiveData 中的值发生变化时,如何仅通知最后订阅的观察者?

我想到的是将观察者存储在 SingleLiveData 类的链表中,然后super.observe仅当传递的观察者与列表的最后一个元素相同时才调用。

我不确定这是否是最好的方法。

我想使用这种机制将 FAB 单击事件从活动传播到 ViewPager 内部显示的片段。片段是动态添加到视图寻呼机适配器的,所以假设我们知道片段的顺序。

android android-livedata android-architecture-components android-jetpack

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

LifecycleRegistry的popParentState中的ArrayIndexOutOfBoundsException

我一直面临着这种奇怪的崩溃,当将架构组件添加到片段时,崩溃随机发生我无法通过直接场景重现它我有一个navigation bottom bar控制5个片段,其中一个片段有一个实现LifecycleObserver 崩溃日志的演示者:

Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
       at java.util.ArrayList.remove(ArrayList.java:405)
       at android.arch.lifecycle.LifecycleRegistry.popParentState(LifecycleRegistry.java:194)
       at android.arch.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:293)
       at android.arch.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:332)
       at android.arch.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:137)
       at android.arch.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:123)
       at android.support.v4.app.Fragment.performStart(Fragment.java:2380)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1467)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
       at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
       at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
       at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
       at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
       at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:158)
       at android.app.ActivityThread.main(ActivityThread.java:7225)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Run Code Online (Sandbox Code Playgroud)

更换该片段后发生崩溃,代码跟踪到我的代码从这里开始

getSupportFragmentManager()
                .beginTransaction()
                .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
                .replace(R.id.flMain, fragment, tabModel.getName())
                .addToBackStack(BACK_STACK_ROOT_TAG)
                .commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)

这里有什么可能的问题?

android android-lifecycle android-fragments android-architecture-components android-jetpack

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

忽略navigate()调用:FragmentManager已经保存了它的状态

我使用的是导航MainActivity,然后我开始SecondActivity(对结果).完成后SecondActivity我想继续导航MainActivity,但FragmentManager已经保存了他的状态.

Navigation.findNavController(view).navigate(R.id.action_next, bundle)我收到的日志消息:

Ignoring navigate() call: FragmentManager has already saved its state
Run Code Online (Sandbox Code Playgroud)

我如何继续导航?

android fragmentmanager android-architecture-components android-jetpack android-architecture-navigation

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

Android会议室数据库:如何按名称按字母顺序查询?

所以我使用room数据库在本地持久化用户,现在用户有这个实体类:

@Entity
public class Users{

public string name;
public string email;
@PrimaryKey
public string id;

......

}
Run Code Online (Sandbox Code Playgroud)

我使用看起来像这样的DAO检索所有这些用户:

@DAO
public interface UsersDAO{

@Query("select * from Users")
public List<Users> getAllUsers();


}
Run Code Online (Sandbox Code Playgroud)

上述DAO将按照添加到数据库的顺序读取所有用户.

题:

是否可以按字母顺序按实体name字段查询用户Users

谢谢.

android android-room android-architecture-components android-jetpack

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

如何在Android项目中使用libffmpeg.so?

我正在尝试在Android中创建一个屏幕录制应用程序.为此,我使用的是FFmpeg.我创建了libffmpeg.so文件.现在我想在Android项目中使用相同的方法来调用它的本机函数.我怎样才能做到这一点..?

android ffmpeg android-ndk

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

Android MediaPlayer在启动时崩溃

我有一段代码在某些设备(三星Galaxy S2,Acer A510)上运行得非常好,但在其他设备(HTC One S)上,它使MediaPlayer崩溃.导致问题的代码:

if(file.exists()) {
        mediaPlayer = MediaPlayer.create(this, Uri.fromFile(file));
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.setVolume(100, 100);
        mediaPlayer.start();
    };
Run Code Online (Sandbox Code Playgroud)

我尝试在onPrepared回调或其他创建mediaPlayer的方法中启动它.它们都可以在除HTC之外的任何设备上正常工作.logcat错误:

06-20 15:33:13.810: W/AudioSystem(6021): AudioFlinger server died!
06-20 15:33:13.810: W/IMediaDeathNotifier(6021): media server died
06-20 15:33:13.810: E/MediaPlayer(6021): error (100, 0)
06-20 15:33:13.810: E/MediaPlayer(6021): Mediaserver died in 16 state
06-20 15:33:13.820: I/ServiceManager(6021): Waiting for service media.audio_flinger...
06-20 15:33:14.821: E/MediaPlayer(6021): Error (100,0)
Run Code Online (Sandbox Code Playgroud)

如果有人有任何建议我会很感激他们.

android android-mediaplayer

6
推荐指数
0
解决办法
867
查看次数

Android 4.x是否支持通过TCP传输RTSP?

我已经在Android中使用VideoView成功地在wowza上播放视频.现在我得处理我的服务器,UDP端口似乎被阻止了.使用openRTSP命令的证明:

-> % openRTSP rtsp://61.218.52.250:554/live/ch00_0

Opening connection to 61.218.52.250, port 554...
...remote connection opened
Sending request: OPTIONS rtsp://61.218.52.250:554/live/ch00_0 RTSP/1.0
CSeq: 2
User-Agent: openRTSP (LIVE555 Streaming Media v2013.12.16)


Received 105 new bytes of response data.
Received a complete OPTIONS response:
RTSP/1.0 200 OK
CSeq: 2
Server: UBNT Streaming Server v1.2
Public: DESCRIBE, SETUP, TEARDOWN, PLAY


Sending request: DESCRIBE rtsp://61.218.52.250:554/live/ch00_0 RTSP/1.0
CSeq: 3
User-Agent: openRTSP (LIVE555 Streaming Media v2013.12.16)
Accept: application/sdp


Received 562 new bytes of response data.
Received a complete DESCRIBE …
Run Code Online (Sandbox Code Playgroud)

android udp tcp ffmpeg rtsp

6
推荐指数
0
解决办法
3186
查看次数

RTSP 1080p直播Android客户端获取错误(100,0)

我的新监控摄像头刚到,所以我正在尝试编写一个应用程序来直播视频.

由于它基本上没有文档,我安装了'onvifer'android应用程序,它允许您浏览相机的功能.此应用程序工作正常 - 获取视频并允许PTZ控件等.它将流式网址报告为:

 rtsp://192.1.0.193:554/mpeg4
Run Code Online (Sandbox Code Playgroud)

我在VLC Windows客户端中测试了流,并且它也能够从该URL流式传输视频.这让我觉得网络运行正常.

相机说明进纸量为1920x1080; VLC证实了这一点.

我活动中的基本代码:

VideoView videoView = (VideoView)this.findViewById(R.id.VideoView);
videoView.setVideoURI(Uri.parse("rtsp://192.1.0.193:554/mpeg4"));
videoView.requestFocus();
videoView.start();
Run Code Online (Sandbox Code Playgroud)

我还在AndroidManifest.xml中给出了应用INTERNET权限,在相机上禁用了身份验证,并且在真实设备(而不是模拟器)上运行.

当我运行应用程序时,LogCat立即显示:

setDataSource IOException happend :
java.io.FileNotFoundException: No content provider: rtsp://192.1.0.193:554/mpeg4
at android.content.ContentResolver.openTypedAssetFileDescriptor (ContentResolver.java).
Run Code Online (Sandbox Code Playgroud)

大约15秒后,该应用程序显示"无法播放此视频"模式对话框,并将其添加到LogCat:

MediaPlayer      error (100, 0)
AudioSystem      AudioFlinger server died!
MediaPlayer      error (100, 0)
VideoView        Error: 100,0
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了我能想到的一切,但没有找到任何有用的东西.

有什么想法吗?

android onvif android-videoview

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