ZonekeyStream::ZonekeyStream(int id, RtpSession *rs) : id_(id) , rtp_session_(rs) { server_ip_ = util_get_myip(); server_port_ = rtp_session_get_local_port(rs); }
int main() { MyFactory fac; zonekey::HTTPServer server(20000, &fac); ost::Thread::sleep(100000000); char url[128]; snprintf(url, sizeof(url), "test://%s:0", util_get_myip()); fprintf(stderr, "en, using url: '%s'\n", url); lc_regdesc_t desc; desc.ns = "test"; desc.url = url; desc.desc = "a test service"; desc.service_name = 0; lc_reg(&desc); // Now, todo anything ... while (1) { ost::Thread::sleep(1000); } lc_unreg(); return 0; }
void VodWnd::vod(const char *ip, int rtp_port, int rtcp_port) { server_ip_ = ip; server_rtp_port_ = rtp_port; server_rtcp_port_ = rtcp_port; rtp_ = rtp_session_new(RTP_SESSION_RECVONLY); rtp_session_set_payload_type(rtp_, 100); rtp_session_set_local_addr(rtp_, util_get_myip(), 0, 0); rtp_session_set_remote_addr_and_port(rtp_, ip, rtp_port, rtcp_port); JBParameters jb; jb.adaptive = 1; jb.max_packets = 3000; jb.max_size = -1; jb.min_size = jb.nom_size = 300; rtp_session_set_jitter_buffer_params(rtp_, &jb); rtp_session_enable_jitter_buffer(rtp_, 0); evq_ = ortp_ev_queue_new(); rtp_session_register_event_queue(rtp_, evq_); ticker_ = ms_ticker_new(); filter_rtp_ = ms_filter_new(MS_RTP_RECV_ID); ms_filter_call_method(filter_rtp_, MS_RTP_RECV_SET_SESSION, rtp_); filter_decoder_ = ms_filter_new(MS_H264_DEC_ID); ZonekeyYUVSinkCallbackParam cbp; cbp.ctx = this; cbp.push = cb_yuv; filter_sink_ = ms_filter_new_from_name("ZonekeyYUVSink"); ms_filter_call_method(filter_sink_, ZONEKEY_METHOD_YUV_SINK_SET_CALLBACK_PARAM, &cbp); ms_filter_link(filter_rtp_, 0, filter_decoder_, 0); ms_filter_link(filter_decoder_, 0, filter_sink_, 0); ms_ticker_attach(ticker_, filter_rtp_); }
void CameraStream::init() { /** 获取第一帧图像,初始化 sws_,创建 h264 encoder .... */ IplImage *img = cvQueryFrame(cap_); // FIXME: 未必是 rgb24 吧??? sws_ = sws_getContext(img->width, img->height, PIX_FMT_RGB24, WIDTH, HEIGHT, PIX_FMT_YUV420P, SWS_FAST_BILINEAR, 0, 0, 0); x264_param_t param; x264_param_default_preset(¶m, "veryfast", "zerolatency"); param.i_threads = 0; param.i_width = WIDTH; param.i_height = HEIGHT; param.i_keyint_max = FPS * 2; param.i_fps_den = 1; param.i_fps_num = FPS; param.i_slice_max_size = 1300; param.b_repeat_headers = 1; param.b_annexb = 1; param.rc.i_rc_method = X264_RC_ABR; param.rc.i_bitrate = KBPS; param.rc.i_vbv_max_bitrate = KBPS*1.1; encoder_ = x264_encoder_open(¶m); avpicture_alloc(&pic_, PIX_FMT_YUV420P, WIDTH, HEIGHT); rtp_ = rtp_session_new(RTP_SESSION_SENDRECV); rtp_session_set_payload_type(rtp_, 100); rtp_session_set_remote_addr_and_port(rtp_, server_ip_.c_str(), server_rtp_port_, server_rtcp_port_); rtp_session_set_local_addr(rtp_, util_get_myip(), 0, 0); JBParameters jb; jb.adaptive = 1; jb.max_packets = 500; jb.max_size = -1; jb.min_size = jb.nom_size = 300; rtp_session_set_jitter_buffer_params(rtp_, &jb); filter_rtp_sender_ = ms_filter_new(MS_RTP_SEND_ID); ms_filter_call_method(filter_rtp_sender_, MS_RTP_SEND_SET_SESSION, rtp_); filter_h264_sender_ = ms_filter_new_from_name("ZonekeyH264Source"); ms_filter_call_method(filter_h264_sender_, ZONEKEY_METHOD_H264_SOURCE_GET_WRITER_PARAM, &sender_params_); filter_rtp_recver_ = ms_filter_new(MS_RTP_RECV_ID); ms_filter_call_method(filter_rtp_recver_, MS_RTP_RECV_SET_SESSION, rtp_); filter_decoder_ = ms_filter_new(MS_H264_DEC_ID); filter_yuv_sink_ = ms_filter_new_from_name("ZonekeyYUVSink"); // TODO: 显示 ... ms_filter_link(filter_rtp_recver_, 0, filter_decoder_, 0); ms_filter_link(filter_decoder_, 0, filter_yuv_sink_, 0); ticker_recver_ = ms_ticker_new(); ms_ticker_attach(ticker_recver_, filter_rtp_recver_); ms_filter_link(filter_h264_sender_, 0, filter_rtp_sender_, 0); ticker_sender_ = ms_ticker_new(); ms_ticker_attach(ticker_sender_, filter_h264_sender_); }