标签: stagefright

在Android上使用FFmpeg

我在Android上编译了FFmpeg(libffmpeg.so).现在我必须构建像RockPlayer这样的应用程序或使用现有的Android多媒体框架来调用FFmpeg.

  1. 你有关于在Android/StageFright上集成FFmpeg的步骤/程序/代码/示例吗?

  2. 您能否指导我如何使用此库进行多媒体播放?

  3. 我有一个要求,我已经有音频和视频传输流,我需要将其提供给FFmpeg并进行解码/渲染.我怎么能在Android上这样做,因为IOMX API是基于OMX的,不能在这里插入FFmpeg?

  4. 另外,我找不到需要用于播放的FFmpeg API的文档.

android ffmpeg stagefright android-ffmpeg

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

如何在Android上使用硬件加速视频解码?

我需要为研究项目进行硬件加速的H.264解码,以测试自定义协议.

正如我在网上搜索一样,我发现了一些在Android上执行硬件加速视频解码的方法.

  1. 使用ffmpeg libstagefright(libstagefright 概述)或直接在OS中使用libstagefright,就​​像这里一样.
  2. 在特定硬件平台上使用OpenMax.像这里关于三星设备这里关于高通Snapdragon系列
  3. 有人提到PVplayer,

有些人"说" libstagefright是高通球员明显取得成功的唯一途径.

目前我不确定哪种方式可行.我现在有点困惑.如果一切正常,我当然更喜欢硬件无关的方法.

由于我用Galaxy Tab 7.7(3.2和Enxyos),VLC,Mobo,Rock,vplayer,rock和mobo测试了几个视频播放器的H/W加速度,VLC无法正常工作,vplayer似乎有渲染花费其性能的bug.

无论如何,我在Rockplayer上做了一个'操作'并删除了data\data\com.redirecting\rockplayer中的所有.so库,软件解码崩溃了,而hw解码工作仍然很好!我想知道他们是怎么做到的.在我看来,hw加速可以独立于硬件平台.

有人可以解决这个问题吗?或者提供任何参考资料或更多细节?

video android h.264 hardware-acceleration stagefright

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

如何在没有MediaExtractor的情况下为H264使用MediaCodec

我需要在没有MediaExtractor的情况下使用MediaCodec,我正在使用FileInputStream读取文件.目前它不工作,它在屏幕上显示绿色的乱码图像.

这是完整的源代码:

FileInputStream in = new FileInputStream("/sdcard/sample.ts");

String mimeType = "video/avc";
MediaCodec decoder = MediaCodec.createDecoderByType(mimeType);
MediaFormat format = MediaFormat.createVideoFormat(mimeType, 1920, 1080);

byte[] header_sps = { 0, 0, 0, 1, 103, 100, 0, 40, -84, 52, -59, 1, -32, 17, 31, 120, 11, 80, 16, 16, 31, 0, 0, 3, 3, -23, 0, 0, -22, 96, -108 };
byte[] header_pps = { 0, 0, 0, 1, 104, -18, 60, -128 };
format.setByteBuffer("csd-0", ByteBuffer.wrap(header_sps));
format.setByteBuffer("csd-1", ByteBuffer.wrap(header_pps));
format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 1920 * 1080);
format.setInteger("durationUs", 63446722); …
Run Code Online (Sandbox Code Playgroud)

android transport-stream h.264 stagefright mediacodec

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

Stagefright架构

有没有解释android Stagefright架构的文档?

我可以就这些主题得到一些指示吗?

android stagefright

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

Android - 在我自己的项目中包含原生StageFright功能

我目前正在开发一种应用程序,它需要记录音频,将其编码为AAC,对其进行流式传输,并在反向中执行相同的操作 - 接收流,解码AAC和播放音频.

我使用MediaRecorder成功录制了AAC(包装在MP4容器中),并使用AudioRecord类成功上传了音频.但是,我需要能够在流式传输时对音频进行编码,但这些类似乎都没有帮助我这样做.

我研究了一下,发现大多数有这个问题的人最终都使用像ffmpeg这样的本地库.

但我想知道,因为Android已经包含StageFright,它具有可以进行编码和解码的本机代码(例如,AAC编码AAC解码),有没有办法在我的应用程序上使用这些本机代码?我怎样才能做到这一点?

如果我只需要用他们的本机代码实现一些JNI类,那就太好了.另外,因为它是一个Android库,所以不会出现许可问题(如果我错了,请纠正我).

android native aac stream stagefright

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

为什么我会收到"不支持的格式"错误,使用Android MediaPlayer读取H.264编码的rtsp流?

我想在Android设备上显示H.264编码的rtsp视频.该流来自Raspberry Pi,使用vlc编码/dev/video1,这是一个"Pi NoIR相机板".

vlc-wrapper -vvv v4l2:///dev/video1 --v4l2-width $WIDTH --v4l2-height $HEIGHT --v4l2-fps ${FPS}.0 --v4l2-chroma h264 --no-audio --no-osd --sout "#rtp{sdp=rtsp://:8000/pi.sdp}" :demux=h264 > /tmp/vlc-wrapper.log 2>&1
Run Code Online (Sandbox Code Playgroud)

我现在正在使用非常少的Android代码:

final MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDisplay(holder);
try {
  mediaPlayer.setDataSource(url);
  mediaPlayer.prepare();
Run Code Online (Sandbox Code Playgroud)

并获得"准备失败:状态= 0x1" IOException.当我查看日志时,我会看到类似的行

06-02 16:28:05.566 W/APacketSource(  316): Format:video 0 RTP/AVP 96  / MIME-Type:H264/90000
06-02 16:28:05.566 W/MyHandler(  316): Unsupported format. Ignoring track #1.
06-02 16:28:05.566 I/MyHandler(  316): SETUP(1) completed with result -1010 (Unknown error 1010)
Run Code Online (Sandbox Code Playgroud)

来自系统过程.Grepping这些消息指向 libstagefright/rtsp源,似乎意味着构造函数中的ASessionDescription::getDimensions调用APacketSource::APacketSource失败.这似乎不应该发生,因为VLC肯定知道要输出的维度: …

android h.264 stagefright android-mediaplayer

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

FFmpeg支持libstagefright硬件解码

大家:我是ffmpeg的新手.最近我正在研究将ffmpeg移植到android设备的项目.一开始,我按照互联网上的一些指南以非常正常的方式将ffmpeg编译为共享库(.so文件),将它们加载到我的Android应用程序中.它完美地运作.

现在我希望ffmpeg使用libstagefright来实现硬件解码.问题是,我可以编译.so库,但是当我启动我的应用并加载那些.so库时,总会有一个java.lang.UnsatisfiedLinkError:无法加载库:reloc_library [1314]:114找不到'_ZN7android11MediaBufferC1Ej'

我在那里呆了几天.有没有人遇到过类似的问题?如果有人能给我一些关于这个错误的提示,那就太好了.

我的步骤:1.将ffmpeg-2.1.4源代码编译为.so共享库.我使用build_libstagefright脚本执行此操作,并根据Internet的某些指南进行一些修改.

#!/bin/bash
#export NDK=/home/mingzhang/android/android-ndk-r9c
export NDK=/home/mingzhang/android/android-ndk-r7
if [ "$NDK" = "" ]; then
    echo NDK variable not set, assuming ${HOME}/android-ndk
    export NDK=${HOME}/android-ndk
fi

echo "Fetching Android system headers"
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_base.git ../android-source/frameworks/base
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_av.git ../android-source/frameworks/av
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_native.git ../android-source/frameworks/native
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_hardware_libhardware.git ../android-source/hardware/libhardware
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_system_core.git ../android-source/system/core

echo "Fetching Android libraries for linking"
# Libraries from any froyo/gingerbread device/emulator should …
Run Code Online (Sandbox Code Playgroud)

video android ffmpeg android-ndk stagefright

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

可以在App中覆盖系统.so库

我必须修改Android Media Player的Http Live Streaming实现.该实现在stagefright库 http://androidxref.com/4.0.4/xref/frameworks/base/media/libstagefright/httplive/LiveDataSource.cpp下

我认为这些库将编译为libstagefright.so,它应该是Android系统的一部分.

我的问题是,如果我对这个库进行一些更改并编译一个新的libstagefright.so.如果我在我的新应用程序中加载这个新的libstagefright.so并调用媒体播放器,它是否会使用我的新libstagefright.so中的代码?

android android-ndk stagefright android-mediaplayer

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

Android:如何将解码器集成到多媒体框架中

最近我已经成功地将视频解码器移植到了android.还将输出转储到surfaceview上并使用本机API检查输出.现在,下一个任务是实现播放,暂停,流媒体等,即媒体播放器的其他功能.这样做将是一个返工,因为所有这些功能已经在android多媒体框架中定义.我听说我们可以将解码器作为插件,并将其集成到Android的多媒体框架中.虽然我用谷歌搜索相同的,我几乎找不到任何关于相同的信息.所以我请求任何读者为上述问题提出一些相关链接或解决方案.提前致谢,等待您的回复.

android android-ndk android-framework stagefright android-mediaplayer

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

MediaCodec如何在Android框架内找到编解码器?

我试图了解MediaCodec如何用于硬件解码.

我在android内部的知识非常有限.

以下是我的发现:

有一个xml文件,代表android系统中的编解码器细节.

 device/ti/omap3evm/media_codecs.xml for an example. 
Run Code Online (Sandbox Code Playgroud)

这意味着,如果我们使用Media Codec从Java Application创建编解码器

MediaCodec codec = MediaCodec.createDecoderByType(type);
Run Code Online (Sandbox Code Playgroud)

应该在xml文件的帮助下找出各自的编码器.

我在做什么?

我试图找出代码的哪一部分正在读取xml并根据给定的'type'找到编解码器.

1)应用层:

   MediaCodec codec = MediaCodec.createDecoderByType(type);
Run Code Online (Sandbox Code Playgroud)

2)MediaCodec.java - > [ frameworks/base/media/java/android/media/MediaCodec.java ]

     public static MediaCodec createDecoderByType(String type) {

    return new MediaCodec(type, true /* nameIsType */, false /* encoder */);
}
Run Code Online (Sandbox Code Playgroud)

3)

private MediaCodec(
        String name, boolean nameIsType, boolean encoder) {
    native_setup(name, nameIsType, encoder);    --> JNI Call.
}
Run Code Online (Sandbox Code Playgroud)

4)JNI实现 - > [ frameworks/base/media/jni/android_media_MediaCodec.cpp ]

static void android_media_MediaCodec_native_setup (..) {
        .......
    const char *tmp = …
Run Code Online (Sandbox Code Playgroud)

android opencore android-internet stagefright openmax

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