+#include "../../stdafx.h"\r
+\r
+#include "flv.h"\r
+\r
+#include <common/exception/exceptions.h>\r
+\r
+#include <boost/filesystem.hpp>\r
+\r
+#include <iostream>\r
+\r
+namespace caspar {\r
+ \r
+double to_double(std::vector<char> bytes, bool readInReverse)\r
+{\r
+ if(bytes.size() != 8)\r
+ BOOST_THROW_EXCEPTION(caspar_exception());\r
+\r
+ if (readInReverse)\r
+ std::reverse(bytes.begin(), bytes.end());\r
+ \r
+ static_assert(sizeof(double) == 8, "");\r
+\r
+ double* tmp = (double*)bytes.data();\r
+ \r
+ double val = *tmp;\r
+ return val;\r
+}\r
+\r
+double next_double(std::fstream& fileStream, int offset, int length)\r
+{\r
+ fileStream.seekg(offset, std::ios::cur);\r
+ std::vector<char> bytes(length);\r
+ fileStream.read(bytes.data(), length);\r
+ return to_double(bytes, true);\r
+}\r
+\r
+flv_meta_info read_flv_meta_info(const std::wstring& filename)\r
+{\r
+ if(!boost::filesystem::exists(filename))\r
+ BOOST_THROW_EXCEPTION(caspar_exception());\r
+\r
+ flv_meta_info meta_info;\r
+\r
+ std::fstream fileStream = std::fstream(narrow(filename), std::fstream::in);\r
+ fileStream.seekg(27, std::ios::beg);\r
+ \r
+ std::array<char, 10> bytes;\r
+ fileStream.read(bytes.data(), bytes.size());\r
+\r
+ auto on_meta_data = std::string(bytes.begin(), bytes.end()); \r
+ if (on_meta_data == "onMetaData")\r
+ {\r
+ //// 16 bytes past "onMetaData" is the data for "duration" \r
+ meta_info.duration = next_double(fileStream, 16, 8);\r
+ //// 8 bytes past "duration" is the data for "width"\r
+ meta_info.width = next_double(fileStream, 8, 8);\r
+ //// 9 bytes past "width" is the data for "height"\r
+ meta_info.height = next_double(fileStream, 9, 8);\r
+ //// 16 bytes past "height" is the data for "videoDataRate"\r
+ meta_info.video_data_rate = next_double(fileStream, 16, 8);\r
+ //// 16 bytes past "videoDataRate" is the data for "audioDataRate"\r
+ meta_info.audio_data_rate = next_double(fileStream, 16, 8);\r
+ //// 12 bytes past "audioDataRate" is the data for "frameRate"\r
+ meta_info.frame_rate = next_double(fileStream, 12, 8);\r
+ }\r
+ \r
+ return meta_info;\r
+}\r
+\r
+}
\ No newline at end of file