[Asterisk-video] mp4save coredump if no packets video during the	recording
    tech at i6net.com 
    tech at i6net.com
       
    Fri Jan 25 09:25:17 CST 2008
    
    
  
Last nigth I have working in a coredump generated in Thomas's server.
I think I have found the cause.
<<
I have check all your traces, and I have found a problem from the h324m
stack or the video phone :
"No packet is receive after the recording start...".
If no packet is received, the record application have a bug, let me
explain :
- In  the function mp4_save, the structure videoTrack is initalized when
a video packet is receive.
So in your cases, no packet is received.
- After the record (interrupted by an hangup I suppose). The mp4_save
fonction have a end processing with this lines :
    /* Save last video frame if needed */
    if (videoTrack.sampleId > 0)
        /* Save frame */
        mp4_rtp_write_video_frame(&videoTrack, 0);
But the stucture is no initialized (contains hazardous values) and the
mp4 stream datas are not created too.
Then the "if" succeeds and the the record function calls the
mp4_rtp_write_video_frame function with wrong datas.
I have made a modification (I set the videoTrack.sampleId to 0 at the
beginning of the record function).
static int mp4_save(struct ast_channel *chan, void *data)
{
	struct ast_module_user *u;
	struct ast_frame *f;
	struct mp4track audioTrack;
	struct mp4track videoTrack;
	MP4FileHandle mp4;
	MP4TrackId audio = -1;
	MP4TrackId video = -1;
	MP4TrackId hintAudio = -1;
	MP4TrackId hintVideo = -1;
	unsigned char type = 0;
	char *params = NULL;
	int audio_payload, video_payload;
	int loopVideo = 0;
	int waitVideo = 0;
	/* If no video packet received */
	videoTrack.sampleId = 0;
	/* Check for file */
	if (!data)
		return -1;
>>
I have made the correction to Thomas.
He's testing it.
Best regards,
Tech
    
    
More information about the asterisk-video
mailing list