stream-deploy/ZLM/3rdpart/media-server/libflv/test/amf0-test.c

52 lines
1.7 KiB
C++

#include "amf0.h"
#include <stdio.h>
#include <string.h>
#include <assert.h>
#define AMF_OBJECT_ITEM_VALUE(v, amf_type, amf_name, amf_value, amf_size) { v.type=amf_type; v.name=amf_name; v.value=amf_value; v.size=amf_size; }
struct rtmp_result_t
{
char code[64]; // NetStream.Play.Start
char level[8]; // warning/status/error
char description[256];
};
static int amf0_get(const char* file, void* amf0, size_t bytes)
{
int r;
FILE* fp;
fp = fopen(file, "rb");
if (NULL == fp)
return 0;
r = fread(amf0, 1, bytes, fp);
fclose(fp);
return r;
}
void amf0_test2(void)
{
int r;
uint8_t* end;
static uint8_t amf0[2 * 1024];
struct rtmp_result_t result;
struct amf_object_item_t info[3];
struct amf_object_item_t items[2];
AMF_OBJECT_ITEM_VALUE(info[0], AMF_STRING, "code", result.code, sizeof(result.code));
AMF_OBJECT_ITEM_VALUE(info[1], AMF_STRING, "level", result.level, sizeof(result.level));
AMF_OBJECT_ITEM_VALUE(info[2], AMF_STRING, "description", result.description, sizeof(result.description));
AMF_OBJECT_ITEM_VALUE(items[0], AMF_OBJECT, "command", NULL, 0); // Command object
AMF_OBJECT_ITEM_VALUE(items[1], AMF_OBJECT, "information", info, sizeof(info) / sizeof(info[0])); // Information object
r = amf0_get("../libflv/test/rtmp.onStatus.amf0", amf0, sizeof(amf0));
end = amf0 + r;
assert(end == amf_read_items(amf0, end, items, sizeof(items) / sizeof(items[0])));
assert(0 == strcmp(result.code, "NetStream.Play.Reset"));
assert(0 == strcmp(result.level, "status"));
assert(0 == strcmp(result.description, "Playing and resetting 92f509c10c112171f935?token=3129bc162ee05a1353f7&secret=15b1bca0997ab790656c903493cada3b&ckey=17e23e4fd0bb5b54a2434fd1514343ee"));
}