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

MKV -> Dlink DIB-120 по RTSP не удается нормально вещать фильмы HDTV на приставку

Добрый вечер!

Хочу вещать фильмы формата .mkv с сервера (Debian) на приставку DLink DIB-120 по RTSP. Приставка понимает только h264 в контейнере .ts. Соответственно надо транскодить исходный .mkv в .ts. Делаю это с помощью ffmpeg:

ffmpeg -y -threads 2 -i /home/vlc/poter.mkv -ab 128k -b 3500k -r 25 -maxrate 8000k  -bufsize 3000k -vcodec libx264 -s 4cif -acodec  aac  -strict experimental -map 0:0  -map 0:1 /home/vlc/live/mediaServer/111.ts

Далее полученный файлик с помошью live555mediaServer вещаю по RTSP. Пробовали разные фильмы .mkv, и на всех наблюдается такая проблема - в начале фильма (где-то 1 мин или даже поменьше) подтормаживает видео, иногда пропадает звук. При этом картинка не сыпется. После этого фильм идет более менее гладко, но на малодинамичных сценах (плавное перемещение камеры) видны небольшие подергивания, нету плавности.

Такие же симптомы при просмотре вещания через ПК. Но если перекодированный файл запустить локально, то все нормально, тормозов нет.

Предполагаем, что дело не ресурсах сервера (стоит core-i7, 3 гига оперативки, кроме транскодинга и вещания больши ничего не крутится).

Вот данные одного из фильмов, где наблюдается такая проблема:

Stream #0:0(eng): Video: h264 (High), yuv420p, 1920x800 [sAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0:1(rus): Audio: ac3, 48000 Hz, 5.1(side), s16, 384 kb/s (default)

Пробовали вещать с помощью vlc (разные версии, сейчас стоит версия 1.1.11), но приставка не понимает поток от vlc. Судя по манам она понимает вещание только live555.

Сломал всю голову, но пока так и не нашел первопричину... Вот и решил обратиться к общественности. Может кто-нибудь решал похожую задачу? Был бы очень признаетелен любой помощи и комментариям.

 

p.s.

ffmpeg -version:

ffmpeg version N-34704-g985e768, Copyright (c) 2000-2011 the FFmpeg developers
 built on Nov 11 2011 16:38:26 with gcc 4.4.6
 configuration: --enable-shared --enable-nonfree --enable-gpl --enable-postproc --enable-libx264 --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libgsm
 libavutil    51. 24. 1 / 51. 24. 1
 libavcodec   53. 31. 0 / 53. 31. 0
 libavformat  53. 20. 0 / 53. 20. 0
 libavdevice  53.  4. 0 / 53.  4. 0
 libavfilter   2. 47. 2 /  2. 47. 2
 libswscale    2.  1. 0 /  2.  1. 0
 libpostproc  51.  2. 0 / 51.  2. 0

LIVE555 Media Server:

version 0.41

Share this post


Link to post
Share on other sites

А зачем собственно перекодировать?

В большинстве случаев у mkv внутре уже готовенькое h264 + aac/ac3.

Попробуй -acodec copy -vcodec copy

 

И не стоит забывать, что TS-мультиплексор у ffmpeg'a есть в виде "чтоб было". Он далеко не идеален с точки зрения создания монотонного потока.

 

P.S. Надо ещё поизощряться с битстрим-фильтрами: mp4_to_annexb и adif_to_adts, или как они там называются. Чтоб периодически посылать хедеры в потоке.

Edited by tipok

Share this post


Link to post
Share on other sites

А зачем собственно перекодировать?

В большинстве случаев у mkv внутре уже готовенькое h264 + aac/ac3.

Попробуй -acodec copy -vcodec copy

