muxer_ffmpeg.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #ifndef MUXER_FFMPEG
  2. #define MUXER_FFMPEG
  3. #include <functional>
  4. #include <list>
  5. #include <math.h>
  6. #include <mutex>
  7. #include <thread>
  8. #include "muxer_file.h"
  9. #include "headers_ffmpeg.h"
  10. namespace am {
  11. class muxer_ffmpeg : public muxer_file
  12. {
  13. public:
  14. muxer_ffmpeg();
  15. ~muxer_ffmpeg();
  16. int init(const char *output_file,
  17. record_desktop *source_desktop,
  18. record_audio **source_audios,
  19. const int source_audios_nb,
  20. const MUX_SETTING_T &setting);
  21. int start();
  22. int stop();
  23. int pause();
  24. int resume();
  25. private:
  26. void on_desktop_data(AVFrame *frame);
  27. void on_desktop_error(int error);
  28. void on_audio_data(AVFrame *frame, int index);
  29. void on_audio_error(int error, int index);
  30. void on_filter_amix_data(AVFrame *frame, int index);
  31. void on_filter_amix_error(int error, int index);
  32. void on_filter_aresample_data(AVFrame *frame, int index);
  33. void on_filter_aresample_error(int error, int index);
  34. void on_enc_264_data(AVPacket *packet);
  35. void on_enc_264_error(int error);
  36. void on_enc_aac_data(AVPacket *packet);
  37. void on_enc_aac_error(int error);
  38. int alloc_oc(const char *output_file, const MUX_SETTING_T &setting);
  39. int add_video_stream(const MUX_SETTING_T &setting, record_desktop *source_desktop);
  40. int add_audio_stream(const MUX_SETTING_T &setting,
  41. record_audio **source_audios,
  42. const int source_audios_nb);
  43. int open_output(const char *output_file, const MUX_SETTING_T &setting);
  44. void cleanup_video();
  45. void cleanup_audio();
  46. void cleanup();
  47. uint64_t get_current_time();
  48. int write_video(AVPacket *packet);
  49. int write_audio(AVPacket *packet);
  50. private:
  51. struct MUX_STREAM_T *_v_stream, *_a_stream;
  52. AVOutputFormat *_fmt;
  53. AVFormatContext *_fmt_ctx;
  54. int64_t _base_time;
  55. char ff_error[4096];
  56. std::mutex _mutex;
  57. std::mutex _time_mutex;
  58. };
  59. } // namespace am
  60. #endif