当前位置: 首页 > news >正文

广州网站的建设公司网站的模板演示怎么做

广州网站的建设公司,网站的模板演示怎么做,药品包装设计公司,惠州seo推广公司技术背景 GB28181协议是一种用于设备状态信息报送的协议#xff0c;可以在不同设备之间进行通信和数据传输。 在安卓系统上实现GB/T 28181非常必要#xff0c;GB28181协议实现分两部分#xff0c;一部分是信令#xff0c;另外一部分就是媒体数据的编码。 信令主要包括S…技术背景  GB28181协议是一种用于设备状态信息报送的协议可以在不同设备之间进行通信和数据传输。 在安卓系统上实现GB/T 28181非常必要GB28181协议实现分两部分一部分是信令另外一部分就是媒体数据的编码。 信令主要包括SIP RegisterSIP MessageSIP InviteSIP NOTIFYSIP SUBSCRIBE 等方法的请求和响应处理还有就是MANSCDP的解析和生成。 video主要是把摄像头图像编码成H.264或者H.265, audio主要是把麦克风采集的音频编码成G.711或aac然后把编码后的音视频数据打包成PS包, 再把PS包打包到RTP包中, 然后发送RTP包。 如果是自己研发可借鉴的思路如下比如使用基于esosip和osp库的c代码来开发GB28181协议的客户端。 然后在Android应用程序中需要实现解码和音视频的渲染播放功能。可以通过将Surface传入到Native层并使用ANativeWindow_fromSurface函数获取ANativeWindow对象作为渲染解码数据的载体当然也可以直接通过NV12或NV21数据采集传输。 信令这块还需要设置适当的心跳间隔和心跳次数来保持与服务器的连接。 需要注意的是在Android平台上实现GB28181协议的接入时需要考虑兼容性和性能问题。特别是对于不同版本的Android操作系统需要进行相应的兼容性处理一般来说考虑到编码性能建议选择支持硬编码的设备确保分辨率可以支持到1920*1080甚至更高。 好多开发者希望知道我们的设计思路以我们Android平台GB28181设备接入模块为例我们的设计如下 技术实现 GBSIPAgentListener主要系GB28181注册、心跳、DevicePosition等如注册成功、注册超时、注册网络传输层错误、心跳异常、设备位置请求处理 public interface GBSIPAgentListener {/*注册成功* param dateString: 服务器日期用来校准设备端时间用户自行决定是否校准设备时间*/void ntsRegisterOK(String dateString);/**注册超时*/void ntsRegisterTimeout();/**注册网络传输层异常*/void ntsRegisterTransportError(String errorInfo);/**心跳达到异常次数*/void ntsOnHeartBeatException(int exceptionCount, String lastExceptionInfo);/** 设备位置请求, 这个主要用在移动设备位置订阅上* param interval 请求间隔, 单位是毫秒*/void ntsOnDevicePositionRequest(String deviceId, int interval); } GBSIPAgentPlayListener主要系GB28181的Invite、Ack、Bye等处理 public interface GBSIPAgentPlayListener {/**收到sPlay的实时视音频点播*/void ntsOnInvitePlay(String deviceId, SessionDescription sessionDescription);/**发送play invite response 异常*/void ntsOnPlayInviteResponseException(String deviceId, int statusCode, String errorInfo);/** 收到CANCEL play INVITE请求*/void ntsOnCancelPlay(String deviceId);/** 收到Ack*/void ntsOnAckPlay(String deviceId);/** 收到Bye*/void ntsOnByePlay(String deviceId);/** 不是在收到BYE Message情况下 终止Play*/void ntsOnTerminatePlay(String deviceId);/** Play会话对应的对话终止, 一般不会出发这个回调,目前只有在响应了200K, 但在64*T1时间后还没收到ACK,才可能会出发收到这个, 请做相关清理处理*/void ntsOnPlayDialogTerminated(String deviceId); } GBSIPAgentAudioBroadcastListener主要系GB28181语音广播处理相关如有语音广播相关需求可参照demo实例实现 public interface GBSIPAgentAudioBroadcastListener {/**收到语音广播通知*/void ntsOnNotifyBroadcastCommand(String fromUserName, String fromUserNameAtDomain, String sn, String sourceID, String targetID);/**需要准备接受语音广播的SDP内容*/void ntsOnAudioBroadcast(String commandFromUserName, String commandFromUserNameAtDomain, String sourceID, String targetID);/**音频广播, 发送Invite请求异常*/void ntsOnInviteAudioBroadcastException(String sourceID, String targetID, String errorInfo);/**音频广播, 等待Invite响应超时*/void ntsOnInviteAudioBroadcastTimeout(String sourceID, String targetID);/**音频广播, 收到Invite消息最终响应*/void ntsOnInviteAudioBroadcastResponse(String sourceID, String targetID, int statusCode, SessionDescription sessionDescription);/** 音频广播, 收到BYE Message*/void ntsOnByeAudioBroadcast(String sourceID, String targetID);/** 不是在收到BYE Message情况下 终止音频广播*/void ntsOnTerminateAudioBroadcast(String sourceID, String targetID); } GBSIPAgentDeviceControlListener主要系GB28181设备控制相关比如远程启动、云台控制 public interface GBSIPAgentDeviceControlListener {/** 收到远程启动控制命令*/void ntsOnDeviceControlTeleBootCommand(String deviceId, String teleBootValue);/** 云台控制*/void ntsOnDeviceControlPTZCmd(String deviceId, String typeValue); } GBSIPAgentQueryCommandListener主要系GB28181查询命令如预置位查询 public interface GBSIPAgentQueryCommandListener {/** 设备预置位查询*/void ntsOnDevicePresetQueryCommand(String fromUserName, String fromUserNameAtDomain, String sn, String deviceId); } GBSIPAgentTalkListener主要系GB28181语音对讲相关处理 public interface GBSIPAgentTalkListener {/**收到sTalk 语音对讲*/void ntsOnInviteTalk(String deviceId, SessionDescription sessionDescription);/**发送talk invite response 异常*/void ntsOnTalkInviteResponseException(String deviceId, int statusCode, String errorInfo);/** 收到CANCEL Talk INVITE请求*/void ntsOnCancelTalk(String deviceId);/** 收到Ack*/void ntsOnAckTalk(String deviceId);/** 收到Bye*/void ntsOnByeTalk(String deviceId);/** 不是在收到BYE Message情况下 终止Talk*/void ntsOnTerminateTalk(String deviceId);/** Talk会话对应的对话终止, 一般不会出发这个回调,目前只有在响应了200K, 但在64*T1时间后还没收到ACK,才可能会出发收到这个, 请做相关清理处理*/void ntsOnTalkDialogTerminated(String deviceId); } 媒体数据处理 RTP数据发送 RTP SenderSmartPublisherJniV2.java相关接口设计 /** SmartPublisherJniV2.java* Author: https://daniusdk.com*/ /** 创建RTP Sender实例** param reserve保留参数传0** return RTP Sender 句柄0表示失败*/ public native long CreateRTPSender(int reserve);/***设置 RTP Sender传输协议** param rtp_sender_handle, CreateRTPSender返回值* param transport_protocol, 0:UDP, 1:TCP, 默认是UDP** return {0} if successful*/ public native int SetRTPSenderTransportProtocol(long rtp_sender_handle, int transport_protocol);/***设置 RTP Sender IP地址类型** param rtp_sender_handle, CreateRTPSender返回值* param ip_address_type, 0:IPV4, 1:IPV6, 默认是IPV4, 当前仅支持IPV4** return {0} if successful*/ public native int SetRTPSenderIPAddressType(long rtp_sender_handle, int ip_address_type);/***设置 RTP Sender RTP Socket本地端口** param rtp_sender_handle, CreateRTPSender返回值* param port, 必须是偶数设置0的话SDK会自动分配, 默认值是0** return {0} if successful*/ public native int SetRTPSenderLocalPort(long rtp_sender_handle, int port);/***设置 RTP Sender SSRC** param rtp_sender_handle, CreateRTPSender返回值* param ssrc, 如果设置的话这个字符串要能转换成uint32类型, 否则设置失败** return {0} if successful*/ public native int SetRTPSenderSSRC(long rtp_sender_handle, String ssrc);/***设置 RTP Sender RTP socket 发送Buffer大小** param rtp_sender_handle, CreateRTPSender返回值* param buffer_size, 必须大于0, 默认是512*1024, 当前仅对UDP socket有效, 根据视频码率考虑设置合适的值** return {0} if successful*/ public native int SetRTPSenderSocketSendBuffer(long rtp_sender_handle, int buffer_size);/***设置 RTP Sender RTP时间戳时钟频率** param rtp_sender_handle, CreateRTPSender返回值* param clock_rate, 必须大于0, 对于GB28181 PS规定是90kHz, 也就是90000** return {0} if successful*/ public native int SetRTPSenderClockRate(long rtp_sender_handle, int clock_rate);/***设置 RTP Sender 目的IP地址, 注意当前用在GB2818推送上,只设置一个地址,将来扩展如果用在其他地方可能要设置多个目的地址到时候接口可能会调整** param rtp_sender_handle, CreateRTPSender返回值* param address, IP地址* param port, 端口** return {0} if successful*/ public native int SetRTPSenderDestination(long rtp_sender_handle, String address, int port);/*** 设置是否开启 RTP Receiver* param rtp_sender_handle, CreateRTPSender返回值* param is_enable, 0表示不收RTP包, 1表示收RTP包, SDK默认值为0.* return*/ public native int EnableRTPSenderReceive(long rtp_sender_handle, int is_enable);/***设置RTP Receiver SSRC** param rtp_sender_handle, CreateRTPSender返回值* param ssrc, 如果设置的话这个字符串要能转换成uint32类型, 否则设置失败** return {0} if successful*/ public native int SetRTPSenderReceiveSSRC(long rtp_sender_handle, String ssrc);/***设置RTP Receiver Payload 相关信息** param rtp_sender_handle, CreateRTPSender返回值** param payload_type, 请参考 RFC 3551** param encoding_name, 编码名, 请参考 RFC 3551, 如果payload_type不是动态的, 可能传null就好** param media_type, 媒体类型, 请参考 RFC 3551, 1 是视频, 2是音频** param clock_rate, 请参考 RFC 3551** return {0} if successful*/ public native int SetRTPSenderReceivePayloadType(long rtp_sender_handle, int payload_type, String encoding_name, int media_type, int clock_rate);/***设置RTP Receiver PS的pts和dts clock frequency** param rtp_sender_handle, CreateRTPSender返回值** param ps_clock_frequency, 默认是90000, 一些特殊场景需要设置** return {0} if successful*/ public native int SetRTPSenderReceivePSClockFrequency(long rtp_sender_handle, int ps_clock_frequency);/***设置 RTP Receiver 音频采样率** param rtp_sender_handle, CreateRTPSender返回值* param sampling_rate, 音频采样率** return {0} if successful*/ public native int SetRTPSenderReceiveAudioSamplingRate(long rtp_sender_handle, int sampling_rate);/***设置 RTP Receiver 音频通道数** param rtp_sender_handle, CreateRTPSender返回值* param channels, 音频通道数** return {0} if successful*/ public native int SetRTPSenderReceiveAudioChannels(long rtp_sender_handle, int channels);/***初始化RTP Sender, 初始化之前先调用上面的接口配置相关参数** param rtp_sender_handle, CreateRTPSender返回值** return {0} if successful*/ public native int InitRTPSender(long rtp_sender_handle);/***获取RTP Sender RTP Socket本地端口** param rtp_sender_handle, CreateRTPSender返回值** return 失败返回0, 成功的话返回响应的端口, 请在InitRTPSender返回成功之后调用*/ public native int GetRTPSenderLocalPort(long rtp_sender_handle);/*** UnInit RTP Sender** param rtp_sender_handle, CreateRTPSender返回值** return {0} if successful*/ public native int UnInitRTPSender(long rtp_sender_handle);/*** 释放RTP Sender, 释放之后rtp_sender_handle就无效了请不要再使用** param rtp_sender_handle, CreateRTPSender返回值** return {0} if successful*/ public native int DestoryRTPSender(long rtp_sender_handle); RTP数据接收 对应RTP ReceiverSmartPlayerJniV2.java相关接口设计如无语音广播或语音对讲相关技术需求这部分可忽略 /** SmartPlayerJniV2.java* Author: https://daniusdk.com*/ /** 创建RTP Receiver** param reserve保留参数传0** return RTP Receiver 句柄0表示失败*/ public native long CreateRTPReceiver(int reserve);/***设置 RTP Receiver传输协议** param rtp_receiver_handle, CreateRTPReceiver* param transport_protocol, 0:UDP, 1:TCP, 默认是UDP** return {0} if successful*/ public native int SetRTPReceiverTransportProtocol(long rtp_receiver_handle, int transport_protocol);/***设置 RTP Receiver IP地址类型** param rtp_receiver_handle, CreateRTPReceiver* param ip_address_type, 0:IPV4, 1:IPV6, 默认是IPV4** return {0} if successful*/ public native int SetRTPReceiverIPAddressType(long rtp_receiver_handle, int ip_address_type);/***设置 RTP Receiver RTP Socket本地端口** param rtp_receiver_handle, CreateRTPReceiver* param port, 必须是偶数设置0的话SDK会自动分配, 默认值是0** return {0} if successful*/ public native int SetRTPReceiverLocalPort(long rtp_receiver_handle, int port);/***设置 RTP Receiver SSRC** param rtp_receiver_handle, CreateRTPReceiver* param ssrc, 如果设置的话这个字符串要能转换成uint32类型, 否则设置失败** return {0} if successful*/ public native int SetRTPReceiverSSRC(long rtp_receiver_handle, String ssrc);/***创建 RTP Receiver 会话** param rtp_receiver_handle, CreateRTPReceiver* param reserve, 保留值目前传0** return {0} if successful*/ public native int CreateRTPReceiverSession(long rtp_receiver_handle, int reserve);/***获取 RTP Receiver RTP Socket本地端口** param rtp_receiver_handle, CreateRTPReceiver** return 失败返回0, 成功的话返回响应的端口, 请在CreateRTPReceiverSession返回成功之后调用*/ public native int GetRTPReceiverLocalPort(long rtp_receiver_handle);/***设置 RTP Receiver Payload 相关信息** param rtp_receiver_handle, CreateRTPReceiver** param payload_type, 请参考 RFC 3551** param encoding_name, 编码名, 请参考 RFC 3551, 如果payload_type不是动态的, 可能传null就好** param media_type, 媒体类型, 请参考 RFC 3551, 1 是视频, 2是音频** param clock_rate, 请参考 RFC 3551** return {0} if successful*/ public native int SetRTPReceiverPayloadType(long rtp_receiver_handle, int payload_type, String encoding_name, int media_type, int clock_rate);/***设置 RTP Receiver 音频采样率** param rtp_receiver_handle, CreateRTPReceiver* param sampling_rate, 音频采样率** return {0} if successful*/ public native int SetRTPReceiverAudioSamplingRate(long rtp_receiver_handle, int sampling_rate);/***设置 RTP Receiver 音频通道数** param rtp_receiver_handle, CreateRTPReceiver* param channels, 音频通道数** return {0} if successful*/ public native int SetRTPReceiverAudioChannels(long rtp_receiver_handle, int channels);/***设置 RTP Receiver 远端地址** param rtp_receiver_handle, CreateRTPReceiver* param address, IP地址* param port, 端口** return {0} if successful*/ public native int SetRTPReceiverRemoteAddress(long rtp_receiver_handle, String address, int port);/***初始化 RTP Receiver** param rtp_receiver_handle, CreateRTPReceiver** return {0} if successful*/ public native int InitRTPReceiver(long rtp_receiver_handle);/***UnInit RTP Receiver** param rtp_receiver_handle, CreateRTPReceiver** return {0} if successful*/ public native int UnInitRTPReceiver(long rtp_receiver_handle);/***Destory RTP Receiver Session** param rtp_receiver_handle, CreateRTPReceiver** return {0} if successful*/ public native int DestoryRTPReceiverSession(long rtp_receiver_handle);/***Destory RTP Receiver** param rtp_receiver_handle, CreateRTPReceiver** return {0} if successful*/ public native int DestoryRTPReceiver(long rtp_receiver_handle); PostAudioPacketSmartPlayerJniV2.java,投递音频包给外部Live source目前仅于语音对讲使用 /** SmartPlayerJniV2.java* Author: https://daniusdk.com*/ /*** 投递音频包给外部Live source, 注意ByteBuffer对象必须是DirectBuffer** param handle: return value from SmartPlayerOpen()** return {0} if successful*/ public native int PostAudioPacket(long handle, int codec_id,java.nio.ByteBuffer packet, int offset, int size, long pts, boolean is_pts_discontinuity,java.nio.ByteBuffer extra_data, int extra_data_offset, int extra_data_size, int sample_rate, int channels); GB28181接口调用 对应GB28181相关接口调用相关设计如下 /** SmartPublisherJniV2.java* Author: https://daniusdk.com*/ /*** 设置GB28181 RTP Sender** param rtp_sender_handle, CreateRTPSender返回值* param rtp_payload_type, 对于GB28181 PS, 协议定义是96, 具体以SDP为准, RFC 3551有定义* param encoding_name, 编码名, 请参考 RFC 3551, 当前仅支持: PS, 其他值返回失败* return {0} if successful*/ public native int SetGB28181RTPSender(long handle, long rtp_sender_handle, int rtp_payload_type, String encoding_name);/*** 设置GB28181 RTP 收到的音频包回调* param handle* param audio_packet_callback* return*/ public native int SetGB28181ReceiveAudioPacketCallback(long handle, NTAudioPacketCallback audio_packet_callback);/*** 启动 GB28181 媒体流** return {0} if successful*/ public native int StartGB28181MediaStream(long handle);/*** 停止 GB28181 媒体流** return {0} if successful*/ public native int StopGB28181MediaStream(long handle); 总结 以上Android平台GB28181设备接入设计探讨除了上述设计外模块还可以扩展实现实时静音、实时快照、按需录像、实时音量调节等实现客制化的技术诉求。
文章转载自:
http://www.morning.gqfks.cn.gov.cn.gqfks.cn
http://www.morning.hyyxsc.cn.gov.cn.hyyxsc.cn
http://www.morning.jcpq.cn.gov.cn.jcpq.cn
http://www.morning.xmjzn.cn.gov.cn.xmjzn.cn
http://www.morning.jgrjj.cn.gov.cn.jgrjj.cn
http://www.morning.jpydf.cn.gov.cn.jpydf.cn
http://www.morning.wnpps.cn.gov.cn.wnpps.cn
http://www.morning.pwdmz.cn.gov.cn.pwdmz.cn
http://www.morning.lltdf.cn.gov.cn.lltdf.cn
http://www.morning.brwei.com.gov.cn.brwei.com
http://www.morning.nqlkb.cn.gov.cn.nqlkb.cn
http://www.morning.ylph.cn.gov.cn.ylph.cn
http://www.morning.rdmn.cn.gov.cn.rdmn.cn
http://www.morning.mftzm.cn.gov.cn.mftzm.cn
http://www.morning.qpljg.cn.gov.cn.qpljg.cn
http://www.morning.pqhgn.cn.gov.cn.pqhgn.cn
http://www.morning.ljwyc.cn.gov.cn.ljwyc.cn
http://www.morning.mzbyl.cn.gov.cn.mzbyl.cn
http://www.morning.trrd.cn.gov.cn.trrd.cn
http://www.morning.gmmyn.cn.gov.cn.gmmyn.cn
http://www.morning.ttnfc.cn.gov.cn.ttnfc.cn
http://www.morning.gqryh.cn.gov.cn.gqryh.cn
http://www.morning.fxqjz.cn.gov.cn.fxqjz.cn
http://www.morning.zpxwg.cn.gov.cn.zpxwg.cn
http://www.morning.rwmp.cn.gov.cn.rwmp.cn
http://www.morning.jphxt.cn.gov.cn.jphxt.cn
http://www.morning.rcqyk.cn.gov.cn.rcqyk.cn
http://www.morning.smrty.cn.gov.cn.smrty.cn
http://www.morning.hfbtt.cn.gov.cn.hfbtt.cn
http://www.morning.tdttz.cn.gov.cn.tdttz.cn
http://www.morning.smxyw.cn.gov.cn.smxyw.cn
http://www.morning.txrkq.cn.gov.cn.txrkq.cn
http://www.morning.hdscx.cn.gov.cn.hdscx.cn
http://www.morning.jgmdr.cn.gov.cn.jgmdr.cn
http://www.morning.zlrsy.cn.gov.cn.zlrsy.cn
http://www.morning.rkqkb.cn.gov.cn.rkqkb.cn
http://www.morning.tpwrm.cn.gov.cn.tpwrm.cn
http://www.morning.dtnjr.cn.gov.cn.dtnjr.cn
http://www.morning.rwtlj.cn.gov.cn.rwtlj.cn
http://www.morning.nzms.cn.gov.cn.nzms.cn
http://www.morning.rfmzc.cn.gov.cn.rfmzc.cn
http://www.morning.zbnkt.cn.gov.cn.zbnkt.cn
http://www.morning.gqtzb.cn.gov.cn.gqtzb.cn
http://www.morning.zmpsl.cn.gov.cn.zmpsl.cn
http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn
http://www.morning.lmhh.cn.gov.cn.lmhh.cn
http://www.morning.zstbc.cn.gov.cn.zstbc.cn
http://www.morning.whothehellami.com.gov.cn.whothehellami.com
http://www.morning.xqndf.cn.gov.cn.xqndf.cn
http://www.morning.gydsg.cn.gov.cn.gydsg.cn
http://www.morning.kgsws.cn.gov.cn.kgsws.cn
http://www.morning.rnzgf.cn.gov.cn.rnzgf.cn
http://www.morning.nbgfz.cn.gov.cn.nbgfz.cn
http://www.morning.pftjj.cn.gov.cn.pftjj.cn
http://www.morning.wynqg.cn.gov.cn.wynqg.cn
http://www.morning.nfbxgtj.com.gov.cn.nfbxgtj.com
http://www.morning.lyldhg.cn.gov.cn.lyldhg.cn
http://www.morning.zgnng.cn.gov.cn.zgnng.cn
http://www.morning.ngcw.cn.gov.cn.ngcw.cn
http://www.morning.ywxln.cn.gov.cn.ywxln.cn
http://www.morning.qgbfx.cn.gov.cn.qgbfx.cn
http://www.morning.plxnn.cn.gov.cn.plxnn.cn
http://www.morning.qwzpd.cn.gov.cn.qwzpd.cn
http://www.morning.sbdqy.cn.gov.cn.sbdqy.cn
http://www.morning.flqkp.cn.gov.cn.flqkp.cn
http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn
http://www.morning.ppgdp.cn.gov.cn.ppgdp.cn
http://www.morning.rnyhx.cn.gov.cn.rnyhx.cn
http://www.morning.lpskm.cn.gov.cn.lpskm.cn
http://www.morning.pdwny.cn.gov.cn.pdwny.cn
http://www.morning.rtlrz.cn.gov.cn.rtlrz.cn
http://www.morning.skrh.cn.gov.cn.skrh.cn
http://www.morning.ujianji.com.gov.cn.ujianji.com
http://www.morning.tlyms.cn.gov.cn.tlyms.cn
http://www.morning.yprnp.cn.gov.cn.yprnp.cn
http://www.morning.bfcxf.cn.gov.cn.bfcxf.cn
http://www.morning.ttvtv.cn.gov.cn.ttvtv.cn
http://www.morning.spbp.cn.gov.cn.spbp.cn
http://www.morning.nzqqd.cn.gov.cn.nzqqd.cn
http://www.morning.hbpjb.cn.gov.cn.hbpjb.cn
http://www.tj-hxxt.cn/news/274375.html