Согласен с Вами. Получается, что делаю лишнюю работу - гоню из h264 в h264. Попробовал указать -acodec copy -vcodec copy. Получаю конечный файлик, но результат его вещания через live555 такой же:(

И не стоит забывать, что TS-мультиплексор у ffmpeg'a есть в виде "чтоб было". Он далеко не идеален с точки зрения создания монотонного потока.

Я пытался еще перегонять в ts с помощью vlc. Команда такая:

cvlc -vvv /home/vlc/poter.mkv --sout '#transcode{vcodec=h264,vb=3000,fps=25,scale=1, width=704,height=576}:file{mux=ts,dst=/home/vlc/live/mediaServer/out.ts}' --no-sout-rtp-sap --no-sout-standard-sap --ttl=1 --sout-keep

Самое интересное в том, что для одного фильма(видеокодек H.264 / AVC и аудиокодек AC-3) я получал итоговый файлик с видео- и аудиопотоками, а для другого (видео H264 и аудио MPEG-4 AAC audio) - только звук. Долго игрался с разными версиями vlc, но не нашел какую-то рабочую схему. Поэтому посмотрел в сторону ffmpeg, с которым я всегда получаю конечный файл .ts с видео- и аудиопотоками.

А еще сегодня заметил, что файлик, который я получаю с помощью ffmpeg вещается с помощью vlc по RTSP без тормозов. Но вот беда - приставка не понимает вещание от vlc...

P.S. Надо ещё поизощряться с битстрим-фильтрами: mp4_to_annexb и adif_to_adts, или как они там называются. Чтоб периодически посылать хедеры в потоке.

Хм...Кстати, пока пробовал разные варианты смены контейнера, встречал ошибку что-то вроде "no sync header byte".

Edited by nicol@s

Share this post


Link to post
Share on other sites

Перед тем как что-то отправлять через live555/vlc/rtsp.

Желательно проверить .ts'ку ffplay'ем.

 

"no sync header byte" - может пару раз вылезать до прихода ключевого кадра. А если он пришёл, и всё-равно "no sync", значит надо использовать битстрим-фильтр.

Edited by tipok

Share this post


Link to post
Share on other sites

Хм... Проверяю ts-ку с помощью ffplay - ни ошибок, ни ворнингов никаких нет.

В своих записях нашел про ошибку "no sync": она появлялась, когда я пробовал перегонять из конетейнера mkv в ts так:

mencoder -oac copy -ovc x264 -o /home/vlc/live/mediaServer/testvod.ts /home/vlc/nar.mkv

И вот в консоли, где запущен live555, вижу No Transport Stream sync byte in data. Когда гуглил по такой ошибке, как раз и натыкался на сообщения про хедеры.

 

Погуглил по битстриму - нашел, что для кодека h264 надо использовать фильтр h264_mp4toannexb. Кстати, я упустил важный момент - приставка понимает только аудиокодек AAC. Вот сделал грабли:):

1. Транскодим ffmpeg-ом контейнер исходного офайла в ts с сохранением видеопотока, а аудиопоток делаем ac3 и используем битстрим-фильтр:

ffmpeg -y -threads 3 -i /home/vlc/nar.mkv -ab 128k -b 3500k -r 25 -maxrate 10000k  -bufsize 2000k -vcodec copy -vbsf h264_mp4toannexb -s 4cif -acodec ac3 -strict experimental -map 0:0 -map 0:1 /home/vlc/live/mediaServer/111.ts

2. Далее конвертируем с помощью vlc аудопоток в AAC:

cvlc -vvv /home/vlc/live/mediaServer/111.ts :sout=#transcode{acodec=aac}:file{dst=/home/vlc/live/mediaServer/output.ts}

3. Вещаем testvod.ts с помощью live555.

 

Должен сказать, что пока это наилучший вариант просмотра HD на моей приставке.

p.s. В ходе экспериментов заметил, что если в п.1 оставить "-acodec copy", то видео проигрывается на приставке практически идеально, но без звука (что естесственно, т.к. аудиопоток 0:1 в тестируемом фильм в DTS). Думаю, что если найти .mkv, в котором звуковая дорожка будет в AAC, то все будет прекрасно :) Но все таки не хочется привязываться к такому условию.

Edited by nicol@s

Share this post


Link to post
Share on other sites

А не проще у Д-Линков выклянчить прошивку c DTS/AC3/DD?

Share this post


Link to post
Share on other sites

Я даже заплатил бы за прошивку с ДТС ))

Кстати, подергивание картинки случаем не изза рассинхрона кадров фильма и частоты телека ?? 24р и 50і - вот и рассинхрон

Share this post


Link to post
Share on other sites

У меня стоит последняя прошивка. А Длинк заявляет, что нет такой прошивки, на которой приставка может кушать что-то кроме aac.

Подергивание - возможно. Но тут картинка не то, чтобы дребежжит...Сложновато описать - что-то вроде просмотра слайдов, только время смены слайдов маленькое, но в то же время достаточное, чтобы уловить задержку.

Share this post


Link to post
Share on other sites

2 nicol@s - на приставке какой режим вывода выставлен ??

Share this post


Link to post
Share on other sites

У меня стоит последняя прошивка. А Длинк заявляет, что нет такой прошивки, на которой приставка может кушать что-то кроме aac.

 

Тогда вы не с теми людьми говорите. Все кто давно работает с длинком, знают, что ac3 специально убрали из приставки дабы не платить бабло долби. Но в инете всё ещё гуляют старые версии прошивок (v1.03.003 и т.п.) в которых ас3 - есть. Это на случай если таки выклянчить - не получилось. А вообще, в природе существуют и новые прошивки, в которых ac3 - не выключен, сам слышал (всмысле слышал ac3 в опере)!!

 

