struct cap_handle *caphandle = NULL; // capture操作符 struct cvt_handle *cvthandle = NULL; // convert操作符 struct enc_handle *enchandle = NULL; // encode操作符 struct pac_handle *pachandle = NULL; // pack操作符 struct net_handle *nethandle = NULL; // network操作符 struct cap_param capp; // capture参数 struct cvt_param cvtp; // convert参数 struct enc_param encp; // encode参数 struct pac_param pacp; // pack参数 struct net_param netp; // network参数 // 设置各项参数 capp.xxx = xxx ... cvtp.xxx = xxx; ... encp.xxx = xxx; ... pacp.xxx = xxx; ... netp.xxx = xxx; ... // 使用设置好的参数打开各项功能 caphandle = capture_open(capp); cvthandle = convert_open(cvtp); enchandle = encode_open(encp); pachandle = pack_open(pacp); nethandle = net_open(netp); capture_start(caphandle); // 开始capture while(1) { capture_get_data(caphandle, ...); // 获取一帧图像 convert_do(cvthandle, ...);// 转换,YUV422=>YUV420, 如果你的摄像头直接支持采集YUV420数据则不需要这一步 while (encode_get_headers(enchandle, ...) == 1) // 获取h264头,PPS/SPS { ... } encode_do(enchandle, ...); // 编码一帧图像 pack_put(pachandle, ...); // 将编码后的图像送给打包器 while(pack_get(pachandle, ...) == 1) // 获取一个打包后的RTP包 { net_send(nethandle, ...); // 将RTP包发送出去 } } capture_stop(caphandle); // 停止capture // 关闭各项功能 net_close(nethandle); pack_close(pachandle); encode_close(enchandle); convert_close(cvthandle); capture_close(caphandle); |