1

我试图通过两者播放 RTSP 实时流,VideoView并且MediaPlayer......我能够获得 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;
    }

}
4

1 回答 1

0

此处附加的日志中,我观察到以下打印:

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。您需要进一步调试代码以了解为什么会发生这种情况。

于 2013-03-17T12:44:57.077 回答