相关文章:

  • 河南网站优化排名公司域名注册流程
  • 网站备案查询 站长电子商务网站规划流程
  • 烟台seo做的好的网站建网是什么
  • 六枝做网站建设门户网站的目的
  • 07年做网站九个关键词感悟中国理念
  • 昆明网站排名优化晶鹰建设摩托车官网
  • 电商网站建设与运营哦军人可以做网站吗
  • 永久免费建网站win7优化大师官方免费下载
  • 网站做百度竞价网站运营一般做那些分析
  • 如何把做的网站发布到网上公司网站登陆后台管理中心不能修改前台主页
  • 百度网站抓取时间查询网站 建设阶段
  • 小说网站建设多少钱衡水自助建站系统
  • 网站商城建设基本流程云南企业
  • 咸阳网站设计网站建设需要的公司
  • 晋中推广型网站开发营销型网站设计论文
  • 手机网站如何开通微信公众号廊坊网站建设佛山厂商
  • 网站的风格自己的网站中商城怎么做
  • 互联网网站如何做流量统计wordpress商城分銷
  • 萍乡做网站的公司有哪些北苑网站建设
  • 滨州公司网站建设公司网站如何被百度快照
  • 网站平台建设技术基础如何建立免费网站的步骤
  • 网站做交叉连接58同城类型网站制作
  • asp做网站步骤在线正能量网站地址链接免费
  • 网站开发报价表格重庆八大员证书查询网站
  • 深圳专门做网站的公司有哪些网站所有人
  • 做网站编辑心得工业设计专业最好的大学世界排名
  • 用个人的信息备案网站吗巩义网站建设公司
  • 网站收录工具北京网站改版价格
  • 手机网站js电话悬浮网站建设及推广外包
  • 番禺网站设计与制作知名网站制作公司有哪些