2012-10-10 16 views
6

मैं पूरी तरह से कुछ ऐसी चीज पर फंस गया हूं जो मैंने सोचा था कि कभी भी सबसे आसान बात होगी। मैं एक रिश्तेदार लेआउट में एक फ्रेम के अंदर एक वीडियो चलाने की कोशिश कर रहा हूँ।स्क्रीन के हिस्से पर वीडियो चलाएं

ध्यान दें कि एप्लिकेशन लैंडस्केप मोड में एक बहुत ही विशिष्ट डिवाइस (आर्कोस 101 इंटरनेट टैब) पर चलाने के लिए है, और वीडियो 480x360 के एक बहुत ही विशिष्ट आकार के साथ पूर्व-एन्कोड किए गए हैं, यही कारण है कि लेआउट में कुछ निश्चित है आकार।

यहाँ लेआउट

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<!-- Background --> 
<ImageView 
    android:layout_width="980dp" 
    android:layout_height="568dp" 
    android:src="@drawable/bg_video" /> 

<TextView 
    android:id="@+id/video_headtext" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="73dp" 
    android:layout_marginLeft="255dp" 
    android:textColor="#FFFFFF" 
    android:textSize="16dp" /> 

<TextView 
    android:id="@+id/video_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#FFFFFF" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="112dp" /> 

<VideoView 
    android:id="@+id/video_videocontainer" 
    android:layout_width="480dp" 
    android:layout_height="360dp" 
    android:layout_below="@id/video_title" 
    android:layout_marginTop="10dp" 
    android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

है मैं इस कोड

player = (VideoPlayer) findViewById(R.id.video_videocontainer); 
player.setVideoURI(videoUri); 

कोड काम करता है का उपयोग करते हुए वीडियो लोड, लेकिन जब videoView फ्रेम के अंदर सही ढंग से है, वीडियो में ही कहीं निभाता है स्क्रीन के शीर्ष, और इसका केवल एक हिस्सा VideoView में दिखाया गया है।

here (यह डीबगिंग के लिए केवल एक अस्थायी वीडियो है) का उदाहरण है। उसी पल में वीडियो का स्क्रीनशॉट here

जैसा कि आप देख सकते हैं, वीडियो व्यू केवल वीडियो का हिस्सा दिखाता है, बाकी को काले रंग से भरता है।

मुझे पूरा यकीन है कि मुझे कुछ सचमुच सरल याद आ रहा है, लेकिन मैं यह बिल्कुल नहीं समझ सकता।

अग्रिम धन्यवाद।

संपादित करें: मैं एक VideoPlayer वर्ग कि VideoView प्रदान करता है और इस

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
{ 
    setMeasuredDimension(480, 360); 
} 

public void changeVideoSize() 
{ 
    getHolder().setFixedSize(480, 360); 

    requestLayout(); 
    invalidate(); 
} 

तरह onMeasure ओवरराइड करता है लेखन की कोशिश की है लेकिन यह एक बिट में मदद नहीं करता।

संपादित करें 2: एक सतह दृश्य और मीडियाप्लेयर के साथ प्रयास किया, वही परिणाम। मुझे लगता है कि मुझे एंड्रॉइड पर एक वीडियो चलाने के सिद्धांत को समझ में नहीं आया है। यहां काफी अटक गया है।

संपादित 3: मैंने सैमसंग गैलेक्सी एचडी पर कोशिश की है और वीडियो फ्रेम के अंदर सही ढंग से दिखाता है। मुझे आश्चर्य है कि क्या यह टैबलेट के साथ समस्या है, या 2.2 के साथ?

संपादित करें 4: 2.2 के तहत चल रहे एवीडी वीडियो को उचित रूप से प्रस्तुत नहीं करता है। एवीडी चल रहा 4.1 करता है। मुझे लगता है कि यह एक टैड नीचे narrows।

उत्तर

3

मुझे ऐसे वीडियो के साथ ऐसी ही समस्या थी जिसमें उस विशेष डिवाइस (2.1) के लिए उच्च प्रोफ़ाइल थी और यह एंड्रॉइड 4.0 के लिए ठीक काम करता था।

इसके अलावा, मैं SurfaceView का उपयोग कर रहा हूं और चाल मीडियाप्लेयर के लिए श्रोताओं को जोड़ने के लिए थी (विशेष रूप से setOnVideoSizeChangedListener) और mediaplayer घटनाओं से जुड़ी सतह पर कॉलबैक।

+0

मैं फिर से लिखा है सब कुछ कहा जाता है और अब मैं वास्तव में कुछ अजीब का सामना करना पड़ रहा है। वीडियो VideoView के साथ, SurfaceView के बाहर खेलता है। केवल यह फसल नहीं है, और सब कुछ के शीर्ष पर दिखाता है। यहां तक ​​कि जब मैं 'setDisplay (null)' का उपयोग करता हूं, तब भी वीडियो दिखाता है! –

+0

क्या आपने सतह धारक कॉलबैक लागू किया है और इसके लिए घटनाओं को जोड़ा है? – petrumo

+0

मैं आपके नेतृत्व का पालन करने के बाद वीडियो को थोड़ा बेहतर स्थिति में रखने में कामयाब रहा। यह इष्टतम नहीं है और मैं अभी भी विश्वास नहीं कर सकता कि एक वीडियो को एक दृश्य के अंदर रखना मुश्किल है, लेकिन यह अभी काम करता है। धन्यवाद! –

0

वीडियो व्यू विशेषता setZOrderOnTop को सत्य पर सेट करें और देखें कि यह काम करता है या नहीं। उदाहरण के लिए अगर मैं एक videoview qvideo एक SurfaceView साथ

qvideo.setZOrderOnTop(true); 
+0

दुर्भाग्य से यह कुछ भी नहीं बदलता है। –

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