<
  • Главная
Статьи

swaj.net | Препаруємо потокове audio

Препаруємо потокове audio

Технології потокової передачі audio і video відомі і в інтернеті використовуються досить давно. У зв'язку з модою на використання Flash зараз, напевно, на кожному третьому сайті є swf'кі, іноді це player'и для відеороликів та музики. В як хрестоматійний приклад можна привести YourTube, на якому swf player'ом прокручуються якраз відео матеріали.

Власне мене це все мало займає, тому що на сайти я зазвичай ходжу за вмістом і добру подовіну часу використовую текстовий elinks, але тут ось виникла необхідність заколисати дещо і за результатами досліджень і спостережень народилася ця замітка.

Сайт "старого радіо" якось давно вже був в bookmarks, там організували роздачу старих радіопередач mp3 потоком через icecast. Цікаво, здорово, річ потрібна, але не завжди адже сидиш за комп'ютером, та й щоденна передача цілком не потрібна, а шматувати здоровенний mp3 і витягувати звідти дійсно цікаві шматочки зовсім сумно якось.

(До слова про icecast, mplayer дозволяє влегкую записати такий потік і при цьому можна обмежити запис за часом, скажімо записати тільки 40хвилин або 2 години. Далі at і питання в принципі вирішено)

А не так давно на "старому радіо" з'явилася можливість слухати передачі вибірково через таку ось флешку

Але в кожній бочці дьогтю є ложка меду, реально користуватися player'ом незручно і часто просто неможливо через банальну кривизни программистких рук. Справа в тому, що написана ця саморобка на коліні без розуміння того аспекту, що у багатьох людей інтернет з'єднання так чи інакше обмежена, може використовуватися proxy server, якісь порти можуть бути закриті, та хіба мало чого ще. Взагалі все, що в принципі не працює через стандартний http: // нежиттєздатною з огляду на вищесказане. І так ось виходить, що поки докопаєшся до меду або в дьогті весь будеш або на бджіл налетиш.

Ага, воно бачте хоче чесного з'єднання з інтернетом, а де ж його взяти ось так відразу. Та й хочеться, знову ж таки, записати цікаві передачі, ну немає в дорозі online'а. Колись буде, напевно, а ось зараз - немає! І що?

На лист адмінам і творцям цього цікавого (і це сказано абсолютно серйозно і без всякого стьобу) сайту з проханням заколисати деякі передачі отримав, ясна річ, скатертиною по жопе, типу "а багато вас тут таких зі свинячим рилом халявним, ми то ось тут довгими зимовими вечорами працювали, оцифровували, не те, що деякі ... ". Інша ж відмазка щодо авторських прав теж неспроможна, при тому що в мережі варез лежить тоннами, роздати цікаві передачі, маючи бажання не складає ніяких труднощів ... Та й не думаю, що авторські права на записи, наприклад, того ж Сергія Єсеніна комусь то належали в принципі, за давністю років ...

Ну да ладно, що не будемо жувати соплі, а перейдемо до справи.

Раніше я ніколи з Flash технологіями справи не мав, тому довелося ознайомитись з предметом глибше. Насамперед після декомпіляцію swf'кі (мої подяки за допомогу йдуть frog'у) каталозі actions / знайшов сорци, власне сам движок для відтворення звуку. Основна логіка знаходиться в файлі sr_fla.MainTimeline.as. Мова програмування - не знаю який, скачати і подивитися документацію полінувався, щось жабоподібними (або ж Java as such), не суть, розібратися можна і без склянки.

При запуску флешці передається параметр, такий собі номер, за яким вона лізе на сервер і викачує XML з інформацією про потоці:

function frame1 () {host = "195.91.207.197"; if (1 || root.loaderInfo.parameters.mp3ID) {mp3ID = root.loaderInfo.parameters.mp3ID; parmsXML = new XML (); XML_URL = "http: //" + host + "/getmp3parms.php?mp3id=" + mp3ID; myXMLURL = new URLRequest (XML_URL); myLoader = new URLLoader (myXMLURL); } ...

Ось приклад одного такого XML:

<Mp3> <fname> Порудоминский В - В.И.Даль (інсценування) .mp3 </ fname> <dir> disk2 / велика колекція </ dir> <length> 3076 </ length> <lowqualitydir> disk2 / 32 [skip ] / </ lowqualitydir> </ mp3>

Після завантаження XML з нього береться інформація про URL, тривалості etc:

public function xmlLoaded (param1: Event): void {var _loc_2: String; var _loc_3: String; parmsXML = XML (myLoader.data); _loc_2 = parmsXML.fname; _loc_2 = _loc_2.substring (0, _loc_2.length - 4); trackname_mc.trackname_txt.text = _loc_2; trackPath = _loc_2; lowqualitydir = parmsXML.lowqualitydir; qdir = lowqualitydir; initq (); _loc_3 = parmsXML.dir; if (_loc_3! = "") {trackPath = _loc_3 + "/" + trackPath; } // end if duration = parmsXML.length; formatedDuration = formatTime (duration); time_txt.text = "00: 00: 00 /" + formatedDuration; nc = new NetConnection (); nc.objectEncoding = ObjectEncoding.AMF0; nc.addEventListener (NetStatusEvent.NET_STATUS, netStatus);

Далі флешка коннектітся до сервера:

nc.connect ( "rtmp: //" + host + "/ vod"); nc.client = this; return; }

У нашому випадку виходить такий URL:

rtmp: //195.91.207.197/vod

І функція Play запитує з сервера audio потік:

public function Play () {if (stopped) {if (ns! = null) {ns.close (); } // end if ns = new NetStream (nc); ns.addEventListener (NetStatusEvent.NET_STATUS, netStreamStatus); if (pmc.x! = 0) {ns.seek (pmc.x / positionRect.width * duration); } // end if ns.soundTransform = trans; ns.play ( "mp3:" + qdir + trackPath); beganPlaying = true; video.attachNetStream (ns);

З наведених вище прикладом буде програний файл:

mp3: disk2 / 32 / Порудоминский В - В.И.Даль (інсценування) Кодування російських букв - UTF-8, '.mp3' відкушений після _loc_2.substring.

В принципі все просто як електровіник, очевидно, що такий код ніколи не буде працювати, якщо browser знаходиться за proxy, крім того, використовується "фірмовий" rtmp: //, це закритий адобовскій протокол, який реботает через TCP / 1935.

З цим rtmp: // справляється rtmpdump , Для роботи з НЕ ascii його потрібно пропатчити.

Якщо під рукою є Винюков, то можна поєднати корисне з приємним, а саме послухати і одночасно записати audio потік на диск.

ставимо Replay Media Catcher , Який дозволяє легко і просто записувати audio і video з rtmp і інших протоколів.

Запускаємо його, натискаємо в browser'е на лінк audio:

Запускаємо його, натискаємо в browser'е на лінк audio:

Весь потік буде записаний на диск, єдино, потрібно буде перейменувати його, для цього прямо в програмі передбачена така можливість.

Ось власне і все, сподіваюся, що комусь стане в нагоді ця інформація.

Tags: linux audio flash


назад

І що?
Php?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью