KLMp4Movie.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:3k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 1999-2000 by Kingsoft
  3. //
  4. // File: KMp4Movie.cpp
  5. // Date: 2000.08.08
  6. // Code: Daniel Wang
  7. // Desc: MPEG-4 Movie Play Class
  8. //---------------------------------------------------------------------------
  9. #include "KWin32.h"
  10. #include "KDebug.h"
  11. #include "KSystem.h"
  12. #include "KKeyboard.h"
  13. #include "KMp4Movie.h"
  14. //---------------------------------------------------------------------------
  15. // 函数: Open
  16. // 功能: 打开AVI文件
  17. // 参数: FileName 文件名
  18. // 返回: TRUE-成功 FALSE-失败
  19. //---------------------------------------------------------------------------
  20. BOOL KMp4Movie::Open(LPSTR FileName)
  21. {
  22. // 打开音频AVI文件
  23. m_Audio.Open(FileName);
  24. // 打开视频AVI文件
  25. m_Video.Open(FileName);
  26. return TRUE;
  27. }
  28. //---------------------------------------------------------------------------
  29. // 函数: Close
  30. // 功能: 关闭文件,释放资源
  31. // 参数: void
  32. // 返回: void
  33. //---------------------------------------------------------------------------
  34. void KMp4Movie::Close()
  35. {
  36. // 关闭音频流
  37. m_Audio.Close();
  38. // 关闭视频流
  39. m_Video.Close();
  40. }
  41. //---------------------------------------------------------------------------
  42. // 函数: Play
  43. // 功能: 开始播放
  44. // 参数: void
  45. // 返回: void
  46. //---------------------------------------------------------------------------
  47. void KMp4Movie::Play(BOOL bZoom)
  48. {
  49. m_Audio.Play();
  50. Sleep(750); //MSDN说音频比视频满0.75秒
  51. m_Video.Play(bZoom);
  52. }
  53. //---------------------------------------------------------------------------
  54. // 函数: Stop
  55. // 功能: 停止播放
  56. // 参数: void
  57. // 返回: void
  58. //---------------------------------------------------------------------------
  59. void KMp4Movie::Stop()
  60. {
  61. m_Audio.Stop();
  62. m_Video.Stop();
  63. }
  64. //---------------------------------------------------------------------------
  65. // 函数: Seek
  66. // 功能:
  67. // 参数: void
  68. // 返回: void
  69. //---------------------------------------------------------------------------
  70. void KMp4Movie::Seek(int nPercent)
  71. {
  72. m_Audio.Seek(nPercent);
  73. m_Video.Seek(nPercent);
  74. }
  75. //---------------------------------------------------------------------------
  76. // 函数: Rewind
  77. // 功能: 从头播放
  78. // 参数: void
  79. // 返回: void
  80. //---------------------------------------------------------------------------
  81. void KMp4Movie::Rewind()
  82. {
  83. m_Audio.Rewind();
  84. m_Video.Rewind();
  85. }
  86. //---------------------------------------------------------------------------
  87. // 函数: SetPos
  88. // 功能: 设置位置
  89. // 参数: nX, nY 坐标
  90. // 返回: void
  91. //---------------------------------------------------------------------------
  92. void KMp4Movie::SetPos(int nX, int nY)
  93. {
  94. m_Video.SetPos(nX, nY);
  95. }
  96. //---------------------------------------------------------------------------
  97. // 函数: WaitForEnd
  98. // 功能: 等待结束
  99. // 参数: void
  100. // 返回: void
  101. //---------------------------------------------------------------------------
  102. void KMp4Movie::WaitForEnd()
  103. {
  104. MSG  Msg;
  105. while (TRUE)
  106. {
  107. // 等待消息,释放CPU资源
  108. WaitMessage();
  109. // 中途关闭程序
  110. if (!GetMessage(&Msg, NULL, 0, 0))
  111. {
  112. PostQuitMessage(0);
  113. break;
  114. }
  115. // ESCAPE键跳过播放
  116. g_Keyboard.UpdateState();
  117. if (g_Keyboard.IsDown(DIK_ESCAPE))
  118. {
  119. Close(); // 避免解码线程填充已经释放的内存
  120. break;
  121. }
  122. // 播放完成通告消息
  123. if (Msg.message == WM_MP4MOVIE_END)
  124. break;
  125. // 播放完成通告没有收到时的补救处理
  126. if (!m_Video.IsPlaying())
  127. break;
  128. DispatchMessage(&Msg);
  129. }
  130. }
  131. //---------------------------------------------------------------------------