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);
        }
Beispiel #2
0
        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];
            }
        }
Beispiel #3
0
        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;
            });

            
        }