[actionscript-3] كيفية الاستفادة من وظيفة play2 () لإجراء تحويل سريع لمقاطع الفيديو؟



Answers

قد يكون ذلك أن الخادم يحاول العثور على أقرب إطار i إلى الإزاحة الحالية والتي تستغرق وقتًا. إذا كنت تعرف ما هو FPS والوقت بين i-frames يمكنك محاولة البحث عن وقت قريب جدًا من الإطار i أو التالي ، مما يؤدي إلى تسريع البحث والعرض.

مزيد من المعلومات على الإطار i: http://en.wikipedia.org/wiki/Video_compression_picture_types

Question

أعمل حاليًا على أحد برامج تشغيل الفلاش باستخدام وظيفة تبديل الدقة. أحاول الاستفادة من وظيفة play2() للطبقة NetStream في Actionscript.

المشكلة التي أواجهها هي أن مقاطع الفيديو لا تتغير بسرعة. بالنسبة لأولئك المطلعين على وظيفة play2() ، أعتقد أن اللاعب يقوم بـ "standard switch" بدلاً من "fast switch."

تقول الوثائق أنه عندما تكون معلمة الإزاحة -1 ، يحدث التبديل السريع. ما يحدث بالفعل ، على الرغم من أنه يتم استلام الحدث "NetStream.Play.Transition" مرة واحدة ، ينتظر اللاعب حتى يتم الوصول إلى الوقت المشار إليه بواسطة ns.time + ns.bufferLength ، قبل إجراء التبديل.

اعتقدت التبديل السريع مسح المخزن المؤقت ، ولكن على الاختيار ل ns.backbufferlength ، وجدت أن كل شيء لا يزال ns.backbufferlength . كما يذكر أيضًا: "عندما يكون الإزاحة -1 ، يحدث التبديل في أول إطار مفتاحي متاح بعد netstream.time + 3 ،" ولهذا السبب أشعر بالارتباك.

أي مساعدة / نظرة ثاقبة في هذه المسألة سيكون موضع تقدير كبير.

في ما يلي مقتطف شفرة يصف ما يجري (يتم استدعاء newStream() عند نقر المستخدم على تغييره إلى دقة جديدة ، نمط youtube):

public function newStream(address:String):void
{
    var opts:NetStreamPlayOptions = new NetStreamPlayOptions();
    opts.streamName = address;
    opts.transition = NetStreamPlayTransitions.SWITCH;
    opts.offset = -1;
    ns.play2(opts);
}

private function nsCallback(event:NetStatusEvent)
{
    switch(event.info.code)
    {
        case "NetStream.Play.Transition":
        {
            trace("Current time (on Transition): " + 
                  ns.time, "Buffer: " + ns.bufferLength);
            var estTime:Number = ns.time + ns.bufferLength;
            trace("Estimated Completion Time: " + estTime);
            break;
        }
    }
}