diff options
author | David Schleef <david.schleef@rd.io> | 2013-09-01 12:45:15 -0700 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2013-10-05 22:33:03 -0700 |
commit | aecfa846c5a6abb541834ce98d360e538ce7494f (patch) | |
tree | bac6490f81c74c1dda77228ccbc9efd442fc8f52 /tools | |
parent | 9aba65bd9e0548ec8c3b4b57ff0047524c9575b7 (diff) |
tools: experimental change to json manifest
Diffstat (limited to 'tools')
-rw-r--r-- | tools/gss-info.c | 68 |
1 files changed, 61 insertions, 7 deletions
diff --git a/tools/gss-info.c b/tools/gss-info.c index 6ff8a72..85908ef 100644 --- a/tools/gss-info.c +++ b/tools/gss-info.c @@ -1,6 +1,7 @@ #include <gst-streaming-server/gss-isom.h> -#include <gst-streaming-server/gss-isom.h> +#include <gst-streaming-server/gss-utils.h> +#include <json-glib/json-glib.h> #include <stdio.h> @@ -11,6 +12,8 @@ gboolean verbose; +static char *random_iv_string (void); + static GOptionEntry entries[] = { {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "Be verbose", NULL}, {NULL} @@ -21,7 +24,12 @@ main (int argc, char *argv[]) { GError *error = NULL; GOptionContext *context; + JsonGenerator *gen; + JsonNode *root; + JsonObject *obj; + JsonArray *array; int i; + char *data; context = g_option_context_new ("- ISOM parsing test"); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); @@ -37,10 +45,13 @@ main (int argc, char *argv[]) exit (1); } + array = json_array_new (); for (i = 1; i < argc; i++) { GssIsomParser *file; GssIsomTrack *video_track; GssIsomTrack *audio_track; + JsonObject *object; + JsonObject *o; gboolean ret; file = gss_isom_parser_new (); @@ -53,16 +64,59 @@ main (int argc, char *argv[]) video_track = gss_isom_movie_get_video_track (file->movie); audio_track = gss_isom_movie_get_audio_track (file->movie); - if (audio_track && video_track) { - g_print ("%s %d %d\n", - argv[i], video_track->esds.avg_bitrate, - audio_track->esds.avg_bitrate); - } else { - g_print ("audio %p video %p\n", audio_track, video_track); + + object = json_object_new (); + json_object_set_string_member (object, "filename", argv[i]); + if (video_track) { + char *codec; + + o = json_object_new (); + json_object_set_int_member (o, "track_id", video_track->tkhd.track_id); + json_object_set_int_member (o, "bitrate", video_track->esds.avg_bitrate); + codec = g_strdup_printf ("avc1.%02x%02x%02x", + video_track->esds.codec_data[1], + video_track->esds.codec_data[2], video_track->esds.codec_data[3]); + json_object_set_string_member (o, "codec", codec); + g_free (codec); + json_object_set_string_member (o, "iv", random_iv_string ()); + json_object_set_object_member (object, "video", o); } + if (audio_track) { + o = json_object_new (); + json_object_set_int_member (o, "track_id", audio_track->tkhd.track_id); + json_object_set_int_member (o, "bitrate", audio_track->esds.avg_bitrate); + json_object_set_string_member (o, "codec", "mp4a.40.2"); /* AAC LC */ + json_object_set_string_member (o, "iv", random_iv_string ()); + json_object_set_object_member (object, "audio", o); + } + + json_array_add_object_element (array, object); gss_isom_parser_free (file); } + obj = json_object_new (); + json_object_set_int_member (obj, "version", 0); + json_object_set_array_member (obj, "media", array); + + root = json_node_new (JSON_NODE_OBJECT); + json_node_take_object (root, obj); + gen = g_object_new (JSON_TYPE_GENERATOR, + "root", root, "pretty", TRUE, "indent", 2, NULL); + data = json_generator_to_data (gen, NULL); + g_object_unref (gen); + json_node_free (root); + + g_print ("%s\n", data); + return 0; } + +static char * +random_iv_string (void) +{ + guint8 iv[8]; + + gss_utils_get_random_bytes (iv, 8); + return gss_base64url_encode (iv, 8); +} |