Jump to content
Калькуляторы

VOD + Dlink DIB120 + VLC

Вечер добрый.

 

Стоит задача реализовать VOD для DIB-120 (прошивка 4.06.011).

В настройках приставки указываю адрес своего сервере, а точнее адрес странички на нём, такого содержания:

<html>
<head>
   <meta http-equiv="Pragma" content="no-cache">
</head>
<script>
var stb_media=new Stb_Media();
var stb=new Stb();

function keypress(event)
{
   var key = event.keyCode ? event.keyCode : event.which;
   stb.print("key:"+key);
   switch(key)
   {
case 122:
    stb_media.setAlphaLevel(0);
    stb_media.play("rtsp://SERVER_IP:55555/test");
break;
case 121:
    stb_media.setPIG(true,0,0,0,0);
    stb_media.stop();
    stb_media.setAlphaLevel(255);
break;
   }
}

function initPage()
{
   stb_media.setTransparentColor(0xFF00FF00);
   stb_media.setAlphaLevel(255);
   stb_media.setPIG(false);
   document.addEventListener("keypress",keypress,false);
}

function exitPage(){
   stb_media.setPIG(true,0,0,0,0);
   stb_media.stop();
   stb_media.setAlphaLevel(255);
}

window.onload=initPage;
window.onunload=exitPage;
</script>
<body bgcolor="grey">
</body>
</html>

 

Т.е. на данном этапе при нажатии кнопки start должно начинать проигрывание видео, при stop соответственно останавливаться.

 

VoD реализуется с помощью VLC таким образом:

vlc --ttl 12 -vvv --vlm-conf /home/vlc/vod.conf --sout-x264-level 41 --sout "#transcode{venc=x264{level=4.1,bframes=0,keyint=250,qpmin=20,qpmax=50,ref=5,merange=24,mixed-refs=yes,direct=auto,me=umh,subme=7,trellis=2,weightb=yes,partitions=all,vbv-maxrate=920,vbv-bufsize=9000,ratetol=100.0,scenecut=60},vb=820,acodec=mp3,ab=128,deinterlace=yes,width=800,height=600,fps=25}" -I telnet --rtsp-host 0.0.0.0:55555

 

В конфиге vod.conf указано следующее:

new test vod enabled
setup test input file:///home/vlc/vod.m4v

 

Начальные параметры vod.m4v:

Кодек: H264 - MPEG-4 AVC (part 10) (h264)
Разрешение: 640x360
Частота кадров: 150

 

Зайдя через приставку в раздел VOD я вижу серый экран. Нажимаю кнопку старт и вижу на интерфейсе сервере, что полился UDP-трафик на приставку, но никакого изображения на экране нет. На кнопку стоп также нет никакой реакции, поток продолжает литься. Делал мирроринг порта на свитче, куда подключена приставка - UDP-трафик льется активно.

 

Также с помощью VLC записывал без транскодинга один из IPTV-каналов и затем пробовал его вещать на камеру (также без транскодинга), но опять нет никакого изображения.

 

Кто-нибудь может подсказать, что я делаю не так? Может неправильно с помощью VLC транскодирую поток?

Share this post


Link to post
Share on other sites

Хм, попробовал еще вот так:

vlc --ttl 12 -vvv --vlm-conf /home/vlc/vod.conf --sout-x264-level 41 --sout "#transcode{vcodec=mp2v,vb=1024,scale=1,acodec=mp2a,ab=192,channels=2,fps=25}" -I telnet --rtsp-host 0.0.0.0:55555

 

При этом в конфиг /home/vlc/vod.conf добавил:

setup test mux mp2t

 

Начало показывать. Но есть артефакты, буду пробовать дальше.

Share this post


Link to post
Share on other sites

Только сейчас вчитался в твои команды. :) Так ты транскодинг на лету ещё затеял, да и ещё в х264... Так оно точно будет осыпаться. Тут даже гадать не надо. Все что написанно ниже -- бред, оставлен для исторической справедливать, мол, были времена когда я так думал.

 

Ну как? Поборол артефакты? Эти артефакты старая болезнь vlc/dvblast, которую разработчики не видят или делают вид что не видят. Конечно, если вещатель работает на пустом сервере, то все ок, если чуть подгрузить или проц или сеть, то все -- посыпались родные. Vlc к VoDу получилось прикрутить с большими извращениями и то это получился не VoD, а китайская подделка. В vlc используется функция начала/остановки вещания по командам из телнета (у него и библиотеки есть, что бы сразу из программы дергать). По сути на СТБ плэй/стоп в ВоДе -- кнопки в билинге, который уже дергает vlc. Vlc сам не в сеть вещает по rstp, а в пайп, где его подхватывает (перебуферизирует) тот же getstream (можно взять что нравиться, к чему привыкли) и уже скидывает нормальный, не битый аккуратный поток по udp.

 

Вообще говоря vcl ещё та засада -- все выглядит очень аппетитно и тесты отлично проходят, а как начинается эксплуатация -- засада. Или все заново с нуля делать или плясать с бубнами вокруг, пытаясь оживить что уже сделанно. Обидно, да, так хорошо все выглядит и так бездарно все слито где-то на уровне системного програмирования. При чем они типа починили эту багу: если на самом vlc смотреть этот битый поток, то не так уж все страшно выглядит, как запускаешь в СТБ -- пошли пироги. Хотя знаю некоторые мидлвари, где именно vlc используют для VoD'а, вот уж хрен знает, переписывали они его что ли или я такой один криворукий...

 

Идея пришла, а что если попробовать этот vlc-поток через jumbo-сегмент прогнать... там же буферы аппаратные большие, может в этих буферах все как раз и сгладится... без извращений "промежуточный стример".

Edited by RealResident

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this