From 4ac7c54698c93def4ad353d3ac68bb6aec5da011 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Thu, 23 Aug 2012 17:06:25 +0200 Subject: [PATCH] Updated mp4 to parse some information from JSON-style metadata, guesses values if not present. --- lib/mp4.cpp | 11 ++++++++--- lib/mp4.h | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/mp4.cpp b/lib/mp4.cpp index 85ded767..736acbd4 100644 --- a/lib/mp4.cpp +++ b/lib/mp4.cpp @@ -1,7 +1,8 @@ -#include "mp4.h" #include //for malloc and free #include //for memcpy #include //for htonl and friends +#include "mp4.h" +#include "json.h" /// Contains all MP4 format related code. namespace MP4{ @@ -363,12 +364,16 @@ void ASRT::WriteContent( ) { SetPayload((uint32_t)4,Box::uint32_to_uint8((isUpdate ? 1 : 0))); } -std::string GenerateLiveBootstrap( uint32_t CurMediaTime ) { +std::string GenerateLiveBootstrap( JSON::Value & metadata ) { AFRT afrt; afrt.SetUpdate(false); afrt.SetTimeScale(1000); afrt.AddQualityEntry(""); - afrt.AddFragmentRunEntry(1, 0 , 4000); //FirstFragment, FirstFragmentTimestamp,Fragment Duration in milliseconds + if (!metadata.isMember("video") || !metadata["video"].isMember("keyms")){ + afrt.AddFragmentRunEntry(1, 0, 1000); //FirstFragment, FirstFragmentTimestamp,Fragment Duration in milliseconds + }else{ + afrt.AddFragmentRunEntry(1, 0, metadata["video"]["keyms"].asInt()); //FirstFragment, FirstFragmentTimestamp,Fragment Duration in milliseconds + } afrt.WriteContent(); ASRT asrt; diff --git a/lib/mp4.h b/lib/mp4.h index 0ef24659..2543fed0 100644 --- a/lib/mp4.h +++ b/lib/mp4.h @@ -2,6 +2,7 @@ #include #include #include +#include "json.h" /// Contains all MP4 format related code. namespace MP4{ @@ -125,7 +126,7 @@ namespace MP4{ Box * Container; };//ASRT Box - std::string GenerateLiveBootstrap( uint32_t CurMediaTime ); + std::string GenerateLiveBootstrap( JSON::Value & metadata ); std::string mdatFold(std::string data); };