From c33c62c6d45f32a5a5602e44d5477054b06bf519 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Sat, 6 Sep 2014 14:39:35 +0200 Subject: [PATCH] Added support for remaining Flash-supported codecs to RTMP, FLV and HDS. --- src/output/output_hds.cpp | 29 ++++++++++++++++++++++----- src/output/output_progressive_flv.cpp | 10 +++++++++ src/output/output_rtmp.cpp | 10 +++++++++ 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/output/output_hds.cpp b/src/output/output_hds.cpp index 8f26e6d2..ffdb1c81 100644 --- a/src/output/output_hds.cpp +++ b/src/output/output_hds.cpp @@ -11,15 +11,24 @@ namespace Mist { void OutHDS::getTracks(){ /// \todo Why do we have only one audio track option? - /// \todo We should really support all Flash-supported codecs in HDS. These lists are too short now. videoTracks.clear(); audioTrack = 0; + JSON::Value & vidCapa = capa["codecs"][0u][0u]; + JSON::Value & audCapa = capa["codecs"][0u][1u]; for (std::map::iterator it = myMeta.tracks.begin(); it != myMeta.tracks.end(); it++){ - if (it->second.codec == "H264" || it->second.codec == "H263" || it->second.codec == "VP6"){ - videoTracks.insert(it->first); + for (JSON::ArrIter itb = vidCapa.ArrBegin(); itb != vidCapa.ArrEnd(); itb++){ + if (it->second.codec == (*itb).asStringRef()){ + videoTracks.insert(it->first); + break; + } } - if (it->second.codec == "AAC" || it->second.codec == "MP3"){ - audioTrack = it->first; + if (!audioTrack){ + for (JSON::ArrIter itb = audCapa.ArrBegin(); itb != audCapa.ArrEnd(); itb++){ + if (it->second.codec == (*itb).asStringRef()){ + audioTrack = it->first; + break; + } + } } } } @@ -148,8 +157,18 @@ namespace Mist { capa["codecs"][0u][0u].append("H264"); capa["codecs"][0u][0u].append("H263"); capa["codecs"][0u][0u].append("VP6"); + capa["codecs"][0u][0u].append("VP6Alpha"); + capa["codecs"][0u][0u].append("ScreenVideo2"); + capa["codecs"][0u][0u].append("ScreenVideo1"); + capa["codecs"][0u][0u].append("JPEG"); capa["codecs"][0u][1u].append("AAC"); capa["codecs"][0u][1u].append("MP3"); + capa["codecs"][0u][1u].append("Speex"); + capa["codecs"][0u][1u].append("Nellymoser"); + capa["codecs"][0u][1u].append("PCM"); + capa["codecs"][0u][1u].append("ADPCM"); + capa["codecs"][0u][1u].append("G711a"); + capa["codecs"][0u][1u].append("G711mu"); capa["methods"][0u]["handler"] = "http"; capa["methods"][0u]["type"] = "flash/11"; capa["methods"][0u]["priority"] = 7ll; diff --git a/src/output/output_progressive_flv.cpp b/src/output/output_progressive_flv.cpp index fd5b839b..5d58197b 100644 --- a/src/output/output_progressive_flv.cpp +++ b/src/output/output_progressive_flv.cpp @@ -21,8 +21,18 @@ namespace Mist { capa["codecs"][0u][0u].append("H264"); capa["codecs"][0u][0u].append("H263"); capa["codecs"][0u][0u].append("VP6"); + capa["codecs"][0u][0u].append("VP6Alpha"); + capa["codecs"][0u][0u].append("ScreenVideo2"); + capa["codecs"][0u][0u].append("ScreenVideo1"); + capa["codecs"][0u][0u].append("JPEG"); capa["codecs"][0u][1u].append("AAC"); capa["codecs"][0u][1u].append("MP3"); + capa["codecs"][0u][1u].append("Speex"); + capa["codecs"][0u][1u].append("Nellymoser"); + capa["codecs"][0u][1u].append("PCM"); + capa["codecs"][0u][1u].append("ADPCM"); + capa["codecs"][0u][1u].append("G711a"); + capa["codecs"][0u][1u].append("G711mu"); capa["methods"][0u]["handler"] = "http"; capa["methods"][0u]["type"] = "flash/7"; capa["methods"][0u]["priority"] = 5ll; diff --git a/src/output/output_rtmp.cpp b/src/output/output_rtmp.cpp index 6bbc94f0..72f90b86 100644 --- a/src/output/output_rtmp.cpp +++ b/src/output/output_rtmp.cpp @@ -102,8 +102,18 @@ namespace Mist { capa["codecs"][0u][0u].append("H264"); capa["codecs"][0u][0u].append("H263"); capa["codecs"][0u][0u].append("VP6"); + capa["codecs"][0u][0u].append("VP6Alpha"); + capa["codecs"][0u][0u].append("ScreenVideo2"); + capa["codecs"][0u][0u].append("ScreenVideo1"); + capa["codecs"][0u][0u].append("JPEG"); capa["codecs"][0u][1u].append("AAC"); capa["codecs"][0u][1u].append("MP3"); + capa["codecs"][0u][1u].append("Speex"); + capa["codecs"][0u][1u].append("Nellymoser"); + capa["codecs"][0u][1u].append("PCM"); + capa["codecs"][0u][1u].append("ADPCM"); + capa["codecs"][0u][1u].append("G711a"); + capa["codecs"][0u][1u].append("G711mu"); capa["methods"][0u]["handler"] = "rtmp"; capa["methods"][0u]["type"] = "flash/10"; capa["methods"][0u]["priority"] = 6ll;