2012-06-10 32 views
20

मैं आईफोन पर एक संगीत वीओडी ऐप पर काम कर रहा हूं, और ऐप्पल दिशानिर्देशों के लिए धन्यवाद, मुझे ऐपस्टोर पर स्वीकार करने के लिए एक HTTP लाइव स्ट्रीमिंग चलाने की ज़रूरत है। लेकिन, चूंकि ऐप्पल पृथ्वी पर 98% सर्वरों की परवाह नहीं करता है, इसलिए वे लिनक्स-आधारित सिस्टम के लिए अपने जादुई HTTP लाइव स्ट्रीमिंग टूल प्रदान नहीं करते हैं। और इस बिंदु से, दुःस्वप्न शुरू होता है।HTTP लाइव स्ट्रीमिंग: लिनक्स दुःस्वप्न

मेरा लक्ष्य सरल है: एमपी 3 लें, इसे विभाजित करें और एक साधारण .m3u8 अनुक्रमणिका फ़ाइल जेनरेट करें। मैंने "HTTP लाइव स्ट्रीमिंग लिनक्स" और "ओह महान!" बहुत से लोगों ने पहले से ही ऐसा किया है!

सबसे पहले, मैंने the (so famous) post by Carson McDonald का दौरा किया। परिणाम: svn segmentate.c पुराना, छोटी गाड़ी और संकलन करने के लिए एक दुःस्वप्न था (इस दुनिया में कोई भी सटीक नहीं कर सकता कि वे किस ffmpeg का उपयोग कर रहे हैं!)। फिर मैं the Carson's git repo पर आया, लेकिन बहुत बुरा, बहुत परेशान रूबी सामान है और live_segmenter.c एमपी 3 फ़ाइलों को नहीं ले सकता है।

फिर मैंने और अधिक गहराई से खोज की। मुझे this stackoverflow topic मिला, और यह वही है जो मैं करना चाहता हूं। तो मैंने this script (httpsegmenter) का उपयोग करने के लिए जुनी से सलाह का पालन किया है। नतीजा: कुछ भी संकलित करना असंभव है, काम के 2 दिन और अंततः मैं इसे संकलित करने में कामयाब रहा (ffmpeg 8.1 w/httpsegmenter rev17)। और नहीं, यह एक अच्छी लिपि नहीं है, यह एमपी 3 फाइलें लेती है, लेकिन टीएस फाइलें उत्पन्न होती हैं और इंडेक्स फ़ाइल किसी प्लेयर द्वारा नहीं पढ़ी जा सकती है।

फिर पोस्ट क्रिस्बुलमैन के लेखक, समाधान के साथ आए, और यहां तक ​​कि एम 3u8 सेगमेंटर का एक पैच संस्करण भी अपने स्वयं के (git repo) दिया। मैं इसका परीक्षण करता हूं: संकलित नहीं करता, कुछ भी नहीं करता। तो मैंने जॉन संस्करण https://github.com/johnf/m3u8-segmenter से मूल संस्करण लिया। मैं संकलन और चमत्कार करने में कामयाब रहा यह वास्तव में काम करता है (वास्तव में नहीं)। मैं इस कमांड लाइन (0.8.1 ffmpeg) का इस्तेमाल किया:

ffmpeg -er 4 -i music.mp3 -f mpegts -acodec libmp3lame -ar 44100 -ab 128k -vn - | m3u8-segmenter -i - -d 10 -p outputdir/prefix -m outputdir/output.m3u8 -u http://test.com/ 

यह स्क्रिप्ट मेरी एमपी 3 फ़ाइल सांकेतिक शब्दों में बदलना (यह 4 सेकंड, बहुत समय लगता है), और यह m3u8-segmenter को 10 सेकंड में खंड के लिए इसे पारित टीएस फाइलें

मैंने इस मैक का परीक्षण मैक पर ऐप्पल के मध्यस्थवृत्तकर्ता के साथ किया, और कहा कि यह ठीक था। तो मैंने इसे क्विकटाइम में खेला, लेकिन प्रत्येक टीएस फाइलों के बीच लगभग 0.2 सेकंड खाली है !!

तो मेरी स्थिति यहां है, यह एक दुःस्वप्न है, मुझे एचएलएस प्रोटोकॉल पर एक साधारण एमपी 3 स्ट्रीम नहीं मिल सकती है। क्या एमपी 3 को विभाजित करने के लिए एक सरल कामकाजी समाधान है? मैं एमपी 3 फ़ाइल को सीधे एमपी 3 फाइलों में सेगमेंट नहीं कर सकता जैसे ऐप्पल के मीडियाफिल्सेजेंटर करता है?

