コード例 #1
0
ファイル: exp1.c プロジェクト: xiayishusheng/code
int main()
{
	memset(&hints2,0,sizeof(hints2));
	hints2.ai_family=PF_UNSPEC;
	hints2.ai_socktype=SOCK_DGRAM;
	hints2.ai_protocol=IPPROTO_UDP;
	rc2=getaddrinfo("202.205.253.254","123",&hints2,&res2);
	if (rc2 != 0) {
		perror("getaddrinfo");
		return;
	}
	sk = socket(res2->ai_family, res2->ai_socktype,res2->ai_protocol);
	if (sk <0 ) {
		perror("socket");
	}
	else
	{
		printf("socket success!\n");
	}
	GetNtpTime(sk,res2);
}
コード例 #2
0
RtpSessionError CRtpSessionVideo::SendData(CPacket* packet)
{
  RtpSessionError ret = AM_RTP_SESSION_ERROR_OK;
  AM_U32           id = packet->GetStreamId();

  if (AM_LIKELY(id == mStreamId)) {
    AM_U32     packetNum = 0;
    AM_U32          size = packet->GetDataSize();
    AM_U8          *data = packet->GetDataPtr();
    RtspPacket  *packets = NULL;
    AM_S32 pktPtsIncr90k = (mOldPts > 0) ? (AM_S32)(packet->GetPTS()-mOldPts) :
        ((mVideoInfo.type == 1) ? (AM_S32)((AM_U64)mVideoInfo.rate *
            90000LLU / (AM_U64)mVideoInfo.scale) :
            (AM_S32)((AM_U64)mVideoInfo.fps * 90000LLU / 512000000LLU));

    mOldPts = packet->GetPTS();

    switch(mVideoInfo.type) {
      case 1: { /* H.264 */
        packets = mPackager->assemblePacketH264(data, size, mMaxPacketSize,
                                                packetNum, mSeqNum,
                                                mCurrentTimeStamp,
                                                mSsrc, pktPtsIncr90k);
      }break;
      case 2: { /* MJPEG */
        AM_U8 qfactor = (0xff & packet->mPayload->mData.mFrameAttr);
        packets = mPackager->assemblePacketJpeg(data, qfactor, size,
                                                mMaxPacketSize, packetNum,
                                                mSeqNum, mCurrentTimeStamp,
                                                mSsrc, pktPtsIncr90k);
      }break;
      default: {
        ERROR("Invalid video type!");
      }break;
    }
    packet->SetStreamId(mOldStreamId);
    packet->Release();
    if (AM_LIKELY(packets)) {
      AUTO_LOCK(mMutex);

      for (AM_UINT i = 0; i < packetNum; ++ i) {

        if (AM_LIKELY(HaveDestination(id))) {

          if (AM_UNLIKELY(!mRtspServer->SendPacket(mDestination,
                                                   &packets[i]))) {
            ERROR("Failed to send video NALU");
            ret = AM_RTP_SESSION_ERROR_NETWORK;
            break;
          }
        }
        /* No destination, just ignore */
        ret = AM_RTP_SESSION_ERROR_OK;
      }
      for (Destination *dest = mDestination; dest; dest = dest->next) {
        if (dest->enable) {
          dest->update_sent_data_info(mCurrentTimeStamp,
                                      GetNtpTime(),
                                      packetNum,
                                      size);
          if (AM_UNLIKELY(dest->sendsr)) {
            dest->update_rtcp_sr(mCurrentTimeStamp,
                                 90000,
                                 GetNtpTime());
            if (AM_LIKELY(dest->sendsr)) {
              mRtspServer->SendRtcpSr(dest);
              dest->sendsr = false;
            }
          }
        }
      }
    } else {
      ret = AM_RTP_SESSION_ERROR_BITSTREAM;
      ERROR("Failed to build RTP packet!");
    }
  } else {
    ERROR("No such session %u", packet->GetStreamId());
    ret = AM_RTP_SESSION_ERROR_NOSESSION;
    /* Audio stream's id is set to MAX_ENCODE_STREAM_NUM to distinguish it
     * from video stream, before release it we need to reset its stream id
     * to its original one, AVQueue need its original stream id to release
     * memory
     */
    packet->SetStreamId(mOldStreamId);
    packet->Release();
  }

  return ret;
}