Иванов Денис Posted April 25, 2012 Posted April 25, 2012 (edited) Нагуглившись начитавшись о сабже и различных его реализациях, решил попробовать поиграться c адаптивным HLS. В перспективе хотелось бы применить технологию для публикации изображения с камеры на веб страничке, и чтобы была возможность просмотра с мобильных устройств на Android и iOS. Если верить википедии, то HLS работает в Android 3/4 и iOS 4.3/5 Рекомендованные форматы: для Android, для iOS C iOS всё просто: <html> <head> <title>Apple Test</title> <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/> </head> <body style="background-color:#FFFFFF; "> <center> <video src="index.m3u8" controls autoplay ></video> </center> </body> </html> Но вот с Android уже не так просто. Если на Android установить Adobe Flash 11, то будет работать плеер основанный на OSMF, но его еще предстоит найти или написать. Смог нагуглить только два бесплатных плеера: 1) бета версия JWPlayer 2) плагин для MediaCore, который я так и не смог установить. Никаких инструкций по установке плагина тоже не нашёл. Ну чтож, выбора особо нет... Встроил jwplayer в страничку: <html> <head> <script type="text/javascript" src="player.js"></script> </head> <body> <div id="player">You need Flash to play this</div> <script type="text/javascript"> jwplayer("player").setup({ file: 'high.m3u8', flashplayer: 'player.swf', provider:'adaptiveProvider.swf', width: 300, height: 200, }); function loadStream(url) { jwplayer("player").load({file: url,provider: 'adaptiveProvider.swf'}); jwplayer("player").play(); return false; } </script> </body> </html> Денег конечно же нет, поэтому пришлось установить vlc 2 + apache2 на Ubuntu 11.10 amd64 По умолчанию vlc подтянул обычный libavcodec, но позже я заменил его на libavcodec-extra Первая попытка: vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \ --sout='#std{access=livehttp{seglen=10, \ numsegs=3, \ index=/var/www/index.m3u8, \ index-url=http://mysite.org/segment-#.mts}, \ mux=ts{use-key-frames}, \ dst=/var/www/segment-#.mts}' Камера уже отдаёт H264 (AVC+AAC), поэтому без транскодинга. jwplayer проиграл первый сегмент и остановился издав несколько звуков похожих на щелчки. Попробовал отключить звук на камере и в vlc vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \ --sout='#transcoding{acodec=none}:std{access=livehttp{seglen=10, \ numsegs=3, \ index=/var/www/index.m3u8, \ index-url=http://mysite.org/segment-#.mts}, \ mux=ts{use-key-frames}, \ dst=/var/www/segment-#.mts}' Не помогло. Попробовал с транскодингом звука: vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \ --sout='#transcoding{acodec=aac}:std{access=livehttp{seglen=10, \ numsegs=3, \ index=/var/www/index.m3u8, \ index-url=http://mysite.org/segment-#.mts}, \ mux=ts{use-key-frames}, dst=/var/www/segment-#.mts}' Не помогло. Попробовал с транскодингом и звука и видео: vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \ --sout='#transcoding{vcodec=h264,acodec=aac}:std{access=livehttp{seglen=10, \ numsegs=3, \ index=/var/www/index.m3u8, \ index-url=http://mysite.org/segment-#.mts}, mux=ts{use-key-frames}, dst=/var/www/segment-#.mts}' jwplayer не останвливается, но картинка очень сильно рассыпается - смотреть невозможно. Позже нашёл причину остановки jwplayer на форуме longtailvideo.com Получилось забирать H264 с камеры и транскодить только звук: vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \ --sout='#transcoding{aenc=ffmpeg{aac-profile=low},acodec=mp4a,ab=128,channels=2,samplerate=44100}:std{access=livehttp{seglen=10, \ numsegs=3, \ index=/var/www/index.m3u8, \ index-url=http://mysite.org/segment-#.mts}, \ mux=ts{use-key-frames}, \ dst=/var/www/segment-#.mts}' Показывает отлично. Далее попробовал разбить поток на два: первый оригинальный - high.m3u8, а второй с заниженными разрешением, частотой кадров и битрейтом - low.m3u8 Указал их в общем index.m3u8 #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=3000000 high.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=50000 low.m3u8 vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \ --sout='#transcoding{aenc=ffmpeg{aac-profile=low},acodec=mp4a,ab=128,channels=2,samplerate=44100}:std{access=livehttp{seglen=10, \ numsegs=3, \ index=/var/www/high.m3u8, \ index-url=http://mysite.org/high-#.mts}, \ mux=ts{use-key-frames}, \ dst=/var/www/high-#.mts}' \ --sout='#transcoding{vcodec=h264,width=174,height=144,fps=12,vb=50,aenc=ffmpeg{aac-profile=low},acodec=mp4a,ab=128,channels=2,samplerate=44100}:std{access=livehttp{seglen=10, \ numsegs=3, \ index=/var/www/low.m3u8, \ index-url=http://mysite.org/low-#.mts}, \ mux=ts{use-key-frames}, dst=/var/www/low-#.mts}' Как работает "адаптивность" проверять не стал, т.к. в low.m3u8 рассыпается картинка. :( Проверял с разными источниками видео (камерами, файлами со статическим видео) - сыпется. Боюсь что сам не справлюсь с рассыпанием картинки, поэтому прошу помощи... :) Edited April 25, 2012 by Иванов Денис Вставить ник Quote
t0ly Posted April 27, 2012 Posted April 27, 2012 а вы уверенны что производительности хватает на перекодирование low-потока? Вставить ник Quote
Иванов Денис Posted April 28, 2012 Author Posted April 28, 2012 (edited) Должно хватать. :) Была возможность взять для экспериментов целый свободный сервер на Core i7 975 3.33GHz + 3GB RAM + SSD. Как уже писал выше, установил на этот сервер Ubuntu и VLC 2. Так что все свободные ресурсы в распоряжении одного экземпляра VLC. Edited April 28, 2012 by Иванов Денис Вставить ник Quote
t0ly Posted May 10, 2012 Posted May 10, 2012 threads=2..4 внутри transcode пробовали ? Вставить ник Quote
pchol Posted June 12, 2012 Posted June 12, 2012 У h264 есть встроенные profile. У VLC есть их маппинг profile=<slow|veryslow|fast|ultrafast|veryfast|placebo>. Можно попробовать ultrafast и оценить, есть ли рассыпания. В любом случае если картинка сыпется то VLC в лог должен писать с чем же проблемы. Может быть что угодно, начиная от реальных проблем с произсодительностью, заканчивая проблемами в сети. Вставить ник Quote
npokypop Posted May 14, 2014 Posted May 14, 2014 Так кто нибудь в реальности пользуется mediacore? Где можно увидеть в действии? Какие требования к серверу? Вставить ник Quote
^rage^ Posted May 15, 2014 Posted May 15, 2014 андроид нативно умеет hls. никакого флеша не надо. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.