在/ data / app-lib /中没有找到JNI_OnLoad,在0x2d000005(代码= 1)出现了致命信号11(SIGSEGV)

时间:2018-11-15 12:14:08

标签: android streaming live

自一个月以来,我一直在努力在没有成功的情况下在Android上添加符合mpegts isomedia的音频文件。我在github上的c ++中使用了这个库,并通过共享库修改了main方法与Java一起使用。

extern "C" JNIEXPORT jint JNICALL Java_com_isomedia_cmd_mpegtscmd_executecopy(JNIEnv *env, jclass cls, std::string *in_file, std::string *out_file )

{

const char* in_file_name = in_file->c_str();
const char* out_file_name = out_file->c_str();

std::cout << "input ts: " << in_file_name << std::endl;
std::cout << "output ts: " << out_file_name << std::endl;

std::ifstream ifile(in_file_name, std::ios::binary | std::ios::in); // declare un flux permettant de lire dans input file
std::ofstream outts(out_file_name, std::ios::binary); // declare un flux pour ecrire dans output file

std::tr1::shared_ptr<MpegTsMuxer> muxer(new MpegTsMuxer);

MpegTsDemuxer demuxer;
char packet[188] = { 0 };

SimpleBuffer in;
SimpleBuffer out;

while (!ifile.eof()) {
    ifile.read(packet, 188);
    in.append(packet, 188);

    TsFrame *frame = 0; //nullptr; You can only use nullptr in Visual Studio 2010 and newer, it is a C++11 feature.
    demuxer.decode(&in, frame);

    write_file(frame);
    if (frame) {
        muxer->encode(frame, demuxer.stream_pid_map, &out);
        outts.write(out.data(), out.size());
        out.erase(out.size());
    }
}

ifile.close();
for (auto it = file_map.begin(); it != file_map.end(); it++) {
    it->second->close();
}

return 0;

}

在Java中的加载库之后,我调用这样的方法

mpegtscmd.executecopy(f_in.getAbsolutePath(),f_out.getAbsolutePath());

两个文件都在同一目录中创建,但是没有数据填充错误导致程序崩溃

No JNI_OnLoad found in /data/app-lib/ +  Fatal signal 11 (SIGSEGV) at 0x2d000005 (code=1)

我想做的是读取f_in文件中的AAC_ADTS_data以添加TS数据包并放入f_out中。我精确地指出,当我仅记录f_in时,数据就可以毫无问题地写入f_in中。感谢您的支持。

0 个答案:

没有答案