求教,是否直接可以调用android的libmedia.so库进行音频播放

问题描述

问题: 在C++代码中是否可以调用android系统的libmedia.so, 我用C++写了一个测试程序,调用了libmedia.so中mediaplayer.cpp中的方法进行音频播放,可以通过编译,也可以在android系统的机顶盒中执行,但是prepare()方法一直被阻塞,求大神指点该如何解决啊,给点思路好吗?以下是测试代码:

#include <stdio.h>

#include <stdlib.h>

#include <mediaplayer.h>

using namespace android;

int main()

{

int iRet = 0;

MediaPlayer *p= new MediaPlayer();

iRet = p->setDataSource("/data/j2me/phoneme-cache/061075.midi", NULL);

if (0 != iRet)

{

printf("[setDataSource] iRet = %d\n", iRet);

}

iRet = p->setAudioStreamType(3);

if (0 != iRet)

{

printf("[setAudioStreamType] iRet = %d\n", iRet);

}

iRet = p->prepare();

if (0 != iRet)

{

printf("[prepare] iRet = %d\n", iRet);

}

iRet = p->start();

if (0 != iRet)

{

printf("[start] iRet = %d\n", iRet);

}

p->stop();

return 0;

}

解决方案1

引用 3 楼 dengxuguang 的回复:

Quote: 引用 2 楼 guoyoulei520 的回复:

Quote: 引用 1 楼 dengxuguang 的回复:

求来人指点啊, 纠结好几天了,再不解决就要崩溃了。。。。。

你看下android源码中libmedia的调用流程。。。

看了,流程从上到下是MediaPlayer--->libmedia_jni.so---->libmedia.so------->libmediaplayerserver.so------>ALSA库。

音频播放流程就是 setDatasource()\prepare()\start().......

但直接通过so库调用就是有问题

求指点

java层播放媒体的代码也有setDatasource. prepare.其对应 的流程你也看过了吧....

是不是权限或其它的问题?看下prepare函数,什么情况下会阻塞 啊

时间: 2024-10-12 13:07:28

求教,是否直接可以调用android的libmedia.so库进行音频播放的相关文章

调用android的Camera 执行结果没有回调onActivityResult()

============问题描述============ 我调用android系统的 camera : Uri uri = Uri.fromFile(new File(imagepath)); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); mactivity.startActivityForResult(intent,2); 打

调用Android系统安装的软件打开文件,程序停止运行

问题描述 如题,调用Android系统安装的软件打开文件时,当系统有安装相关软件时程序正常运行,但是当系统找不到该文件类型匹配的软件时就停止运行了.现在我想让它找不到相应软件时能提示用户,而不是直接停止运行,代码应该怎么写,求大神赐教!!! 解决方案1 或者捕捉startActivity的异常,但是这种方式比较粗暴. 解决方案2 try {     //把你7楼的代码放在这里 } catch (Exception e) {     //提示用户没有找到 } 解决方案3 何必呢,直接使用 // 获

针对Android平台我们需要学习如何在Unity中调用Android的JAVA代码。

Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发者,开发者可以在工程的基础上继续添加新的视图,最后由开发者自行打包生成IPA包,发布程序.而Unity for Android打包直接生成APK包,等于说源代码开发者是看不到的,但是Unity的自身确实有些局限,针对Android平台我们需要学习如何在Unity中调用Android的JAVA代码.本章我们的目标是使用Unity的脚本打开Activity.首先我们创建一个普通的Android

cocos2d-x调用android内嵌浏览器打开网页

cocos2d-x调用android内嵌浏览器打开网页,可以从入口传入网址,C++调用android 的api即可实现.方法也很简单 1. 修改"cocos2dx\platform\win32"下的CCApplication.h和CCApplication.cpp,添加函数 头文件声明 void openURL(const char* pszUrl); cpp文件实现: void CCApplication::openURL(const char* pszUrl) { ShellExe

在webView 中使用JS 调用 Android / IOS的函数 Function

最近做一个项目,混合了NativeCode 和 HTML,为了便于JS 调用App的一些方法,统一封装一个Js方法,记录如下 Android 端首先要再WebView中允许JS的调用 WebView myWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); myWebView

通过浏览器调用Android或iOS应用

在做移动应用单点登录的时候,需要在浏览器里点击链接启动APP并将参数传到APP里的相应接口进行处理,现将通过浏览器调用Android和iOS应用的实现过程整理出来固化到博客,以便查询. 一:通过浏览器调用Android应用 1)修改配置文件AndroidManifest.xml,在需要打开的activity下添加如下配置: <intent-filter> <data android:scheme="ssotest" /><!-- 通过这个ssotest打开

WebView中JS调用Android Method 遇到的坑整理

WebView是android中常用的一个组件,其作用是展示网页,并让网页和android app进行一些业务逻辑上的交互. 其坑无数,相信用过的都知道,一个一个来解决吧. 1.怎么互调: <!DOCTYPE> <html> <head> <meta charset="UTF-8"> <script type="text/javascript"> function android(bl){ if(bl){

QtAndroid详解(5):JNI调用Android系统功能(2)

在"QtAndroid详解(4):JNI调用Android系统功能(1)"中我们给出了一些简单的示例,演示了如何使用 Qt JNI 类库访问网络状态.系统资源目录.当前应用信息等等,这次呢,我们提供一些新的示例,这些示例可能更具实际意义.本文的示例包括: 震动 让屏幕常亮 动态改变应用的显示方向(横屏.竖屏) 调节屏幕亮度 设置铃声模式 示例介绍 图1 我们按照界面上的顺序,一个一个来看这些功能如何实现. 源码分析 构建界面的代码在 Widget 类的构造函数里,不说了.这次我们换个搞

Unity调用Android的Activity

之前http://shuxiayeshou.blog.51cto.com/4452347/1932216 写了关于Unity与Android结合所遇到的问题及解决方法 总结一下,Unity做一个简单的场景,AndroidStudio建一个简单的项目,其中MainActivity是要继承自 UnityPlayerActivity的,这样Unity程序可以调用Android端MainActivity的方法了 那如果Android项目中还有一个NewActivity,我们要通过Unity把他打开咋办呢