Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

39 lines
958B

  1. // RFC3551 RTP Profile for Audio and Video Conferences with Minimal Control
  2. #include "rtp-packet.h"
  3. #include "rtp-profile.h"
  4. #include "rtp-payload-helper.h"
  5. #include "rtp-payload-internal.h"
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <assert.h>
  9. #include <errno.h>
  10. static int rtp_decode_rfc2250(void* p, const void* packet, int bytes)
  11. {
  12. int r;
  13. struct rtp_packet_t pkt;
  14. struct rtp_payload_helper_t *helper;
  15. r = 0;
  16. helper = (struct rtp_payload_helper_t *)p;
  17. if (!helper || 0 != rtp_packet_deserialize(&pkt, packet, bytes))
  18. return -EINVAL;
  19. assert(pkt.payloadlen >= 0);
  20. if(pkt.payloadlen > 0)
  21. r = helper->handler.packet(helper->cbparam, pkt.payload, pkt.payloadlen, pkt.rtp.timestamp, 0);
  22. return 0 == r ? 1 : r; // packet handled
  23. }
  24. struct rtp_payload_decode_t *rtp_common_decode()
  25. {
  26. static struct rtp_payload_decode_t unpacker = {
  27. rtp_payload_helper_create,
  28. rtp_payload_helper_destroy,
  29. rtp_decode_rfc2250,
  30. };
  31. return &unpacker;
  32. }