playback.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #ifndef PLAYBACK_H
  2. #define PLAYBACK_H
  3. /**
  4. * @file playback.h
  5. * @brief 录像回放管理头文件
  6. *
  7. * 本文件定义录像回放相关的功能接口,
  8. * 包括回放开始、停止、数据接收等。
  9. */
  10. #include "common.h"
  11. #include "config.h"
  12. #include "stream.h"
  13. /* 回放状态 */
  14. typedef enum {
  15. PLAYBACK_STATE_IDLE = 0,
  16. PLAYBACK_STATE_STARTING,
  17. PLAYBACK_STATE_PLAYING,
  18. PLAYBACK_STATE_PAUSED,
  19. PLAYBACK_STATE_STOPPING,
  20. PLAYBACK_STATE_ERROR
  21. } PlaybackState;
  22. /* 回放会话结构 */
  23. typedef struct {
  24. int playback_id; /* 回放ID */
  25. char device_id[MAX_DEVICE_ID]; /* 设备ID */
  26. int channel; /* 通道号 */
  27. PlaybackState state; /* 回放状态 */
  28. time_t start_time; /* 回放开始时间 */
  29. time_t end_time; /* 回放结束时间 */
  30. int speed; /* 回放速度(1=正常, 2=2倍, 4=4倍...) */
  31. int frame_count; /* 已接收帧数 */
  32. StreamSession* stream; /* 关联的流会话 */
  33. pthread_mutex_t lock; /* 线程锁 */
  34. int is_running; /* 是否运行中 */
  35. void* internal_handle; /* 内部句柄 */
  36. } PlaybackSession;
  37. /* 回放数据回调 */
  38. typedef void (*PlaybackDataCB)(PlaybackSession* session, StreamFrame* frame, void* user_data);
  39. /* 回放状态回调 */
  40. typedef void (*PlaybackStatusCB)(PlaybackSession* session, PlaybackState state, void* user_data);
  41. /**
  42. * @brief 初始化回放模块
  43. * @return 成功返回SUCCESS, 失败返回FAILURE
  44. */
  45. int playback_init(void);
  46. /**
  47. * @brief 反初始化回放模块
  48. */
  49. void playback_cleanup(void);
  50. /**
  51. * @brief 开始录像回放
  52. * @param device_id 设备ID
  53. * @param channel 通道号
  54. * @param start_time 开始时间
  55. * @param end_time 结束时间
  56. * @param speed 回放速度
  57. * @param data_cb 回放数据回调
  58. * @param status_cb 回放状态回调
  59. * @param user_data 用户数据
  60. * @return 成功返回回放会话指针, 失败返回NULL
  61. *
  62. * 说明: 发起录像回放请求。内部流程:
  63. * 1. 调用NET_ESTREAM_StartListenPlayBack开启SMS回放监听
  64. * 2. 调用NET_ECMS_StartPlayBack向设备发送回放开始请求
  65. * 3. 接收设备回放码流数据
  66. * 4. 可选: 将回放流转发到RTMP服务器
  67. */
  68. PlaybackSession* playback_start(const char* device_id, int channel,
  69. time_t start_time, time_t end_time,
  70. int speed,
  71. PlaybackDataCB data_cb,
  72. PlaybackStatusCB status_cb,
  73. void* user_data);
  74. /**
  75. * @brief 停止录像回放
  76. * @param session 回放会话指针
  77. * @return 成功返回SUCCESS, 失败返回FAILURE
  78. *
  79. * 说明: 停止回放并释放资源。内部流程:
  80. * 1. 调用NET_ESTREAM_StopPlayBack停止码流转发
  81. * 2. 调用NET_ECMS_StopPlayBack向设备发送停止请求
  82. * 3. 调用NET_ESTREAM_StopListenPlayBack停止监听
  83. */
  84. int playback_stop(PlaybackSession* session);
  85. /**
  86. * @brief 暂停回放
  87. * @param session 回放会话指针
  88. * @return 成功返回SUCCESS, 失败返回FAILURE
  89. */
  90. int playback_pause(PlaybackSession* session);
  91. /**
  92. * @brief 恢复回放
  93. * @param session 回放会话指针
  94. * @return 成功返回SUCCESS, 失败返回FAILURE
  95. */
  96. int playback_resume(PlaybackSession* session);
  97. /**
  98. * @brief 获取录像文件列表
  99. * @param device_id 设备ID
  100. * @param channel 通道号
  101. * @param start_time 开始时间
  102. * @param end_time 结束时间
  103. * @param files 输出文件列表
  104. * @param max_files 最大文件数
  105. * @return 返回录像文件数量
  106. *
  107. * 说明: 查询指定时间段内的录像文件列表。
  108. */
  109. int playback_get_file_list(const char* device_id, int channel,
  110. time_t start_time, time_t end_time,
  111. char files[][MAX_PATH_SIZE], int max_files);
  112. /**
  113. * @brief 下载录像文件
  114. * @param device_id 设备ID
  115. * @param channel 通道号
  116. * @param file_name 文件名
  117. * @param save_path 保存路径
  118. * @return 成功返回SUCCESS, 失败返回FAILURE
  119. */
  120. int playback_download_file(const char* device_id, int channel,
  121. const char* file_name, const char* save_path);
  122. /**
  123. * @brief 获取所有活跃回放会话
  124. * @param sessions 输出会话指针数组
  125. * @param max_sessions 最大会话数
  126. * @return 返回活跃会话数量
  127. */
  128. int playback_get_active_sessions(PlaybackSession* sessions[], int max_sessions);
  129. /**
  130. * @brief 停止所有回放
  131. */
  132. void playback_stop_all(void);
  133. /**
  134. * @brief 按回放ID查找会话
  135. */
  136. PlaybackSession* playback_get_session(int playback_id);
  137. /**
  138. * @brief 获取回放会话状态
  139. * @param session 回放会话指针
  140. * @return 回放状态枚举值
  141. */
  142. PlaybackState playback_get_state(PlaybackSession* session);
  143. #endif /* PLAYBACK_H */