protected NetConnectionCallCommand MakeNLPlayNoticeCommand() { var command = new NetConnectionCallCommand("nlPlayNotice"); // TODO: コンテンツが生放送ではなくて動画IDになっている場合がある // smile:sm0000000 var nlplaynoticeText = PlayerStatus.Stream.Contents[0].Value; if (nlplaynoticeText.StartsWith("smile:")) { throw new Exception("cant play with live player -> " + nlplaynoticeText); } #if true var split = nlplaynoticeText.Split(','); var nlplaypath = split[0].Remove(0, "rtmp:".Length); var nltoken = split[1]; var nlid = split[1].Split('?').ElementAt(0); #else var split = nlplaynoticeText.Split(',', '?'); var nlplaypath = split[0].Remove(0, "rtmp:".Length); var nlid = split[1]; var nltoken = split[2]; #endif var nlplaynoticeParameter = new AmfArray(); // 先頭にnullを入れる command.OptionalArguments.Add(new AmfValue()); command.OptionalArguments.Add(AmfValue.CreateStringValue(nlplaypath)); command.OptionalArguments.Add(AmfValue.CreateStringValue(nltoken)); command.OptionalArguments.Add(AmfValue.CreateStringValue(nlid)); // これがわからない // パケットキャプチャした結果を真似しているだけで // 意図を理解して追加しているわけではないです command.OptionalArguments.Add(AmfValue.CreateNumberValue(-2)); return(command); }
AmfArray ReadArray() { int argument; if (ReadFlaggedInteger(out argument)) { AmfArray array = new AmfArray(); _objectTable.Add(array); Dictionary<string, object> associativeElements = ReadPropertyList(); List<object> denseElements = new List<object>(); for (int i = 0; i < argument; i++) { object obj = Read(); denseElements.Add(obj); } foreach (KeyValuePair<string, object> pair in associativeElements) { array.AssociativeElements.Add(pair); } foreach (object element in denseElements) { array.DenseElements.Add(element); } return array; } else { return (AmfArray)_objectTable[argument]; } }
void Write(AmfArray value) { _writer.Write((byte)AmfMarker.Array); bool firstTime; long uniqueValue = _idGenerator.GetId(value, out firstTime); if (!firstTime) { WriteFlaggedInteger(_objectTable[uniqueValue], false); } else { _objectTable[uniqueValue] = _objectTable.Count + _dateTimeTable.Count; WriteFlaggedInteger(value.DenseElements.Count, true); foreach (KeyValuePair<string, object> pair in value.AssociativeElements) { WriteBareString(pair.Key); Write(pair.Value); } WriteBareString(""); foreach (object denseElement in value.DenseElements) { Write(denseElement); } } }
private IAmfValue createGeneralAmfValue() { var array = new AmfArray(); array.Add(3, AmfValue.CreateBooleanValue(false)); array.Add("t", AmfValue.CreateNumberValue(50)); return array; }
public void Amf3SequencifyRemained(string expect) { var expectArray = TestHelper.CreateByteArray(expect); var actual = new AmfArray(); actual[0] = AmfValue.CreateStringValue("oooo"); actual[1] = AmfValue.CreateStringValue("oooo"); var buffer = actual.Sequencify(AmfEncodingType.Amf3); var actualArray = buffer.ToArray(); CollectionAssert.AreEqual(expectArray, actualArray); }
public static AmfValue CreateUndefinedValue() { AmfArray ary = new AmfArray(); ary[34] = AmfValue.CreateBooleanValue(false); return new AmfValue(null, AmfValueType.Undefined); }
private IAmfValue getArray() { return getObjectReferenceOrValue(() => { var array = new AmfArray(); Amf3Parser parser = null; foreach (var readItem in this.reader_.GetArray()) { parser = new Amf3Parser(readItem.Reader); if (readItem.IsDenseArrayItem) { array.Add(readItem.DenseArrayIndex, parser.readAmfValue()); } else { array.Add(getRemainedString(readItem.PropertyName), parser.readAmfValue()); } } return array; }); }