Commit 6e5cd034 by xiongziliang

优化点播相关代码

parent ecf38474
...@@ -276,7 +276,7 @@ MediaSource::Ptr MediaSource::find(const string &schema, const string &vhost_tmp ...@@ -276,7 +276,7 @@ MediaSource::Ptr MediaSource::find(const string &schema, const string &vhost_tmp
if(!ret && bMake){ if(!ret && bMake){
//未查找媒体源,则创建一个 //未查找媒体源,则创建一个
ret = onMakeMediaSource(schema, vhost,app,id); ret = createFromMP4(schema, vhost, app, id);
} }
return ret; return ret;
} }
...@@ -427,5 +427,24 @@ void MediaSourceEvent::onNoneReader(MediaSource &sender){ ...@@ -427,5 +427,24 @@ void MediaSourceEvent::onNoneReader(MediaSource &sender){
}, nullptr); }, nullptr);
} }
MediaSource::Ptr MediaSource::createFromMP4(const string &schema, const string &vhost, const string &app, const string &stream, const string &filePath , bool checkApp){
#ifdef ENABLE_MP4
GET_CONFIG(string, appName, Record::kAppName);
if (checkApp && app != appName) {
return nullptr;
}
try {
MP4Reader::Ptr pReader(new MP4Reader(vhost, app, stream, filePath));
pReader->startReadMP4();
return MediaSource::find(schema, vhost, app, stream, false);
} catch (std::exception &ex) {
WarnL << ex.what();
return nullptr;
}
#else
WarnL << "创建MP4点播失败,请编译时打开\"ENABLE_MP4\"选项";
return nullptr;
#endif //ENABLE_MP4
}
} /* namespace mediakit */ } /* namespace mediakit */
\ No newline at end of file
...@@ -145,6 +145,9 @@ public: ...@@ -145,6 +145,9 @@ public:
static void findAsync(const MediaInfo &info, const std::shared_ptr<TcpSession> &session, const function<void(const Ptr &src)> &cb); static void findAsync(const MediaInfo &info, const std::shared_ptr<TcpSession> &session, const function<void(const Ptr &src)> &cb);
// 遍历所有流 // 遍历所有流
static void for_each_media(const function<void(const Ptr &src)> &cb); static void for_each_media(const function<void(const Ptr &src)> &cb);
// 从mp4文件生成MediaSource
static MediaSource::Ptr createFromMP4(const string &schema, const string &vhost, const string &app, const string &stream, const string &filePath = "", bool checkApp = true);
protected: protected:
void regist() ; void regist() ;
bool unregist() ; bool unregist() ;
......
...@@ -167,31 +167,4 @@ int MP4Reader::totalReaderCount(MediaSource &sender) { ...@@ -167,31 +167,4 @@ int MP4Reader::totalReaderCount(MediaSource &sender) {
} }
} /* namespace mediakit */ } /* namespace mediakit */
#endif //ENABLE_MP4 #endif //ENABLE_MP4
\ No newline at end of file
namespace mediakit {
MediaSource::Ptr onMakeMediaSource(const string &strSchema,
const string &strVhost,
const string &strApp,
const string &strId,
const string &filePath,
bool checkApp) {
#ifdef ENABLE_MP4
GET_CONFIG(string, appName, Record::kAppName);
if (checkApp && strApp != appName) {
return nullptr;
}
try {
MP4Reader::Ptr pReader(new MP4Reader(strVhost, strApp, strId, filePath));
pReader->startReadMP4();
return MediaSource::find(strSchema, strVhost, strApp, strId, false);
} catch (std::exception &ex) {
WarnL << ex.what();
return nullptr;
}
#else
return nullptr;
#endif //ENABLE_MP4
}
}//namespace mediakit
...@@ -73,25 +73,5 @@ private: ...@@ -73,25 +73,5 @@ private:
}; };
} /* namespace mediakit */ } /* namespace mediakit */
#endif //ENABLE_MP4 #endif //ENABLE_MP4
namespace mediakit {
/**
* 自动生成MP4Reader对象然后查找相关的MediaSource对象
* @param strSchema 协议名
* @param strVhost 虚拟主机
* @param strApp 应用名
* @param strId 流id
* @param filePath 文件路径,如果为空则根据配置文件和上面参数自动生成,否则使用指定的文件
* @param checkApp 是否检查app,防止服务器上文件被乱访问
* @return MediaSource
*/
MediaSource::Ptr onMakeMediaSource(const string &strSchema,
const string &strVhost,
const string &strApp,
const string &strId,
const string &filePath = "",
bool checkApp = true);
} /* namespace mediakit */
#endif /* SRC_MEDIAFILE_MEDIAREADER_H_ */ #endif /* SRC_MEDIAFILE_MEDIAREADER_H_ */
...@@ -63,7 +63,7 @@ void createPusher(const EventPoller::Ptr &poller, ...@@ -63,7 +63,7 @@ void createPusher(const EventPoller::Ptr &poller,
const string &filePath, const string &filePath,
const string &url) { const string &url) {
//不限制APP名,并且指定文件绝对路径 //不限制APP名,并且指定文件绝对路径
auto src = onMakeMediaSource(schema,vhost,app,stream,filePath, false); auto src = MediaSource::createFromMP4(schema,vhost,app,stream,filePath, false);
if(!src){ if(!src){
//文件不存在 //文件不存在
WarnL << "MP4文件不存在:" << filePath; WarnL << "MP4文件不存在:" << filePath;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论