|
From: | jim |
Subject: | Re: [Linphone-developers] Do you have the plan to integrate the VP9 support in the near future? |
Date: | Thu, 2 Jul 2015 17:54:29 +0800 |
Ghislain, thanks for your kindly help!
One more question:
- Need I add something in the makefile if I have added the new vp9 filter?
And can you help to talk more about “the main new features of the VP9 codec are not really useful for real-time communications”
- What are the main new features you means about VP9? Do you means the temporal scalability/spatial scalability?
- Not useful for the real-time communication? Do you means that it is just suitable for the video on demand service or others but video call?
Thanks,
Jim
Hi Ghislain,
1) Can you help to answer if linphone team have the plan to implement the VP9 support in the near future?
2) If we want to integrate the VP9 support, can you help to comment on the steps of my understanding?
step 1 - add support in ORTP module:a) Add declaration of payload type for vp9, e.g. payload_type_vp9 in avprofile.cb) Add VAR_DECLSPEC PayloadType payload_type_vp9 in payloadtype.hc) Add rtp_profile_set_payload() for payload_type_vp9 in av_profile_init() in avprofile.cstep 2 - add support in mediastream2 module:a) Add MSFilterDesc for the encoder, e.g. ms_vp9_enc_desc, and implement the members for this structure, and finally export this structure.b) Add MSFilterDesc for the decoder, e.g. ms_vp9_dec_desc, and implement the members for this structure, and finally export this structurec) Add id for the encoder and decoder in allfilter.hd) Add the ms_vp9_enc_desc and ms_vp9_dec_desc in ms_filter_descs[]
step3 - create instance for encoder and decoder by ms_filter_create_encoder() and ms_filter_create_decoder() respectively.
Your help will be appreciated!Jim
Original MessageSender: Ghislain MARY<address@hidden>Recipient: jim<address@hidden>Cc: linphone-developers<address@hidden>Date: Wednesday, May 27, 2015 15:40Subject: Re: [Linphone-developers] Please help on why there no any RPSI whenavpfis enabled.
Hi Jim,
Here is an explanation:
- The inviting party proposes the use of PLI, SLI, RPSI and FIR.
- The answering party only accepts the use of FIR.
FIR is a feedback message to force the other party to generate a keyframe.
There can be a lot of reasons why the other party does not accepts the other feedback message types: it does not support them, it is not configured to use them...
Cheers,
Ghislain
Le 27/05/2015 04:56, jim a écrit :
Thanks Ghislain for your reply!
I have some questions about the media session negotiation, here are the sdp detail:
INVITE:
m=audio 7078 RTP/AVPF 96 101
a=rtpmap:96 SILK/16000
a=rtpmap:101 telephone-event/16000
a=rtcp-fb:* trr-int 5000
m=video 9078 RTP/AVPF 96 97
a=rtpmap:96 VP8/90000
a=rtpmap:97 H264/90000
a=fmtp:97 profile-level-id=42801F
a=rtcp-fb:* trr-int 5000
a=rtcp-fb:96 nack pli
a=rtcp-fb:96 nack sli
a=rtcp-fb:96 nack rpsi
a=rtcp-fb:96 ccm fir
2OO OK:
m=audio 16836 RTP/AVPF 96
a=rtpmap:96 SILK/16000
a=fmtp:96 maxaveragebitrate=20000
a=fmtp:96 usedtx=0
a=fmtp:96 useinbandfec=1
a=silenceSupp:off - - - -
a=ptime:20
a=maxptime:20
a=sendrecv
m=video 18598 RTP/AVPF 96
a=rtpmap:96 VP8/90000
a=rtcp-fb:* ccm fir
a=sendrecv
Can you help to explain:
1) Does it means that the other party do not confirm with the type of RPSI/PLI/SLI ?
2) What is the possible reason for the other party do not support such kinds of Feed Back types?
3) And What’s the line a=rtcp-fb:* ccm fir in 200OK means for?
Your help will be appreciated!
Jim
Original MessageSender: Ghislain MARY<address@hidden>Recipient: linphone-developers<address@hidden>Date: Tuesday, May 26, 2015 15:50Subject: Re: [Linphone-developers] Please help on why there no any RPSI whenavpf is enabled.
Hi,
Enabling AVPF only means that you propose it when calling. But there is a negociation with the other party and therefore it may not be enabled. There is even a negocation for each AVPF packet types (RPSI, PLI, SLI) so RPSI may be disabled by the other party.
But if the negociation is successful, Linphone sends a RPSI for every golden and/or altref frame being received.
Cheers,
Ghislain
Le 26/05/2015 05:59, jim a écrit :
Hi Jehan,
I set the avpf_enabled to be TRUE by calling linphone_proxy_config_enable_avpf(), but I do not find the decoder sending any Reference Picture Selection Indication. Is that anything wrong with it? Must the decoder respond to the encoder a RPSI when it
recieve a golden frame or a alfref frame?
Regards,
Jim
Original MessageSender: jehan monnier<address@hidden>Recipient: linphone-developers<address@hidden>Date: Friday, May 15, 2015 17:50Subject: Re: [Linphone-developers] Please help on how to get lastsuccessfully decoded frame for application to display whilethe the current frame is corrupt when decoding in dec_process
Hi Jim,
With Linphone, you can achieve same result with linphonerc parameter:
[video]
freeze_on_error=1
Best regards
Le 15 mai 2015 à 03:35, jim <address@hidden> a écrit :
Hi experts,
This is Jim and I am using linphone for a voip project. To improve the user experience for video , I want to make some change in the mediastream2 layer: if we find the current frame is corrupt, just use the last successfully decoded frame to display.
I try this way for vp8 in vp8.c, the line in blue is what I add :=====================================static mblk_t *dec_last_successfully_decoded_frame = NULL;
static void dec_process(MSFilter *f) {mblk_t *im;DecState *s=(DecState*)f->data;
while( (im=ms_queue_get(f->inputs[0]))!=0) {mblk_t *m;
dec_unpacketize(f, s, im, &s->q);
while((m=ms_queue_get(&s->q))!=NULL){vpx_codec_err_t err;vpx_codec_iter_t iter = NULL;vpx_image_t *img;
err = vpx_codec_decode(&s->codec, m->b_rptr, m->b_wptr - m->b_rptr, NULL, 0);if (err) {ms_warning("vpx_codec_decode failed : %d %s (%s)\n", err, vpx_codec_err_to_string(err), vpx_codec_error_detail(&s->codec));
if ((f->ticker->time - s->last_error_reported_time)>5000 || s->last_error_reported_time==0) {s->last_error_reported_time=f->ticker->time;ms_filter_notify_no_arg(f,MS_VIDEO_DECODER_DECODING_ERRORS);}if (s->first_image_decoded == FALSE) {/* if no frames have been decoded yet, do not try to browse decoded frames */freemsg(m);continue;}
if (VPX_CODEC_CORRUPT_FRAME == err||VPX_CODEC_UNSUP_BITSTREAM == err) {
/* do not try to browse decoded frames, use last successfully decoded frame instead */if (dec_last_successfully_decoded_frame) {ms_queue_put(f->outputs[0], dec_last_successfully_decoded_frame);}freemsg(m);continue;}}
/* browse decoded frames */while((img = vpx_codec_get_frame(&s->codec, &iter))) {int i,j;
if (s->yuv_width != img->d_w || s->yuv_height != img->d_h) {if (s->yuv_msg)freemsg(s->yuv_msg);s->yuv_msg = ms_yuv_buf_alloc(&s->outbuf, img->d_w, img->d_h);s->yuv_width = img->d_w;s->yuv_height = img->d_h;}
/* scale/copy frame to destination mblk_t */for(i=0; i<3; i++) {uint8_t* dest = s->outbuf.planes[i];uint8_t* src = "">_______________________________________________int h = img->d_h >> ((i>0)?1:0);
for(j=0; j<h; j++) {memcpy(dest, src, s->outbuf.strides[i]);
dest += s->outbuf.strides[i];src += img->stride[i];}}
//ms_queue_put(f->outputs[0], dupmsg(s->yuv_msg));
if (dec_last_successfully_decoded_frame) {free(dec_last_successfully_decoded_frame);dec_last_successfully_decoded_frame = NULL;}
ms_queue_put(f->outputs[0], dupmsg(s->yuv_msg));dec_last_successfully_decoded_frame = dupmsg(s->yuv_msg);
if (ms_video_update_average_fps(&s->fps, f->ticker->time)) {ms_message("VP8 decoder: Frame size: %dx%d", s->yuv_width, s->yuv_height);}if (!s->first_image_decoded) {s->first_image_decoded = TRUE;ms_filter_notify_no_arg(f,MS_VIDEO_DECODER_FIRST_IMAGE_DECODED);}//}}freemsg(m);}}}=======================================
But it does not work for me, Can anyone help with me or give some advice on it.Looking forwards to your answer, your kind help will be appreciated!
Jim
Linphone-developers mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/linphone-developers
_______________________________________________ Linphone-developers mailing list address@hidden https://lists.nongnu.org/mailman/listinfo/linphone-developers
[Prev in Thread] | Current Thread | [Next in Thread] |