record_audio.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #ifndef RECORD_AUDIO
  2. #define RECORD_AUDIO
  3. #include "record_audio_define.h"
  4. #include "headers_ffmpeg.h"
  5. #include <atomic>
  6. #include <functional>
  7. #include <string>
  8. #include <thread>
  9. namespace am {
  10. typedef std::function<void(AVFrame *packet, int index)> cb_audio_data;
  11. typedef std::function<void(int, int)> cb_audio_error;
  12. class record_audio
  13. {
  14. public:
  15. record_audio();
  16. virtual ~record_audio();
  17. virtual int init(const std::string &device_name, const std::string &device_id, bool is_input) = 0;
  18. virtual int start() = 0;
  19. virtual int pause() = 0;
  20. virtual int resume() = 0;
  21. virtual int stop() = 0;
  22. virtual const AVRational get_time_base() = 0;
  23. virtual int64_t get_start_time() = 0;
  24. public:
  25. inline bool is_recording() { return _running; }
  26. inline int get_sample_rate() { return _sample_rate; }
  27. inline int get_bit_rate() { return _bit_rate; }
  28. inline int get_bit_per_sample() { return _bit_per_sample; }
  29. inline int get_channel_num() { return _channel_num; }
  30. inline int64_t av_get_channel_layout() { return _channel_layout; }
  31. inline AVSampleFormat get_fmt() { return _fmt; }
  32. inline const std::string &get_device_name() { return _device_name; }
  33. inline void registe_cb(cb_audio_data on_data, cb_audio_error on_error, int cb_extra_index = -1)
  34. {
  35. _on_data = on_data;
  36. _on_error = on_error;
  37. _cb_extra_index = cb_extra_index;
  38. }
  39. protected:
  40. std::atomic_bool _running;
  41. std::atomic_bool _inited;
  42. std::atomic_bool _paused;
  43. std::thread _thread;
  44. int _sample_rate;
  45. int _bit_rate;
  46. int _channel_num;
  47. int64_t _channel_layout;
  48. int _bit_per_sample;
  49. AVSampleFormat _fmt;
  50. std::string _device_name;
  51. std::string _device_id;
  52. bool _is_input;
  53. cb_audio_error _on_error;
  54. cb_audio_data _on_data;
  55. int _cb_extra_index;
  56. };
  57. } // namespace am
  58. #endif // !RECORD_AUDIO