Jump to content

Recommended Posts

Posted (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 by Иванов Денис
Posted (edited)

Должно хватать. :)

Была возможность взять для экспериментов целый свободный сервер на Core i7 975 3.33GHz + 3GB RAM + SSD.

Как уже писал выше, установил на этот сервер Ubuntu и VLC 2.

Так что все свободные ресурсы в распоряжении одного экземпляра VLC.

Edited by Иванов Денис
  • 2 weeks later...
  • 1 month later...
Posted

У h264 есть встроенные profile. У VLC есть их маппинг profile=<slow|veryslow|fast|ultrafast|veryfast|placebo>. Можно попробовать ultrafast и оценить, есть ли рассыпания.

В любом случае если картинка сыпется то VLC в лог должен писать с чем же проблемы.

Может быть что угодно, начиная от реальных проблем с произсодительностью, заканчивая проблемами в сети.

  • 1 year later...
Posted

Так кто нибудь в реальности пользуется mediacore? Где можно увидеть в действии? Какие требования к серверу?

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.