v1.03.003

- Fixed the bug of Broadcom SDK 7.1 for the crashed problem of standby mode

- Removed several OSD components to increase the performance of Volume OSD

- Changed the AC3 DRC mode from RF to LINE, that is going to increase the volume output level of AC3

Share this post


Link to post
Share on other sites

2 nicol@s - на приставке какой режим вывода выставлен ??

В приставке 1080I-50HZ.

Тогда вы не с теми людьми говорите. Все кто давно работает с длинком, знают, что ac3 специально убрали из приставки дабы не платить бабло долби. Но в инете всё ещё гуляют старые версии прошивок (v1.03.003 и т.п.) в которых ас3 - есть. Это на случай если таки выклянчить - не получилось. А вообще, в природе существуют и новые прошивки, в которых ac3 - не выключен, сам слышал (всмысле слышал ac3 в опере)!!

Ведь если прошиться такой прошивкой, то далеко не факт, что все остальные функции приставки будут работать:) Но все равно стоит проверить!

Share this post


Link to post
Share on other sites

ну так вот и ответ, фильмы то в 24р в основном идут, попробуй преключи приставку в этот режим

Share this post


Link to post
Share on other sites

Поигрался с разными режимами в настройках приставки. В итоге получилось, что при одном выбранном режиме (1080i) лагов нет, а при другом (720p) - есть (при просмотре одного и того же фильма). Выбрал изначально фильм "Rezident Evil" и с ним игрался. В фильме есть один фрагмент (назовем его условно frame), когда чуть-чуть подтормаживала картинка во всех тестах до сегодняшнего. Но вот в примере с 1080i все прошло гладко. Ну подумал, что нашел рабочий вариант и решил в этом 100% убедиться.

 

Для тестов беру 2 фильма HD:

1. "Мадагаскар" - Video: h264 (High), yuv420p, 1920x1072, SAR 1:1 DAR 120:67, 25 fps, 25 tbr, 1k tbn, 50 tbc (default)

2. "Обитель зла" - Video: h264 (High), yuv420p, 1280x532, SAR 1:1 DAR 320:133, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)

Каждый фильм мы переведем в ts по схеме, указанной выше. Единственное что сначала мы оставим их оригинальное разрешение, а потом мы их пережмем в 702x564.

 

Тест №1 - просмотр фильмов с оригинальным разрешением:

1) "Мадагаскар" на 1080i - лагает (зависание и рассыпание картинки);

"Обитель зла" на 1080i - лагов нет, но в моменте frame снова был лаг - и вот тут я расстроился...Ведь чуть ранее этот же фильм проигрался идеально!!

2) "Мадагаскар" на 720p - лагает (зависание и рассыпание картинки);

"Обитель зла" на 720p - тест пройден - при этом в сцене frame все отлично;

 

Тест №2 - просмотр фильмов с разрешением 702x564:

Сжимаю так:

ffmpeg -y -threads 6 -i /home/vlc/Обитель.mkv -ab 128k -b 3500k -r 25 -maxrate 10000k -bufsize 2000k -vbsf h264_mp4toannexb -s 702x564 -acodec copy -strict experimental -map 0:0 -map 0:1 /tmp/1012100temp.ts

 

1) "Мадагаскар" на 1080i - тест пройден (ни минизалипаний, ни рассыпания картинки);

"Обитель зла" на 1080i - в сцене frame все гладко, но при медленных сценах заметны минизалипания картинки, как писал выше;

2) "Мадагаскар" на 720p - тест пройден (ни минизалипаний, ни рассыпания картинки);

"Обитель зла" на 720p - так же, как и выше - в сцене frame все гладко, но при медленных сценах заметны минизалипания картинки, как писал выше;

 

На рабочем компе открываю те же самые потоки: "Мадагаскар" в оригинальном разрешении играется отлично, "Обитель зла" тоже. Открываю на компе "Обитель" сжатую до 702x564 - то же самое.

Что самое интересное, еще один фильм про "друзей Оушена" в оригинальном разрешении (1280x528) проигрывает на приставке на ура!

Video: h264 (High), yuv420p, 1280x528, SAR 1:1 DAR 80:33, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)

Получается, что фильмы с большим разрешением приставка не тянет...???

 

А еще заметил сегодня важный момент: когда работает ffmpeg, то сжирается почти вся оперативка. А вот после завершения работы ffmpeg, она не освобождается. Остается свободным 100мб оперативы и активно юзается swap. Это может как-то влиять на вещание?

Edited by nicol@s

Share this post


Link to post
Share on other sites

сразу видно что человек не вкурсе что такое Tearing эффект ))

