OSDN Git Service

HLS試作
[iptd/iPTd.git] / src / ry0 / iPTd / HTTPLiveStreaming.cpp
index 9ff5e16..907cf8d 100644 (file)
@@ -71,7 +71,7 @@ HTTPLiveStreaming *HTTPLiveStreaming::autorelease()
     return this;
 }
 
-void HTTPLiveStreaming::setSource(Raym::String *source)
+void HTTPLiveStreaming::setSource(String *source)
 {
     DebugLog2("HTTPLiveStreaming::setSource()");
 
@@ -82,7 +82,7 @@ void HTTPLiveStreaming::setSource(Raym::String *source)
     }
 }
 
-void HTTPLiveStreaming::setOutputPath(Raym::String *output_path)
+void HTTPLiveStreaming::setOutputPath(String *output_path)
 {
     DebugLog2("HTTPLiveStreaming::setOutputPath()");
 
@@ -93,7 +93,12 @@ void HTTPLiveStreaming::setOutputPath(Raym::String *output_path)
     }
 }
 
-void HTTPLiveStreaming::setIndexName(Raym::String *index_name)
+String *HTTPLiveStreaming::outputPath()
+{
+    return _output_path;
+}
+
+void HTTPLiveStreaming::setIndexName(String *index_name)
 {
     DebugLog2("HTTPLiveStreaming::setIndexName()");
 
@@ -106,6 +111,22 @@ void HTTPLiveStreaming::setIndexName(Raym::String *index_name)
 
 bool HTTPLiveStreaming::start()
 {
+    DebugLog2("%s", __FUNCTION__);
+
+    if ((_output_path == NULL) || (_source == NULL) || (_index_name == NULL))
+    {
+        return false;
+    }
+
+    DebugLog2("output path: %s", _output_path->cString());
+    DebugLog2("source: %s", _source->cString());
+    DebugLog2("index: %s", _index_name->cString());
+
+    String *index_path = indexPath();
+    if (index_path != NULL)
+    {
+        FileManager::defaultManager()->removeItemAtPath(index_path, NULL);
+    }
 
     //
     // %>ffmpeg -i C:\WORK\20151024_211758_086_PT2@050000-01.ts -vcodec libx264 -r 30000/1001 -aspect 16:9 -s 1280x720
@@ -116,7 +137,9 @@ bool HTTPLiveStreaming::start()
     // 暫定処理
 //    Array *args = STR_ARRAY("-i",              "C:\\WORK\\20151024_211758_086_PT2@050000-01.ts",
 //    Array *args = STR_ARRAY("-i",              "udp://0.0.0.0:51027",
-    Array *args = STR_ARRAY("-i",              "udp://@0.0.0.0:51027?overrun_nonfatal=1&fifo_size=50000000",
+#if 0
+    Array *arg2 = STR_ARRAY("-i",              "udp://@0.0.0.0:51027?overrun_nonfatal=1&fifo_size=50000000",
+//    Array *args = STR_ARRAY("-i",              "udp://@51027?overrun_nonfatal=1&fifo_size=50000000",
                               "-vcodec",         "libx264",
                               "-r",              "30000/1001",
                               "-aspect",         "16:9",
@@ -135,6 +158,54 @@ bool HTTPLiveStreaming::start()
                               "-segment_list",   "C:\\WORK\\www\\index.m3u8",
                               "C:\\WORK\\www\\test%03d.ts",
                               NULL);
+#endif
+
+    Array *args = Array::arrayWithCapacity(0);
+    args->addObject(String::stringWithUTF8String("-i"));
+//    args->addObject(String::stringWithUTF8String("udp://@0.0.0.0:51027?overrun_nonfatal=1&fifo_size=50000000"));
+    if (_source->hasPrefix("udp://"))
+    {
+        args->addObject(String::stringWithFormat("%s?overrun_nonfatal=1&fifo_size=50000000", _source->cString()));
+    }
+    else
+    {
+        args->addObject(String::stringWithUTF8String("hogehoge"));
+    }
+
+    args->addObject(String::stringWithUTF8String("-vcodec"));
+    args->addObject(String::stringWithUTF8String("libx264"));
+    args->addObject(String::stringWithUTF8String("-r"));
+    args->addObject(String::stringWithUTF8String("30000/1001"));
+    args->addObject(String::stringWithUTF8String("-aspect"));
+    args->addObject(String::stringWithUTF8String("16:9"));
+    args->addObject(String::stringWithUTF8String("-s"));
+    args->addObject(String::stringWithUTF8String("1280x720"));
+    args->addObject(String::stringWithUTF8String("-bufsize"));
+    args->addObject(String::stringWithUTF8String("20000k"));
+    args->addObject(String::stringWithUTF8String("-maxrate"));
+    args->addObject(String::stringWithUTF8String("25000k"));
+    args->addObject(String::stringWithUTF8String("-acodec"));
+    args->addObject(String::stringWithUTF8String("libvo_aacenc"));
+    args->addObject(String::stringWithUTF8String("-ac"));
+    args->addObject(String::stringWithUTF8String("2"));
+    args->addObject(String::stringWithUTF8String("-ar"));
+    args->addObject(String::stringWithUTF8String("48000"));
+    args->addObject(String::stringWithUTF8String("-ab"));
+    args->addObject(String::stringWithUTF8String("128k"));
+    args->addObject(String::stringWithUTF8String("-threads"));
+    args->addObject(String::stringWithUTF8String("2"));
+    args->addObject(String::stringWithUTF8String("-f"));
+    args->addObject(String::stringWithUTF8String("segment"));
+    args->addObject(String::stringWithUTF8String("-segment_format"));
+    args->addObject(String::stringWithUTF8String("mpegts"));
+    args->addObject(String::stringWithUTF8String("-segment_time"));
+    args->addObject(String::stringWithUTF8String("10"));
+
+    args->addObject(String::stringWithUTF8String("-segment_list"));
+    args->addObject(_output_path->stringByAppendingPathComponent(String::stringWithFormat("%s.m3u8", _index_name->cString())));
+
+    args->addObject(_output_path->stringByAppendingPathComponent(String::stringWithUTF8String("streaming-%05d.ts")));
+
     setArguments(args);
 
     return FFmpeg::start();
@@ -142,7 +213,11 @@ bool HTTPLiveStreaming::start()
 
 String * HTTPLiveStreaming::indexPath()
 {
-    return NULL;
+    if ((_output_path == NULL) || (_index_name == NULL))
+    {
+        return false;
+    }
+    return _output_path->stringByAppendingPathComponent(String::stringWithFormat("%s.m3u8", _index_name->cString()));
 }
 
 
@@ -150,7 +225,7 @@ bool HTTPLiveStreaming::readLine(String *line)
 {
     if (line != NULL)
     {
-        DebugLog3("ffmpeg: %s", line->cString());
+//        DebugLog3("ffmpeg: %s", line->cString());
     }
     return false;
 }