FFmpegWriter.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // FFmpegWriter.h: interface for the FFmpegWriter class.
  2. #pragma once
  3. #ifdef _WIN32
  4. #ifndef INT64_C
  5. #define INT64_C(c) (c##LL)
  6. #define UINT64_C(c) (c##UL)
  7. #endif
  8. #endif
  9. #ifdef __cplusplus
  10. extern "C"
  11. {
  12. #define __STDC_CONSTANT_MACROS
  13. #endif // __cplusplus
  14. #include <libavutil/avassert.h>
  15. #include <libavutil/channel_layout.h>
  16. #include <libavutil/opt.h>
  17. #include <libavutil/mathematics.h>
  18. #include <libavutil/timestamp.h>
  19. #include <libavformat/avformat.h>
  20. #include <libswscale/swscale.h>
  21. #include <libswresample/swresample.h>
  22. #include <libavutil/pixdesc.h>
  23. #ifdef __cplusplus
  24. }
  25. #endif // __cplusplus
  26. #include "ByteBuffer.h"
  27. typedef struct OutputStream_t OutputStream;
  28. class LogApi
  29. {
  30. public:
  31. virtual void Debug(const char* fmt, ...) = 0;
  32. virtual void vDebug(const char* str, va_list list) = 0;
  33. };
  34. class FFmpegWriter
  35. {
  36. public:
  37. FFmpegWriter(LogApi* pLogAPI) {m_pLogApi = pLogAPI; m_video_st = NULL; m_audio_st = NULL; m_outfmt = NULL; m_formatctx = NULL;
  38. m_audio_codec = NULL; m_video_codec = NULL; m_bhave_video = false; m_bhave_audio = false; m_audio_input_buffer = NULL; m_bstart = false;}
  39. ~FFmpegWriter() {}
  40. private://内部成员变量
  41. OutputStream *m_video_st;
  42. OutputStream *m_audio_st;
  43. AVOutputFormat* m_outfmt;
  44. AVFormatContext* m_formatctx;
  45. AVCodec* m_audio_codec;
  46. AVCodec* m_video_codec;
  47. int m_bhave_video;
  48. int m_bhave_audio;
  49. AVPixelFormat m_input_pix_fmt;
  50. LogApi* m_pLogApi;
  51. ByteBuffer* m_audio_input_buffer;
  52. void Close();
  53. bool m_bstart;
  54. public:
  55. bool InitWriter(char* filename, int width, int height, int colorbit, int nfps,
  56. int nSamplePsec, int nchannels, int nBitPerSample, int nmaxspacing, int nquality, int nOutBitRate, int iAudioType);
  57. bool StartWrite();
  58. bool StopWrite();
  59. bool ReceiveAudioData(unsigned char* pData, unsigned long ulen);
  60. bool ReceiveVideoData(unsigned char* pData, unsigned long ulen);
  61. };