我尝试通过VideoView
和MediaPlayer
播放RTSP直播...我能够获得AAC音频和H264视频流。但是在15-20分钟之后,RTSP堆栈变得越来越大,而且我的应用程序和平板电脑也崩溃了......那么是否有任何增加Android源代码中RTSP堆栈大小的解决方案? (我有完整的AOSP ICS代码)。任何形式的帮助都很明显。
@Ganesh请在下面找到应用程序源代码。
package com.example.testvideo;
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.widget.VideoView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
VideoView videoDisplay = (VideoView) findViewById(R.id.videoview);
videoDisplay.setVideoPath("rtsp://192.168.2.160:554/live/av0?user=admin&passwd=admin");
videoDisplay.start();
/*VideoView videoDisplay2 = (VideoView) findViewById(R.id.videoview2);
videoDisplay2.setVideoPath("rtsp://192.168.2.160:554/live/av1?user=admin&passwd=admin");
//videoDisplay2.start();
*/
try {
File filename = new File(Environment.getExternalStorageDirectory()+"/Sample_log_file.txt");
filename.createNewFile();
String cmd = "logcat -d -f "+filename.getAbsolutePath();
Runtime.getRuntime().exec(cmd);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
答案 0 :(得分:0)
从附带的here日志中,我观察到以下内容:
Line no. 4060: F/libc ( 1203): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
这意味着您的代码崩溃了。进一步在日志中,
Line no. 4084: I/DEBUG ( 83): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
从崩溃日志的堆栈跟踪中
I/DEBUG ( 83): #00 pc 0000db2c /system/lib/libc.so (memcpy)
I/DEBUG ( 83): #01 pc 000710ec /system/lib/libCedarX.so (rtsp_demux_read)
I/DEBUG ( 83): #02 pc 000636dc /system/lib/libCedarX.so
I/DEBUG ( 83): #03 pc 00012be4 /system/lib/libc.so (__thread_entry)
I/DEBUG ( 83): #04 pc 00012738 /system/lib/libc.so (pthread_create)
<强>结论:强>
从这些观点来看,我得出结论,在rtsp_demux_read
函数中,有一个memcpy
调用。当程序崩溃时,您已将NULL
指针作为目标传递给memcpy
函数。您需要进一步调试代码,了解为什么会发生这种情况。