我在Android上使用RTMP下载流。如果我第一次运行库一切正常。第二次应用程序没有启动RTMP下载:/
我搜索过去三天并知道我无法加载本机库两次或只是卸载它,我有三个选项来处理我的问题:
dlopen
加载RTMP库的本机库,并通过dlclose
关闭它。我不知道任何进一步的选择:/我甚至不知道如何编写本地库来加载其他库:/
我使用了这个RTMP转储:https://github.com/eschriek/rtmpdump-android
答案 0 :(得分:0)
好的,我发现找到了办法:)也许这不是一个漂亮的,但它运作良好:
创建服务:
import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
public class rtmpdumpService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
config = this;
String extras = "";
if(intent != null){
//Get needed information
extras = intent.getExtras().getString("rtmp");
}
else {
this.stopSelf();
}
doWork(extras);
}
@Override
public void onDestroy() {
super.onDestroy();
}
public void doWork(String rtmp){
//Do work here: for example rtmpdump
Rtmpdump dump = new Rtmpdump();
dump.parseString(params[0]);
System.exit(0);
this.stopSelf();
}
}
在AndroidManifest中注册具有这些属性的服务
android:name=".rtmpdumpService" android:exported="false" android:process=":rtmp"
开始服务:
Intent rtmpdumpIntent = new Intent(getApplicationContext(), rtmpdumpService.class); eSendIntent.putExtra("rtmp", "RTMP CODE"); startService(rtmpdumpIntent);
有时你必须等到它完成:
服务启动后(startService(rtmpdumpIntent):
)do {
try {
Thread.sleep(500);
}
catch (InterruptedException e) {
//Log
}
} while( isServiceRunning(rtmpdumpService.class) == true);
isServiceRunning函数:
private boolean isServiceRunning(Class cl) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (cl.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}