Исходный материал всегда должен совпадать по частотам с выводом приставки, тоесть фильм 25фпс - на приставке ставим 1080і, а фильм 24фпс - на приставке ставим 24р , а фильм 60фпс - на приставке ставим 60р , а фильм 30фпс - на приставке ставим 60i )

Но учитывая что юзер таким заниматся не будет, то советую оставить на частоте трансляции каналов, тоесть 50i, или ждать пока длинковам дойдет что нужно сделать опцию синхронизации материала с выводом на экран как во всех нормальных плеерах.

 

Кстати , чем меньше разрешение материала - тем менбше заметен этот эффект )))

Share this post


Link to post
Share on other sites

а фильм 24фпс - на приставке ставим 24р , а фильм 60фпс - на приставке ставим 60р , а фильм 30фпс - на приставке ставим 60i )

Судя по всему моя приставка(прошивка) этого не умеет:(

Вот список всех доступных в настройке режимов:

NTSC, NTSC-JAPAN, PAL-M, PAL-N, PAL-NC, PAL-B, PAL-B1, PAL-D, PAL-D1, PAL, PAL-H, PAL-K, PAL-I, SECAM, 480P, 576P, 1080I, 1080I-50HZ, 1250I-50HZ, 720P, 720P-50HZ, 720P-24HZ.

Я сейчас как раз тестирую просмотр фильмов с разным fps. Вот уже 2 фильма с 25fps в режиме 1080i вещались идеально. А следующий (с fps 23,98) - с незначительными, но артефактами.

Edited by nicol@s

Share this post


Link to post
Share on other sites

на наших прошивках 24р есть, работает без проблем. А вот 23.98 показывает артефакты потому как на выходе приставки должно быть 60i.

Я советую не заморачиватся, домохазяйки всеравно не заметят ничего ))

Share this post


Link to post
Share on other sites

Занимался другими вопросами, но опять вернулся к этой теме. В общем, кому может будет интересно, реализовал так:

- с помощью ffmpeg запускаю конвертацию mkv в ts:

ffmpeg -y -threads 6 -i /home/vlc/INPUT.mkv -ab 128k -vb 3000k -r 50 -maxrate 10000k -bufsize 2000k -vcodec libx264 -vbsf h264_mp4toannexb -s 4cif -acodec aac -strict experimental -map 0:0 -map 0:1 <path_to_output_ts>OUTPUT.ts

- запускаю вещание OUTPUT.ts по UDP на приставку:

cvlc -vvv /home/vlc/live/mediaServer/OUTPUT.ts --sout '#udp{mux=ts,dst=226.0.0.1:1234}'

Все здорово, лагов нет, качество отличное. Даже нету симптомов затормаживания, о которых писал раньше:) Но не обошлось без ложки дегтя... Полученный после OUTPUT.ts не содержит, как это правильно сказать, временной шкалы, чтоли...Т.е. я открываю файлик в vlc и в графе, где должны отображаться часы:минуты:секунды у меня стоят нули. Соответственно, я не могу, к примеру, запустить вещание с нужной мне минуты. Подскажите, может как-то можно это предусмотреть при транскодинге в ffmpeg? Ничего не могу найти по этому вопросу...

 

P.S. вычитал в мане, что нужно использовать -copyts, но на выходе все равно нету индексации:(

Edited by nicol@s

Share this post


Link to post
Share on other sites

Оказалось, что в .ts есть таймкод, просто vlc ее не понимает.

Поставили vlc 1.2 - проблема закрыта.

Share this post


Link to post
Share on other sites

ребят помогите пожалуйста.. сколько бы не перегонял в .ts по методам перечисленным выше приставка воспроизводит видео и звук с тормозами в начале воспроизведения.. использую последнюю версию live555 на данный момент и ffmpeg.. прошивка приставки 4.06.013, перегоняю в h264 и AAC - результаты различны.. удачно воспроизвелось видео вот с такими параметрами:

Формат файла: AVI
Видео кодек: DivX
Аудио кодек: MP3
Видео: DivX 704х384 25.00fps 1300kbps
Аудио: 48 kHz, MPEG Layer 3, 2 ch, ~128.00 kbps avg

Видео воспроизводится без тормозов даже перемотка вперёд и назад и остановка работает.. вобщем все функции VoD.

Конвертировал вот так:

ffmpeg -y -threads 6 -i input.avi -ab 128k -vb 3000k -r 50 -maxrate 10000k -bufsize 2000k -vcodec libx264 -vbsf h264_mp4toannexb -s 4cif -acodec aac -strict experimental -map 0:0 -map 0:1 output.ts

Кодировал ещё в mpeg2 ts несколько видео.. всё воспроизводится отлично но перемотка не работает.. есть у кого решение для этой приставки? буду очень благодарен.

Edited by KRed0

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