Advertisement
Guest User

Untitled

a guest
Mar 12th, 2014
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.27 KB | None | 0 0
  1. // Пакет в SPIF2 выглядит след образом:
  2. // Сначала идёт 12-ти байтный заголовок, затем данные
  3. //
  4. // 0 1 2 3
  5. // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  6. // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7. // | MAGIC = 0xFEED5EED (network order) |
  8. // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9. // | protobuf message size (network order) |
  10. // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  11. // | binary data size (network order) |
  12. // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  13. // | ****** protobuf data ****** ..|
  14. // | ****** binary data ******* .. |
  15. //
  16. // protobuf data всегда содержат Tag, описанный ниже
  17. // binary это дополнительные данные, для которых не используется protobuf.
  18. // Передавать большие (больше 1К) данные, намного лучше передавать
  19. // в binary data, а не в protobuf сообщении.
  20. //
  21. // Последовательность данных:
  22. // * Первым приходит информация о потоке (stream)
  23. // * Потом приходят элементарные потоки (es)
  24. // * Потом идут кадры (unit)
  25. //
  26. // ESы нумеруются, в кадрах есть информация о том какому ESу
  27. // соответствует кадр.
  28. //
  29. // Специальные ошибки:
  30. //
  31. // * PING (code = 10001)
  32. // плеер должен ответить сколько секунд видео находится в буфере,
  33. // используется для настройки адаптивного битрейта
  34. //
  35. // * FLUSH (code = 10002)
  36. // плеер должен скинуть кадровый буффер, после FLUSH должен придти
  37. // IDR
  38. //
  39. // NOTE: binary data используется только для Unit сообщений
  40.  
  41. package spif;
  42.  
  43. enum Packetization {
  44. RAW = 1; // SPIFPacketizationRaw
  45. }
  46.  
  47. enum Timebase {
  48. LOCAL = 0; // SPIFTimebaseLocal
  49. TB90KHz = 1; // SPIFTimebase90KHz
  50. TB1KHz = 2; // SPIFTimebase1KHz
  51. }
  52.  
  53. enum IndexType {
  54. IDR = 1;
  55. IFRAME = 2;
  56. }
  57.  
  58. message FrameIndex {
  59. required IndexType ftype = 1;
  60. required int64 time = 2;
  61. optional int64 offset = 3; // offset in bytes in spif2 stream
  62. }
  63.  
  64. message Stream {
  65. required string stream_magic = 1 [ default = "SPIFSTREAM" ];
  66. required Packetization packetization = 2;
  67. required Timebase timebase = 3;
  68. repeated FrameIndex index = 4;
  69. optional string info = 5; // JSON
  70. }
  71.  
  72. enum ESType {
  73. MUX = 1;
  74. AVVIDEO = 2;
  75. AVAUDIO = 3;
  76. SUBTITLES = 4;
  77. SIGNALLING = 5;
  78. AUX = 6;
  79. }
  80.  
  81. enum ESVideoCodec {
  82. MPEG2Video = 1;
  83. H264Video = 2;
  84. AnnexBH264Video = 3;
  85. RawYUVPlanes = 4;
  86. VideoAvcodec = 5;
  87. }
  88.  
  89. enum ESAudioCodec {
  90. MPEG2Audio = 1;
  91. ADTSAACAudio = 2;
  92. RawAACAudio = 3;
  93. RawPCMAudio = 4;
  94. WavAudio = 5;
  95. AudioAvcodec = 6;
  96. }
  97.  
  98. message ES {
  99. required int32 esno = 1;
  100. optional int32 version = 2;
  101. required ESType estype = 3;
  102. required int32 escodec = 4;
  103. optional string info = 5; // JSON
  104. }
  105.  
  106. message Unit {
  107. required int32 esno = 1;
  108. optional int32 version = 2;
  109. optional bool rap = 3;
  110. required uint64 dts = 4;
  111. required uint64 pts = 5;
  112. required uint64 length = 7;
  113. optional int64 duration = 6;
  114. optional string info = 8; // JSON
  115.  
  116. // Shared stuff (data_pipe)
  117. optional bool shared = 9;
  118. optional uint32 round = 10;
  119. optional uint32 offset = 11;
  120. }
  121.  
  122. message Error {
  123. required int32 code = 1;
  124. optional string domain = 2;
  125. optional string strerr = 3;
  126. }
  127.  
  128. message Finished {
  129. required string finish_magic = 1 [ default = "SPIFFINISH" ];
  130. optional uint32 chksum = 2;
  131. }
  132.  
  133. message Control {
  134. required uint32 length = 1;
  135. optional string cname = 2;
  136. optional bool cobject = 3; // true, если в данных объект
  137. }
  138.  
  139. enum TagType {
  140. STREAM = 1;
  141. ESES = 2;
  142. UNIT = 3;
  143. ERROR = 4;
  144. FINISHED = 5;
  145.  
  146. // For SPIF2 extensions
  147. CONTROL = 6;
  148. }
  149.  
  150. message Tag {
  151. required TagType type = 1;
  152.  
  153. optional Stream stream = 2;
  154. optional ES es = 3;
  155. optional Unit unit = 4;
  156. optional Error error = 5;
  157. optional Finished finish = 6;
  158.  
  159. // For SPIF2 extensions
  160. optional Control control = 7;
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement