Hi Mr Finlayson

Sorry just found out that you've replied question, I went through live555 mail 
archives trying to find some answer.


?  There is no bug in the LIVE555 code.  There is perhaps a bug in the custom 
code that the server uses to feed NAL units from the camera to the server.

Correct, it was only my assumption, the more I learn from mailing list, it is 
intended to send frames in multiple packets, you already mentioned the 
advantage of this from your older email.


?  What is the value of the "numTruncatedBytes" parameter to this call?  If 
it's >0, then this means that the supplied buffer size (the "maxSize" parameter 
to the call to "getNextFrame()" was too small, and needs to be increased.


This one already answered, I didn't get any error since my buffer is well above 
the maxSize therefore numTruncatedBytes is always 0.

Let me rephrase my problem from my findings, for older camera I get the data 
from getNextFrame() as follows

Nal         Remark
32           VPS
33           SPS
34           PPS
19           I-Frame (full size)
1              P-Frame (full size)
...
1              P-Frame (full size)

These I & P frames can be fed to the decoder and I can get the picture without 
problem.

For latest HEVC stream camera, the data will look like this
Nal         Remark
32           VPS
33           SPS
34           PPS
39           Prefix
19           I-Frame (1/3 size)
19           I-Frame (1/3 size)
19           I-Frame (1/3 size)
39           Prefix
1              P-Frame (1/3 size)
1              P-Frame (1/3 size)
1              P-Frame (1/3 size)
....
39           Prefix
1              P-Frame (1/3 size)
1              P-Frame (1/3 size)
1              P-Frame (1/3 size)
That's where I tried to merge the fragmented frames before sending it to the 
decoder.
I have tried to store the frame when I get Nal prefix (39) as follows on 
afterGetFrame function

If (firstFU){
                memcpy(temp_rtp_data, rtp_data, frameSize);
                temp_buffer_size = frameSize;
                firstFU = false;
}
else{
                size_t data_pos = 6; /// I have experiment this with many 
different values following hevc rfc document, still no avail
                memcpy(temp_rtp_data + temp_buffer_size, rtp_data + data_pos, 
frameSize - data_pos);
                temp_buffer_size += frameSize - data_pos;
                firstFU = false;
}

If I find another nal equal to 39, I send the data to the decoder, still I can 
only see 1/3 frame being decoded.
I have tried to find answer anywhere (including SO), but couldn't get any, 
there's also unanswered question regarding merging Fragmented Unit.
I am very new to video streaming world, the original code belongs to my client, 
I'm grateful to have a chance to learn about it.


Also pardon for my lack of netiquette from my last email, I was mindlessly 
replying to the email using outlook.

Best regards,
Firdaus



_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to