Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

10 місяці тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #ifndef _mpeg_ts_h_
  2. #define _mpeg_ts_h_
  3. #include <stdint.h>
  4. #include <stddef.h>
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. #include "mpeg-proto.h"
  9. struct mpeg_ts_func_t
  10. {
  11. /// alloc new packet
  12. /// @param[in] param use-defined parameter(by mpeg_ps_create)
  13. /// @param[in] bytes alloc memory size in byte(default 188)
  14. /// @return memory pointer
  15. void* (*alloc)(void* param, size_t bytes);
  16. /// free packet
  17. /// @param[in] param use-defined parameter(by mpeg_ps_create)
  18. /// @param[in] packet PS packet pointer(alloc return pointer)
  19. void (*free)(void* param, void* packet);
  20. /// callback on PS packet done
  21. /// @param[in] param use-defined parameter(by mpeg_ps_create)
  22. /// @param[in] packet PS packet pointer(alloc return pointer)
  23. /// @param[in] bytes packet size
  24. /// @return 0-ok, other-error
  25. int (*write)(void* param, const void* packet, size_t bytes);
  26. };
  27. /// Create/Destroy MPEG2-TS muxer
  28. void* mpeg_ts_create(const struct mpeg_ts_func_t *func, void* param);
  29. int mpeg_ts_destroy(void* ts);
  30. /// Add audio/video stream
  31. /// @param[in] codecid PSI_STREAM_H264/PSI_STREAM_H265/PSI_STREAM_AAC, see more @mpeg-ts-proto.h
  32. /// @param[in] extradata itu h.222.0 program and program element descriptors, NULL for H.264/H.265/AAC
  33. /// @param[in] extradata_size extradata size in byte
  34. /// @return <=0-error, >0-audio/video stream id
  35. int mpeg_ts_add_stream(void* ts, int codecid, const void* extradata, size_t extradata_size);
  36. /// Muxer audio/video stream data
  37. /// @param[in] stream stream id by mpeg_ts_add_stream
  38. /// @param[in] flags 0x0001-video IDR frame, 0x8000-H.264/H.265 with AUD
  39. /// @param[in] pts audio/video stream timestamp in 90*ms
  40. /// @param[in] dts audio/video stream timestamp in 90*ms
  41. /// @param[in] data H.264/H.265-AnnexB stream(include 00 00 00 01), AAC-ADTS stream
  42. /// @return 0-ok, other-error
  43. int mpeg_ts_write(void* ts, int stream, int flags, int64_t pts, int64_t dts, const void* data, size_t bytes);
  44. /// Reset PAT/PCR period
  45. int mpeg_ts_reset(void* ts);
  46. /// FOR MULTI-PROGRAM TS STREAM ONLY
  47. /// Add a program
  48. /// @param[in] pn program number, valid value: [1, 0xFFFF]
  49. /// @return 0-OK, <0-error
  50. int mpeg_ts_add_program(void* ts, uint16_t pn, const void* info, int bytes);
  51. /// Remove a program by program number
  52. /// @param[in] pn program number, valid value: [1, 0xFFFF]
  53. /// @return 0-OK, <0-error
  54. int mpeg_ts_remove_program(void* ts, uint16_t pn);
  55. /// Add program stream(same as mpeg_ts_add_stream except program number)
  56. /// @param[in] pn mpeg_ts_add_program program number
  57. /// @return 0-OK, <0-error
  58. int mpeg_ts_add_program_stream(void* ts, uint16_t pn, int codecid, const void* extra_data, size_t extra_data_size);
  59. /// see more mpeg_ts_write
  60. typedef int (*ts_demuxer_onpacket)(void* param, int program, int stream, int codecid, int flags, int64_t pts, int64_t dts, const void* data, size_t bytes);
  61. struct ts_demuxer_t;
  62. struct ts_demuxer_t* ts_demuxer_create(ts_demuxer_onpacket onpacket, void* param);
  63. int ts_demuxer_destroy(struct ts_demuxer_t* demuxer);
  64. int ts_demuxer_input(struct ts_demuxer_t* demuxer, const uint8_t* data, size_t bytes);
  65. int ts_demuxer_flush(struct ts_demuxer_t* demuxer);
  66. int ts_demuxer_getservice(struct ts_demuxer_t* demuxer, int program, char* provider, int nprovider, char* name, int nname);
  67. struct ts_demuxer_notify_t
  68. {
  69. /// @param[in] param ps_demuxer_set_notify param
  70. /// @param[in] stream ps stream id
  71. /// @param[in] codecid ps codecid, e.g. STREAM_VIDEO_H264
  72. /// @param[in] extra stream extra data
  73. /// @param[in] bytes extra data length
  74. /// @param[in] finish 0-have more stream, 1-no more streams
  75. void (*onstream)(void* param, int stream, int codecid, const void* extra, int bytes, int finish);
  76. };
  77. /// Set ts notify on PMT change
  78. void ts_demuxer_set_notify(struct ts_demuxer_t* demuxer, struct ts_demuxer_notify_t* notify, void* param);
  79. #ifdef __cplusplus
  80. }
  81. #endif
  82. #endif /* !_mpeg_ts_h_ */