+1

आपका अंग्रेजी ठीक है, लेकिन अपनी पोस्ट लंबी और बेतुका है। क्या आप इसे परेशान कर सकते हैं, और इसे मुख्य प्रश्न पर ध्यान केंद्रित करने के लिए प्राप्त कर सकते हैं? –

+0

मुख्य प्रश्न यह है: क्या डेबियन पर एमपी 3 फ़ाइल को विभाजित करने के लिए कोई आसान कामकाजी समाधान है? – Ethan0026

+2

ठीक है, जो बताता है कि अपमानजनक acccceent। –

उत्तर

0

आपकी अंग्रेजी ठीक है।

आपकी निराशा स्पष्ट है।

प्रश्न: यहां असली समस्या क्या है? ऐसा लगता है कि आपको बस एक काम करने वाले एचएलएस सर्वर की आवश्यकता है, सही? ऐप्पल आवश्यकताओं के कारण, सही?

आप यहां सूचीबद्ध रेडीमेड कार्यान्वयन के किसी भी उपयोग कर सकते हैं: जो 0.2 सेकंड तोड़ समाप्त libmp3lame की

+0

असली सवाल यह है: क्या डेबियन पर एमपी 3 फ़ाइल को विभाजित करने के लिए कोई आसान कामकाजी समाधान है? मुझे बहुत सारी मिनटों को स्ट्रीम करने की आवश्यकता है, और तैयार किए गए अक्सर समाधान का भुगतान कर रहे हैं। क्या आप एक ऐसे व्यक्ति को जानते हैं जो पूरी तरह से स्ट्रीम के साथ भी मुक्त है? – Ethan0026

+0

प्रश्न: डेबियन ओएस क्यों? मैग्नेटिक्स सर्वर के साथ क्या गलत है, उदाहरण के लिए? या किसी अन्य सुझाए गए विकल्प? क्या आप वाणिज्यिक समाधान के लिए भुगतान करना चाहते हैं? – paulsm4

+0

मैं ऐसी साधारण सामग्री के लिए वाणिज्यिक समाधान का भुगतान नहीं कर रहा हूं। मैं डेबियन ओएस का उपयोग करता हूं क्योंकि मुझे अपाचे, PHP, mysql और अन्य टूल्स की एक गुच्छा की आवश्यकता है ... मुझे समझ में नहीं आता कि मुझे इतना आसान (सिद्धांत में) चीज़ के लिए मैग्नेटिक्स सर्वर क्यों इंस्टॉल करना होगा .. – Ethan0026

0

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन मैं VLC में यह उपयोग कर रहा हूँ:

## To start playing the playlist out to the encoder 
cvlc -vvv playlist.m3u --sout rtp:127.0.0.1 --ttl 2 

## To start the encoder 
cvlc rtp:// --sout='#transcode{acodec=mp3,ab=96}:duplicate{dst=std{access=livehttp{seglen=10,splitanywhere=true,delsegs=true,numsegs=15,index=/var/www/vlctest/mystream.m3u8,index-url=http://IPANDPORT/vlctest/mystream-########.ts},mux=ts,dst=/var/www/vlctest/mystream-########.ts},select=audio}' 

मैं समस्या नहीं थी अगर मैं वीएलसी की एक प्रति के लिए प्लेलिस्ट फ़ाइल स्ट्रीम नहीं किया था, पहले चरण वैकल्पिक है यदि आपके पास पहले से ही एक लाइव स्ट्रीमिंग स्रोत है। (लेकिन आप "एन्कोडर" भाग के लिए किसी भी स्रोत का उपयोग कर सकते हैं)।

0

आप Windows Azure मंच पर हमारे मीडिया सेवाओं का उपयोग करने की कोशिश कर सकते: http://mingfeiy.com/how-to-generate-http-live-streaming-hls-content-using-windows-azure-media-services/

आप सांकेतिक शब्दों में बदलना और कोई विन्यास के साथ हमारे पोर्टल का उपयोग करने और आवश्यक कोडन द्वारा एचएलएस प्रारूप में अपने वीडियो स्ट्रीम कर सकते हैं।

2

केवल लाइव स्ट्रीमिंग के लिए, आपको इस के लिए आरटीएमपी मॉड्यूल के साथ Nginx का प्रयास करना चाहिए। https://github.com/arut/nginx-rtmp-module लाइव एचएलएस बहुत अच्छा काम करता है लेकिन looooong बफर के साथ। हालांकि, यह ऑन-डिमांड एचएलएस स्ट्रीमिंग का समर्थन नहीं करता है। उदाहरण के लिए module`s config की

टुकड़ा

# HLS requires libavformat & should be configured as a separate 
# NGINX module in addition to nginx-rtmp-module: 
# ./configure ... --add-module=/path/to/nginx-rtmp-module/hls ... 
# For HLS to work please create a directory in tmpfs (/tmp/app here) 
# for the fragments. The directory contents is served via HTTP (see 
# http{} section in config) 
# 
# Incoming stream must be in H264/AAC/MP3. For iPhones use baseline H264 
# profile (see ffmpeg example). 
# This example creates RTMP stream from movie ready for HLS: 
# 
# ffmpeg -loglevel verbose -re -i movie.avi -vcodec libx264 
# -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 
# -f flv rtmp://localhost:1935/hls/movie 
# 
# If you need to transcode live stream use 'exec' feature. 
# 
application hls { 
    live on; 
    hls on; 
    hls_path /tmp/app; 
    hls_fragment 5s; 
} 
4

लोचदार ट्रांसकोडर सेवा - आप एईएस एन्क्रिप्शन की जरूरत नहीं है, तो सिर्फ एक S3 बाल्टी में अपने एमपी 3 फेंक और इसके साथ किया जाना:

http://aws.amazon.com/elastictranscoder/

आप क्लाउडफ़्रंट सीडीएन समर्थन भी जोड़ सकते हैं। (पीएस मैं पूरी तरह से आपके दर्द की सराहना करता हूं, यह पूरी जगह एक दुःस्वप्न है)।

0

httpsegmenter के साथ आपको क्या समस्याएं थीं? यह एक सी स्रोत फ़ाइल है जो केवल ffmpeg (या libav) द्वारा प्रदान की गई कुछ पुस्तकालयों के खिलाफ लिंक करती है। मैं इसके लिए एक जेनेटू ईबिल्ड बनाए रखता हूं, क्योंकि मैं इसे टाइम-शिफ्ट टॉक रेडियो पर उपयोग करता हूं। आप Gentoo चला रहे हैं, निर्माण इस के रूप में सरल है:

sudo bash -l 
layman -S 
layman -a salfter 
echo media-video/httpsegmenter ~\* >>/etc/portage/package.accept_keywords 
emerge httpsegmenter 
exit 

उबंटू पर, मैं libavutil-देव और libavformat-देव दोनों स्थापित किए गए थे सुनिश्चित करने के लिए किया था, इसलिए निर्माण कुछ इस तरह दिखता है:

sudo apt-get install libavutil-dev libavformat-dev 
git clone https://gitlab.com/salfter/httpsegmenter.git 
cd httpsegmenter 
make -f Makefile.txt 
sudo make -f Makefile.txt install 

एक बार यह बनाया गया है (और एक बार मेरे पास ऑडियो स्रोत यूआरएल है), उपयोग काफी सरल है: ऑडियो स्ट्रीम करने के लिए कर्ल, ffmpeg इसे स्रोत (अक्सर एमपी 3) से एएसी में ट्रांसकोड करने के लिए, और सेगमेंटर इसे बंद करने के लिए:

curl -m 3600 http://invalid.tld/stream | \ 
ffmpeg -i - -acodec libvo_aacenc -ac 1 -ab 32k -f mpegts - 2>/dev/null | \ 
segmenter -i - -d 20 -o ExampleStream -x ExampleStream.m3u8 2>/dev/null 

यह स्ट्रीमिंग ऑडियो के एक घंटे (एमपी 3 या एएसी, फ्लैश नहीं होने की आवश्यकता है) को पकड़ता है, इसे 32 केबीपीएस मोनो एएसी में ट्रांसकोड करता है, और HTTP लाइव स्ट्रीमिंग के लिए इसे बंद करता है। क्या यह आपके वेबसर्वर द्वारा दी गई निर्देशिका में डंप हो गया है और आप जाने के लिए अच्छे हैं।

एक बार शो किया है, एक भी .m4a कि एक पॉडकास्ट के रूप में परोसा जा सकता है में परिवर्तित करने के भी सरल है:

cat `ls -rt ExampleStream-*.ts` | \ 
ffmpeg -i - -acodec copy -absf aac_adtstoasc ExampleStream.m4a 2>/dev/null 
संबंधित मुद्दे