Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

116 řádky
4.5KB

  1. #include "rtmp-netconnection.h"
  2. #include "amf0.h"
  3. #include <stdlib.h>
  4. #include <string.h>
  5. uint8_t* rtmp_netconnection_connect(uint8_t* out, size_t bytes, double transactionId, const struct rtmp_connect_t* connect)
  6. {
  7. uint8_t* end = out + bytes;
  8. const char* command = "connect";
  9. out = AMFWriteString(out, end, command, strlen(command));
  10. out = AMFWriteDouble(out, end, transactionId);
  11. out = AMFWriteObject(out, end);
  12. out = AMFWriteNamedString(out, end, "app", 3, connect->app, strlen(connect->app));
  13. out = AMFWriteNamedString(out, end, "flashVer", 8, connect->flashver, strlen(connect->flashver));
  14. if (connect->tcUrl[0]) out = AMFWriteNamedString(out, end, "tcUrl", 5, connect->tcUrl, strlen(connect->tcUrl));
  15. if (connect->swfUrl[0]) out = AMFWriteNamedString(out, end, "swfUrl", 6, connect->swfUrl, strlen(connect->swfUrl));
  16. if (connect->pageUrl[0]) out = AMFWriteNamedString(out, end, "pageUrl", 7, connect->pageUrl, strlen(connect->pageUrl));
  17. out = AMFWriteNamedBoolean(out, end, "fpad", 4, connect->fpad);
  18. out = AMFWriteNamedDouble(out, end, "capabilities", 12, connect->capabilities);
  19. out = AMFWriteNamedDouble(out, end, "audioCodecs", 11, connect->audioCodecs);
  20. out = AMFWriteNamedDouble(out, end, "videoCodecs", 11, connect->videoCodecs);
  21. out = AMFWriteNamedDouble(out, end, "videoFunction", 13, connect->videoFunction);
  22. out = AMFWriteNamedDouble(out, end, "objectEncoding", 14, connect->encoding);
  23. out = AMFWriteObjectEnd(out, end);
  24. return out;
  25. }
  26. uint8_t* rtmp_netconnection_connect_reply(uint8_t* out, size_t bytes, double transactionId, const char* fmsver, double capabilities, const char* code, const char* level, const char* description, double encoding)
  27. {
  28. uint8_t* end = out + bytes;
  29. const char* command = "_result";
  30. out = AMFWriteString(out, end, command, strlen(command));
  31. out = AMFWriteDouble(out, end, transactionId);
  32. out = AMFWriteObject(out, end);
  33. out = AMFWriteNamedString(out, end, "fmsVer", 6, fmsver, strlen(fmsver));
  34. out = AMFWriteNamedDouble(out, end, "capabilities", 12, capabilities);
  35. out = AMFWriteObjectEnd(out, end);
  36. out = AMFWriteObject(out, end);
  37. out = AMFWriteNamedString(out, end, "level", 5, level, strlen(level));
  38. out = AMFWriteNamedString(out, end, "code", 4, code, strlen(code));
  39. out = AMFWriteNamedString(out, end, "description", 11, description, strlen(description));
  40. out = AMFWriteNamedDouble(out, end, "objectEncoding", 14, encoding);
  41. out = AMFWriteObjectEnd(out, end);
  42. return out;
  43. }
  44. uint8_t* rtmp_netconnection_create_stream(uint8_t* out, size_t bytes, double transactionId)
  45. {
  46. uint8_t* end = out + bytes;
  47. const char* command = "createStream";
  48. out = AMFWriteString(out, end, command, strlen(command));
  49. out = AMFWriteDouble(out, end, transactionId);
  50. out = AMFWriteNull(out, end);
  51. return out;
  52. }
  53. uint8_t* rtmp_netconnection_create_stream_reply(uint8_t* out, size_t bytes, double transactionId, double stream_id)
  54. {
  55. uint8_t* end = out + bytes;
  56. const char* command = "_result";
  57. out = AMFWriteString(out, end, command, strlen(command));
  58. out = AMFWriteDouble(out, end, transactionId);
  59. out = AMFWriteNull(out, end);
  60. out = AMFWriteDouble(out, end, stream_id);
  61. return out;
  62. }
  63. uint8_t* rtmp_netconnection_get_stream_length(uint8_t* out, size_t bytes, double transactionId, const char* stream_name)
  64. {
  65. uint8_t* end = out + bytes;
  66. const char* command = "getStreamLength";
  67. out = AMFWriteString(out, end, command, strlen(command));
  68. out = AMFWriteDouble(out, end, transactionId);
  69. out = AMFWriteNull(out, end);
  70. out = AMFWriteString(out, end, stream_name, strlen(stream_name));
  71. return out;
  72. }
  73. uint8_t* rtmp_netconnection_get_stream_length_reply(uint8_t* out, size_t bytes, double transactionId, double duration)
  74. {
  75. uint8_t* end = out + bytes;
  76. const char* command = "_result";
  77. out = AMFWriteString(out, end, command, strlen(command));
  78. out = AMFWriteDouble(out, end, transactionId);
  79. out = AMFWriteNull(out, end);
  80. out = AMFWriteDouble(out, end, duration);
  81. return out;
  82. }
  83. uint8_t* rtmp_netconnection_error(uint8_t* out, size_t bytes, double transactionId, const char* code, const char* level, const char* description)
  84. {
  85. uint8_t* end = out + bytes;
  86. const char* command = "_error";
  87. out = AMFWriteString(out, end, command, strlen(command));
  88. out = AMFWriteDouble(out, end, transactionId);
  89. out = AMFWriteNull(out, end);
  90. out = AMFWriteObject(out, end);
  91. out = AMFWriteNamedString(out, end, "code", 4, code, strlen(code));
  92. out = AMFWriteNamedString(out, end, "level", 5, level, strlen(level));
  93. out = AMFWriteNamedString(out, end, "description", 11, description, strlen(description));
  94. out = AMFWriteObjectEnd(out, end);
  95. return out;
  96. }