v4l2 x264 rtp 实时视频监控

zjh22988 2016-11-14 03:56:50
主要问题。。。关于x264编码参数的设置

冲v4l读到每一帧数据进行实时编码和rtp发送,完成后再吧buffer放入等待队列中去读下一张图片
在不编码情况下,可以每秒读到25张图片,但启动编码后,每秒只能读到2-3张图片,播放画面就很卡了,很不流畅,测试发现,我编码时间太长了,如何缩短?看了不少资料,参数还是设置不好,求助各位大神。。。。
//-------------------------------------------------------------我的参数设置函数------------------------------------------------------------
void compress_begin(Encoder *en, int width, int height) {
en->param = (x264_param_t *) malloc(sizeof(x264_param_t));
en->picture = (x264_picture_t *) malloc(sizeof(x264_picture_t));
x264_param_default_preset(en->param, "veryfast", "zerolatency"); //set default param

x264_param_apply_profile(en->param, x264_profile_names[0]); //使用baseline
en->param->i_width = width; //set frame width
en->param->i_height = height; //set frame height
en->param->i_fps_num = 30; //帧率分子
en->param->i_fps_den = 1; //帧率分母
en->param->b_repeat_headers = 1;
en->param->i_keyint_min = 25;
en->param->i_keyint_max = 50;
en->param->i_level_idc = 21;
en->param->i_threads = 2;
int m_bitRate = 1024*600;
en->param->rc.i_bitrate = (int)m_bitRate/1000;
en->param->rc.i_vbv_max_bitrate = (int)((m_bitRate*1.2)/1000);
en->param->rc.i_rc_method = X264_RC_ABR;
//en->param->b_cabac = 1;
//en->param->i_threads = 1;

//en->param->rc.b_mb_tree = 0;
//en->param->rc.f_rf_constant = 25;
//en->param->rc.f_rf_constant_max = 45;
//en->param->rc.i_rc_method = X264_RC_ABR;
//en->param->rc.f_rate_tolerance = 0.1;
//en->param->rc.i_bitrate = 1024*10;

//en->param->i_level_idc = 30;
en->param->i_log_level = X264_LOG_WARNING;

en->param->i_csp = X264_CSP_I422;
/*/
en->param->rc.i_rc_method = X264_RC_CQP;//设置为恒定码率
en->param->i_log_level = X264_LOG_NONE;

en->param->i_threads = X264_SYNC_LOOKAHEAD_AUTO;//取空缓存区使用不死锁保证

en->param->i_width = width; //set frame width
en->param->i_height = height; //set frame height

en->param->i_frame_total = 0;

en->param->i_keyint_max = 10;
en->param->rc.i_lookahead = 0; //表示i帧向前缓冲区
en->param->i_bframe = 5; //两个参考帧之间b帧的数目

en->param->b_open_gop = 0;
en->param->i_bframe_pyramid = 0;
en->param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;

en->param->rc.i_bitrate = 1024 * 10;//rate 为10 kbps
en->param->i_fps_num = 10; //帧率分子
en->param->i_fps_den = 1; //帧率分母

en->param->i_csp = X264_CSP_I422;
en->param->b_repeat_headers = 1;
x264_param_apply_profile(en->param, x264_profile_names[0]); //使用baseline
*/
if ((en->handle = x264_encoder_open(en->param)) == 0) {
return;
}
/* Create a new pic */
x264_picture_alloc(en->picture, X264_CSP_I422, en->param->i_width,
en->param->i_height);
en->picture->img.i_csp = X264_CSP_I422;
en->picture->img.i_plane = 3;
}
...全文
1888 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
为取经而来 2018-01-15
  • 打赏
  • 举报
回复
楼主,你的代码运行起来会出现malloc of size failed的问题吗?
悠悠南山下 2017-02-20
  • 打赏
  • 举报
回复
是嵌入式么?我用imx6上软编,码率中等的情况下,一帧大概100ms,同样的参数,电脑上只3ms左右,性能的问题吧。。。
qq_24483817 2016-11-27
  • 打赏
  • 举报
回复
这个小项目做的怎么样了,我最近做一个类似的,能问点你问题吗
20mt 2016-11-16
  • 打赏
  • 举报
回复
要是实在搞不定的话 可以用h264输出的摄像头啊 这样直接输出就h264了不用编码 多方便 现在我就是这么干的
rightorwrong 2016-11-15
  • 打赏
  • 举报
回复
码流帧率设置小点
zjh22988 2016-11-14
  • 打赏
  • 举报
回复
求助啊!!!大神们

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