summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorDavid Schleef <david.schleef@rd.io>2013-09-01 12:45:15 -0700
committerDavid Schleef <ds@schleef.org>2013-10-05 22:33:03 -0700
commitaecfa846c5a6abb541834ce98d360e538ce7494f (patch)
treebac6490f81c74c1dda77228ccbc9efd442fc8f52 /tools
parent9aba65bd9e0548ec8c3b4b57ff0047524c9575b7 (diff)
tools: experimental change to json manifest
Diffstat (limited to 'tools')
-rw-r--r--tools/gss-info.c68
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);
+}