2012-03-25 14 views
10

अद्यतन: यह अब कैसे वीडियो अगर स्ट्रीमिंग सुरक्षा के कुछ स्तर देने के लिए पर एक ट्यूटोरियल है: अपाचे
2) यदि आप उन नहीं करना चाहती के साथ
1) आप Flowplayer उपयोग कर रहे हैं वीडियो (केवल स्ट्रीमिंग)
3) यदि आप उन ब्राउज़र में वीडियो का URL डाल करने के लिए (सीमित पहुँच वीडियो)
4) आप केवल उन में सक्षम होना चाहते सक्षम होने के लिए नहीं करना चाहती डाउनलोड करने के लिए सक्षम होने के लिए वीडियो स्ट्रीम करने के अगर वे उचित क्रेडेंशियल्सFlowplayer स्ट्रीमिंग सुरक्षित

आप पीएचपीको पहले से जानकारी होना आवश्यक है हैऔर .htaccess फ़ाइलें।

मूल पोस्ट:
मेरे ग्राहक अपने वीडियो छिपा इतना है कि वे जब तक वे अपने डोमेन पर खरीदे जाते हैं (वह उन या तो वीडियो डाउनलोड करने के लिए सक्षम होने के लिए नहीं चाहता है) स्ट्रीम नहीं किया जा सकता है चाहता है। मैं फ्लोप्लेयर की सुरक्षित स्ट्रीमिंग के साथ ऐसा करने की कोशिश कर रहा हूं और मुझे लगता है कि मैं लगभग 9 वर्ष का हूं!)। हर जगह खोजने के बाद मुझे this post मिला।

मैं .htaccess के माध्यम से अन्य साइटों अब मैं किसी को सिर्फ यूआरएल को कॉपी करके उपयोग को सीमित करने के लिए कोशिश कर रहा हूँ और पता बार में यह पेस्ट करके गर्म जोड़ने पर पाबंदी लगा रखी (यानी http://www.mydomain.com/videos/testVideo.mov)

मैं का उपयोग किया है PHP/AJAX के इस HTML (सबसे उदाहरण बाहर वहाँ जे एस Flowplayer प्लगइन का उपयोग करें, मैं <object> टैग का उपयोग कर रहा खिलाड़ी एम्बेड करने के लिए, कोई जे एस शामिल किया गया। उत्पन्न करने के लिए आप जे एस प्लगइन, उपयोग का उपयोग करते हैं कि बजाय एम्बेडेड संस्करण की, .htaccess फाइल और video.php फ़ाइल एक ही हो जाएगा।)

$videofilename = 'testVideo.mov';  
$hash = md5('1234'); 
$timestamp = time(); 
$videoPath = $hash.'/'.$timestamp.'/'.$videofilename; 
echo ' 
<object width="667" height="375" type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.8.swf"> 
    <param name="wmode" value="transparent"/> 
    <param name="movie" value="../swf/flowplayer.securestreaming-3.2.8.swf" /> 
    <param name="allowfullscreen" value="true" /> 
    <param name="timestamp" value="'.$timestamp.'" /> 
    <param name="token" value="'.$hash.'" />  
    <param name="streamName" value="'.$videofilename.'" />  

    <param name="flashvars" value=\'config={ 
     "playlist":[ 
      {"url": "'.$videoPath.'", "baseUrl": "http://www.mydomain.com/videos", "autoPlay":false,"autoBuffering":true,"bufferLength":5} 
      ] 

     }\' /> 
</object>'; 
अब निर्देशिकामें

RewriteEngine on 
RewriteRule ^(.*)/(.*)/(.*)$ http://www.mydomain.com/vidoeos/video.php?h=$1&t=$2&v=$3 
RewriteRule ^$ - [F] 
RewriteRule ^[^/]+\.(mov|mp4)$ - [F] 

अपडेट:: php फ़ाइल के प्रयोजन के 1 करने के लिए है) डेटा हैश, टाइमस्टैम्प, और वीडियो फ़ाइल नाम (test.mov या जो कुछ भी मिलता है) मैं इस .htaccess फाइल डाल 2) यकीन है कि सब कुछ बाहर की जाँच करता है बनाएँ (मैं जानबूझकर लंबाई के लिए इस उदाहरण में सुरक्षा जांच लोप) और 3) Flowplayer अपने वीडियो की धारा दे। सुनिश्चित करें कि $originaltimestamp और $hash पहुँच देने से पहले अच्छा कर रहे हैं। आप सत्र प्रमाण-पत्रों की जांच भी कर सकते हैं, किसी डेटाबेस से 'असली' फ़ाइल स्थान प्राप्त कर सकते हैं, या उपयोगकर्ता पहुंच प्रदान करने से पहले किसी भी प्रकार की PHP सुरक्षा जांच कर सकते हैं।

