2016-10-13 16 views
5

बफर नहीं कर रहा है मेरे एंड्रॉइड ऐप VideoView में ऑनलाइन वीडियो स्ट्रीम करता है। फ़ाइल से वीडियो चलाते समय, यह ठीक काम करता है, या यहां तक ​​कि लाइव स्ट्रीमिंग (m3u8); यह हमेशा एक ही स्रोत से स्ट्रीमिंग करता है, और जब मैं बाहरी प्लेयर/ब्राउज़र का उपयोग करता हूं, तो यह भी ठीक से स्ट्रीम करता है (इसलिए मुझे नहीं लगता कि यह स्रोत के साथ एक मुद्दा है, जो इस तरह की फ़ाइल का एक भिन्नता है: https://publish.dvlabs.com/democracynow/360/dn2016-0810.mp4वीडियो व्यू स्ट्रीम लोड पर्याप्त

एंड्रॉयड मॉनिटर लॉग इस बस से पहले दुर्घटना:

10-13 12:02:56.204 32460-32748/com.workingagenda.democracydroid D/MediaHTTPConnection: filterOutInternalHeaders: key=User-Agent, val= stagefright/1.2 (Linux;Android 6.0.1) 
10-13 12:02:56.205 32460-32472/com.workingagenda.democracydroid D/MediaHTTPConnection: proxy null port 0 
10-13 12:02:57.904 32460-32460/com.workingagenda.democracydroid D/MediaPlayer: getMetadata 
10-13 12:02:58.438 32460-377/com.workingagenda.democracydroid W/MediaPlayer: info/warning (3, 0) 

और फिर मैं इन लॉग प्राप्त जब यह दुर्घटनाओं:

012,351,641:

10-13 12:05:33.812 32460-32472/com.workingagenda.democracydroid W/MediaHTTPConnection: readAt 26869519/241 => java.net.ProtocolException: unexpected end of stream 
10-13 12:08:32.480 32460-3546/com.workingagenda.democracydroid E/MediaPlayer: error (1, -1004) 
10-13 12:08:32.480 32460-32460/com.workingagenda.democracydroid E/MediaPlayer: Error (1,-1004) 
10-13 12:08:32.481 32460-32460/com.workingagenda.democracydroid D/VideoView: Error: 1,-1004 

                     [ 10-13 12:08:32.512 5066: 453 E/   ] 
                     Destroy C2D instance 

                     [ 10-13 12:08:32.512 5066: 453 E/   ] 
                     Destroy C2D instance 
10-13 12:08:32.635 32460-32472/com.workingagenda.democracydroid E/MediaPlayer: error (1, -1004) 
10-13 12:08:32.668 32460-32460/com.workingagenda.democracydroid E/MediaPlayer: Error (1,-1004) 
10-13 12:08:32.668 32460-32460/com.workingagenda.democracydroid D/VideoView: Error: 1,-1004 

मेरे सवाल के बारे में अधिक सटीक होना

  1. मुझे यह जानना है कि यह त्रुटि क्या है, E/MediaPlayer: Error (1,-1004) है (जैसा कि मुझे इसके बारे में वेब पर कोई जानकारी नहीं मिली है)।
  2. यदि मुझे लगता है कि मूल रूप से फ़ाइल/स्ट्रीम त्रुटि के अंत में मुझे संदेह है, तो मुझे कुछ मदद मिल रही है बफरिंग या अन्यथा इस से बचने के लिए वीडियो को लोड करना?

मैं इस सवाल का, Android Streaming with MediaPlayer: Error(1, -1004) and 3GPP video देखा है, लेकिन जवाब ज्यादा मदद नहीं कर रहे हैं।

मैं एक समारोह, MediaPlayer.prepareAsync(), यहाँ https://developer.android.com/reference/android/media/MediaPlayer.html#prepareAsync(), यह स्वचालित रूप से कहा जाता है जब एक VideoView एक वीडियो को खोलता है, लेकिन यह काम करने के लिए प्रतीत नहीं होता पाया है।

संपादित

तो समाधान गूगल के ExoPlayer, जो मेरे VideoView के लिए स्वैप करने बहुत आसान था करने के लिए मुझे लाया है, और यह एक आकर्षण की तरह काम करता है।

  1. गतिविधि
  2. प्रारंभ MediaSource में SimpleExoPlayerView
  3. प्रारंभ SimpleExoPlayer के लेआउट में निर्भरता
  4. दृश्य बदलें के रूप में ExoPlayer जोड़ें और खिलाड़ी
  5. संलग्न जब अब जरूरत release() करना न भूलें।

और इसके साथ, स्ट्रीमिंग निर्बाध रूप से काम करती है।

+1

उपयोग https://github.com/google/ExoPlayer – Qamar

+0

हाँ ... कि समाधान – Nevermore

उत्तर

1

एंड्रॉइड मीडियाप्लेयर क्लास बफर आकार जैसे निम्न स्तर की सेटिंग्स तक पहुंच प्रदान नहीं करता है।

फार्म लॉग -1004 का अर्थ है: public static final int MEDIA_ERROR_IO

मेरे लिए इस कोड को ठीक काम है:

try{ 
    MediaController mediaController = new MediaController(this); 

    Uri video = Uri.parse(url); 

    mediaController.setAnchorView(videoView); 
    videoView.requestFocus(); 
    videoView.setMediaController(mediaController); 
    videoView.setVideoURI(video); 

    videoView.setOnPreparedListener(new OnPreparedListener() 
    { 

     @Override 
     public void onPrepared(MediaPlayer arg0) 
     { 
      videoView.start(); 
     } 
    }); 
}catch (Exception e) { 
    e.printStackTrace(); 
} 

यह स्ट्रीम के स्रोत से संबंधित कुछ किया गया है लग रहा था, क्योंकि कुछ सूत्रों अंततः पर खेला डिवाइस, लेकिन जिसकी हमें आवश्यकता थी, कभी नहीं खेला।

यदि आप देख सकते हैं तो आप लॉग द्वारा अपनी स्ट्रीम के साथ कुछ समस्या जानते हैं।

MediaHTTPConnection: readAt 26869519/241 => java.net.ProtocolException: unexpected end of stream 

कि अपवाद FixedLengthInputStream द्वारा फेंका जब बाइट्स की अपेक्षित संख्या (आमतौर पर प्रतिक्रिया की सामग्री-लंबाई हेडर में सेट) के जवाब में वास्तविक डेटा की तुलना में बड़ा है। जांचें कि सामग्री-लंबाई शीर्षलेख सही है।

अधिक विस्तार के लिए कृपया इस पोस्ट को देख unexpected end of stream error

अन्य इस एक भी आपकी मदद, कृपया इस link कि नहीं, इसकी जांच (यदि आप सामग्री की लंबाई के लिए अपने स्वयं के मूल्य की आपूर्ति कर रहे हैं, यह सही है सुनिश्चित करें।) MediaPlayer के लिए लंबे समय के बफर बनाने के लिए

+0

तो आखिरी लिंक मुझे एक्सपोलेयर में लाया ... यही मुझे चाहिए – Nevermore

0

एंड्रॉइड पर वीडियो व्यू सबसे अच्छा नहीं है, अगर आप वीएलसी का उपयोग करते हैं तो आपको वीडियो को बफर करने वाला एक बहुत आसान अनुभव मिलेगा। https://wiki.videolan.org/AndroidCompile/

0

वीडियो स्ट्रीमिंग में VideoView का उपयोग करते हुए कुछ समय समस्या का कारण हो सकता है:

यहाँ कैसे Android के लिए स्रोत से वीएलसी को संकलित करने के निर्देश दिए गए हैं। मुझे भी कई मुद्दों का सामना करना पड़ा।

Video स्ट्रीम करने के लिए JieCaoVideoPlayer लाइब्रेरी का उपयोग करें। यह अधिक विकल्प उपलब्ध कराता है।

https://github.com/lipangit/JieCaoVideoPlayer

बस आयात यह

compile 'fm.jiecao:jiecaovideoplayer:5.3' 

सामान्य दृश्य की तरह अपने लेआउट में जोड़े

<fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard 
    android:id="@+id/videoplayer" 
    android:layout_width="match_parent" 
    android:layout_height="200dp"/> 

सेट यूआरएल जो आप चाहते हैं खेलने के लिए

JCVideoPlayerStandard jcVideoPlayerStandard = (JCVideoPlayerStandard) findViewById(R.id.videoplayer); 
jcVideoPlayerStandard.setUp("http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4" 
         , JCVideoPlayerStandard.SCREEN_LAYOUT_NORMAL, "Video"); 
jcVideoPlayerStandard.thumbImageView.setImage("http://p.qpic.cn/videoyun/0/2449_43b6f696980311e59ed467f22794e792_1/640"); 
+0

मैं JieCaoVideoPlayer के GitHub में वीडियो के बहुत अजीब थंबनेल देखने है ... –

+0

हाँ, यह है एक अजीब लेकिन हम सिर्फ कोड चाहते हैं तो बस इसे अनदेखा करें। लाइब्रेरी वीडियो स्ट्रीमिंग के लिए अच्छा है –

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