ZZLFileWriter.h
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:3k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2. *  Openmysee
  3. *
  4. *  This program is free software; you can redistribute it and/or modify
  5. *  it under the terms of the GNU General Public License as published by
  6. *  the Free Software Foundation; either version 2 of the License, or
  7. *  (at your option) any later version.
  8. *
  9. *  This program is distributed in the hope that it will be useful,
  10. *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. *  GNU General Public License for more details.
  13. *
  14. *  You should have received a copy of the GNU General Public License
  15. *  along with this program; if not, write to the Free Software
  16. *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. *
  18. */
  19. #pragma once
  20. class ZZLFileWriter
  21. {
  22. public:
  23. ZZLFileWriter(void);
  24. virtual ~ZZLFileWriter(void);
  25. // 初始化
  26. bool Init(string path, string name);
  27. // 媒体类型数据
  28. bool SetMediaType(const TVMEDIATYPESECTION& audioType, BYTE* audioData, const TVMEDIATYPESECTION& videoType, BYTE* videoData);
  29. // 新的Sample
  30. bool PutSample(const SampleHeader& header, BYTE* pData);
  31. // 获取最新的码率统计
  32. double GetBitRate();
  33. //设置是否是单音频
  34. void SetIsSingleAudio(BOOL abAudio);
  35. private:
  36. bool SaveSample(UINT dataOff, const UINT allSize); // 保存Sample
  37. bool SaveBlock(const PBYTE data, UINT size); // 保存Block
  38. bool RemoveOldTmpFile(string path); // 删除以前使用的临时文件
  39. bool SaveBitRate(); // 保存码率到配置文件
  40. private:
  41. LONGLONG mLLMaxAudioTime;
  42. LONGLONG mLLMaxVideoTime;
  43. typedef CRITICAL_SECTION C_S;
  44. C_S zzlfile_cs; // 调用PutSample的互斥变量
  45. string savePath; // 保存的路径
  46. string chnlName; // 节目名
  47. UINT blockCount; // 块数
  48. // 这些成员用于生成zzl文件
  49. HANDLE zzlHandle; // zzl文件句柄
  50. UINT dataOffset; // 数据偏移量
  51. time_t startTime; // 起始时间
  52. time_t endTime; // 结束时间
  53. const float FILE_VERSION; // ZZL文件的版本
  54. BOOL mbIsSingleAudio; //单音频
  55. // 这些成员用于生成节目文件(数据文件//配置文件)
  56. HANDLE dataHandle; // 数据文件的句柄
  57. HANDLE keySampleHandle; // 关键帧文件的句柄
  58. HANDLE configHandle; // 配置文件的句柄
  59. UINT dataFileCount; // 数据文件的个数
  60. BYTE newBlock[BLOCK_SIZE]; // 正在生成的块
  61. UINT newBlockSize; // newBlock的大小
  62. BYTE* sampleBuffer; // 将Sample存入Block的中转站
  63. UINT sampleBufferSize; // sample缓存的大小
  64. time_t firstSampleTime; // 当前块中第一个sample的starttime
  65. time_t firstKeySampleTime; // 当前块中第一个keysample的starttime
  66. LONGLONG audioDataSize; // 音频Sample的总大小
  67. LONGLONG audioStartTime; // 第一个音频Sample的时间戳
  68. LONGLONG audioEndTime; // 最近一个音频Sample的时间戳
  69. LONGLONG videoDataSize; // 视频Sample的总大小
  70. LONGLONG videoStartTime; // 第一个视频Sample的时间戳
  71. LONGLONG videoEndTime; // 最近一个视频Sample的时间戳
  72. enum {
  73. BLOCK_OF_DATA_FILE = 163840, // 每X块数据保存成独立的数据
  74. };
  75. };