इसके अलावा तो यह सही फाइल एक्सटेंशन के साथ संबद्ध Content-type: क्षेत्र बदलने के लिए (यानी video/mp4 अगर वीडियो एक * .mp4 है)

और videos/video.php इस तरह दिखता है याद रखें:

<?php 
session_start(); 

$hash = $_GET['h']; 
$streamname = $_GET['v']; 
$originaltimestamp = $_GET['t']; 

header('Content-Description: File Transfer'); 
header('Content-type: video/quicktime'); 
header("Content-length: " . filesize($streamname)); 
header("Expires: 0"); 
header("Content-Transfer-Encoding: binary"); 

$file = fopen($streamname, 'r'); 
echo stream_get_contents($file);  
fclose($file); 
?> 

तीन फ़ाइलें कुल, एचटीएमएल प्लेयर के साथ, .htaccess फ़ाइल और आखिरकार video.php फ़ाइल। मेरी मूल समस्या $streamname गलत थी। याद रखें $streamname बेसयूआरएल के बाद (या नीचे) फ़ाइल स्थान होना चाहिए। उम्मीद है कि यह मेरे जैसे किसी की मदद करता है!

कोई भी इस तरह से सुरक्षा मुद्दों को देखता है?

+0

** अद्यतन: इस कोड के साथ Flowplayer-3.2.8.swf का प्रयोग न करें ** का उपयोग करें Flowplayer-3.2.7।। flowplayer.controls-3.2.5.swf के साथ swf। यदि आप फ्लोप्लेयर-3.2.8.swf का उपयोग करते हैं, तो यह केवल क्रोम में काम करेगा, एफएफ, सफारी या आईई (9) – phpKid

+0

** अपडेट नहीं: आप फ्लोप्लेयर-3.2.8 ** का उपयोग कर सकते हैं ** बस सुनिश्चित करें कि आपके पास नवीनतम है फ्लैश का संस्करण! (मेरा बुरा) – phpKid

+0

क्या फ्लो प्लेयर एचटीएमएल 5 प्लेयर के साथ यह वही तकनीक संभव है ?? – Wikki

उत्तर

3

ठीक है मैंने इसे हल किया! इस पंक्ति में:

$streamname = "http://www.mydomain.com/videos/".$streamname; (यह वहाँ नहीं रह गया है)

मैं यह सब गलत था। मुझे बस इतना करना था कि यह लाइन हटा दी गई और यह काम किया। यह आपके बेस यूआरएल से शुरू होगा। तो यह पहले से ही 'वीडियो' फ़ोल्डर में था, इसलिए $ streamname बेसयूआरएल के बाद फ़ाइल के स्थान के बराबर होना चाहिए।

एक तरफ ध्यान में, मुझे हल करने के लिए लगभग एक सप्ताह लग गया, मैं इंटरनेट पर हर जगह टुकड़ों को एक साथ रखने के लिए देख रहा था। मैं

ताकि अन्य लोग इस तरह के एक सिर दर्द नहीं होगा एक ट्यूटोरियल में इस बनाया (उम्मीद!)

2

2 दिन मुझे ले गया इस खोज के लिए .... निर्देशिका जहां अपने वीडियो जमा हो जाती है 777 को CHMOD है तो यह धारा रोकने देंगे ...

मैं गया दौर घरों बाहर काम करने के कारण है कि नरक के नाम पर यह मेरा वीडियो स्ट्रीम नहीं होगा की कोशिश कर रहा ...

मैं था वीडियो फ़ाइलों के लिए एक पहले से ही स्थापित निर्देशिका जैसा कि एक और लोकप्रिय तस्वीर php स्क्रिप्ट द्वारा उपयोग किया गया था, जिसने निर्देशिका को समय के दौरान CHMOD 777 पर सेट किया था ... बस इसे CHMOD 755 पर सेट करने से FLV को अनुमति मिली या मेरे पीपी पेज में एम्बेडेड मेरे प्लेयर को स्ट्रीम करने के लिए एमपी 4 ... मुझे क्या राहत है!

तो धन्यवाद सिरदर्द से राहत के लिए ... इस इतना मदद की थी, चियर्स

+0

अतिरिक्त जानकारी के लिए धन्यवाद, मैं जल्द ही अपनी साइट को दूसरे सर्वर पर ले जाउंगा, इसलिए मुझे खुशी है कि अगर आपको वही त्रुटियां मिलती हैं तो आपने इसका उल्लेख किया है। – phpKid

संबंधित मुद्दे