Fixed live HLS not continuing after buffer size.

This commit is contained in:
Thulinma 2013-07-18 16:44:36 +02:00
parent ddd0445f0e
commit 4a9c137aef

View file

@ -28,7 +28,7 @@ namespace Connector_HTTP {
///\brief Builds an index file for HTTP Live streaming. ///\brief Builds an index file for HTTP Live streaming.
///\param metadata The current metadata, used to generate the index. ///\param metadata The current metadata, used to generate the index.
///\return The index file for HTTP Live Streaming. ///\return The index file for HTTP Live Streaming.
std::string liveIndex(JSON::Value & metadata){ std::string liveIndex(JSON::Value & metadata, bool isLive){
std::stringstream result; std::stringstream result;
if (metadata.isMember("tracks")){ if (metadata.isMember("tracks")){
result << "#EXTM3U\r\n"; result << "#EXTM3U\r\n";
@ -80,7 +80,9 @@ namespace Connector_HTTP {
result << "#EXTINF:" << (((*ai)["dur"].asInt() + 500) / 1000) << ", no desc\r\n" result << "#EXTINF:" << (((*ai)["dur"].asInt() + 500) / 1000) << ", no desc\r\n"
<< starttime << "_" << (*ai)["dur"].asInt() + starttime << ".ts\r\n"; << starttime << "_" << (*ai)["dur"].asInt() + starttime << ".ts\r\n";
} }
result << "#EXT-X-ENDLIST"; if ( !isLive){
result << "#EXT-X-ENDLIST\r\n";
}
} }
#if DEBUG >= 8 #if DEBUG >= 8
std::cerr << "Sending this index:" << std::endl << Result.str() << std::endl; std::cerr << "Sending this index:" << std::endl << Result.str() << std::endl;
@ -207,7 +209,6 @@ namespace Connector_HTTP {
sstream << "s " << Segment << "\n"; sstream << "s " << Segment << "\n";
sstream << "p " << frameCount << "\n"; sstream << "p " << frameCount << "\n";
ss.SendNow(sstream.str().c_str()); ss.SendNow(sstream.str().c_str());
fprintf(stderr,"Sending %s to player\n", sstream.str().c_str());
}else{ }else{
std::string request = HTTP_R.url.substr(HTTP_R.url.find("/", 5) + 1); std::string request = HTTP_R.url.substr(HTTP_R.url.find("/", 5) + 1);
if (HTTP_R.url.find(".m3u8") != std::string::npos){ if (HTTP_R.url.find(".m3u8") != std::string::npos){
@ -220,10 +221,10 @@ namespace Connector_HTTP {
HTTP_S.SetHeader("Cache-Control", "no-cache"); HTTP_S.SetHeader("Cache-Control", "no-cache");
std::string manifest; std::string manifest;
if (request.find("/") == std::string::npos){ if (request.find("/") == std::string::npos){
manifest = liveIndex(Strm.metadata); manifest = liveIndex(Strm.metadata, Strm.metadata.isMember("live"));
}else{ }else{
int selectId = atoi(request.substr(0,request.find("/")).c_str()); int selectId = atoi(request.substr(0,request.find("/")).c_str());
manifest = liveIndex(Strm.getTrackById(selectId)); manifest = liveIndex(Strm.getTrackById(selectId), Strm.metadata.isMember("live"));
} }
HTTP_S.SetBody(manifest); HTTP_S.SetBody(manifest);
conn.SendNow(HTTP_S.BuildResponse("200", "OK")); conn.SendNow(HTTP_S.BuildResponse("200", "OK"));