Перейти к содержимому
Калькуляторы

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

 

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

 

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

Изменено пользователем tipok

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

В большинстве случаев у 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".

Изменено пользователем nicol@s

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

Изменено пользователем tipok

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хм... Проверяю 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, то все будет прекрасно :) Но все таки не хочется привязываться к такому условию.

Изменено пользователем nicol@s

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня стоит последняя прошивка. А Длинк заявляет, что нет такой прошивки, на которой приставка может кушать что-то кроме 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поигрался с разными режимами в настройках приставки. В итоге получилось, что при одном выбранном режиме (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. Это может как-то влиять на вещание?

Изменено пользователем nicol@s

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а фильм 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) - с незначительными, но артефактами.

Изменено пользователем nicol@s

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

- с помощью 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, но на выходе все равно нету индексации:(

Изменено пользователем nicol@s

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ребят помогите пожалуйста.. сколько бы не перегонял в .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 несколько видео.. всё воспроизводится отлично но перемотка не работает.. есть у кого решение для этой приставки? буду очень благодарен.

Изменено пользователем KRed0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.