When making a call using OpenH264, we get a few seconds of green frames before the first video frames show up successfully.
It seems that this isn’t an OpenH264 (1.0.0 as that is the only version that compiles with PJSIP) issue, but a PJSIP one.
As a side note, it seems that later versions of OpenH264 have switched to gray: https://github.com/cisco/openh264/issues/1163
I have commented out oh264_codec_decode and oh264_got_decoded_frame to just return Pj_SUCCESS and do nothing else, and I still get the green screen and obviously no video.
I have also commented out decode_frame in vid_stream.c
This is on iOS using CAEAGLayer as the renderer.
0 in YUV colorspace turns out to be green. Where exactly should I look to fix this issue so we can get either one of 2 things.
Thanks
Hi Marc,
The green frames in the beginning of a video call is likely caused by
missing keyframe. Keyframe requests are sent regularly every
PJSUA_VID_REQ_KEYFRAME_INTERVAL, and application can also explicitly
send keyframe using the API pjsua_call_set_vid_strm() with op
PJSUA_CALL_VID_STRM_SEND_KEYFRAME. We also have a pending ticket for
this #1910 (https://trac.pjsip.org/repos/ticket/1910) which aims to do
this automatically within the library.
To change the color to black, instead of green, you can modify
pjmedia/src/pjmedia/vid_port.c, in function pjmedia_vid_port_create(),
where the initial buffer of the video frame is allocated. Below is an
example of how to set the frame to black in I420 format. For other YUV
formats, which have different ways to represent black, you may need to
modify the code accordingly.
if (need_frame_buf) {
.....
vp->frm_buf->type = PJMEDIA_FRAME_TYPE_NONE;
/* Insert the below code after you find the above line ---- */
/* Note: this will only work for I420 format */
if (vparam.fmt.id == PJMEDIA_FORMAT_I420) {
pj_memset(vp->frm_buf->buf, 0x80, vp->frm_buf_size);
pj_bzero(vp->frm_buf->buf,
vparam.fmt.det.vid.size.w*vparam.fmt.det.vid.size.h);
}
/* ---- */
Unfortunately, currently there's no notification for the first decoded
frame/keyframe received.
Best regards,
Ming
On Thu, Jul 21, 2016 at 7:04 AM, Marc marc@taplightsoftware.com wrote:
When making a call using OpenH264, we get a few seconds of green frames before the first video frames show up successfully.
It seems that this isn’t an OpenH264 (1.0.0 as that is the only version that compiles with PJSIP) issue, but a PJSIP one.
As a side note, it seems that later versions of OpenH264 have switched to gray: https://github.com/cisco/openh264/issues/1163
I have commented out oh264_codec_decode and oh264_got_decoded_frame to just return Pj_SUCCESS and do nothing else, and I still get the green screen and obviously no video.
I have also commented out decode_frame in vid_stream.c
This is on iOS using CAEAGLayer as the renderer.
0 in YUV colorspace turns out to be green. Where exactly should I look to fix this issue so we can get either one of 2 things.
Thanks
Visit our blog: http://blog.pjsip.org
pjsip mailing list
pjsip@lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org