จับภาพวิดีโอของหน้าจอ Android


195

ลืมภาพหน้าจอมันเป็นไปได้ไหมที่จะจับภาพวิดีโอของแอพพลิเคชั่นที่รันอยู่ใน Android? หยั่งรากหรือไม่หยั่งรากฉันไม่สนใจฉันต้องการอย่างน้อย 15fps

อัปเดต: ฉันไม่ต้องการฮาร์ดแวร์ภายนอก ความตั้งใจที่จะทำให้พกพาได้อย่างสมบูรณ์แบบและทุกเฟรมจะถูกถ่ายใน Android OS ถ้ามันข้ามขอบเขตของ app sdk ฉันยินดีที่จะไปปรับเปลี่ยนระดับระบบปฏิบัติการ แต่ฉันต้องการจุดเริ่มต้น


ฉันเห็นสิ่งที่กำลังพูดอยู่ที่นี่อย่างสมบูรณ์ ดูเหมือนว่าตัวจำลองควรมีคุณสมบัติในการเปลี่ยนเส้นทางหน้าจอปัจจุบันไปยังไฟล์วิดีโอเช่นกัน ฉันจะรักคุณสมบัติเช่นนี้เพื่อให้ฉันสามารถทำวิดีโอที่ให้ข้อมูลเกี่ยวกับเกมและแอพของฉัน
Robert Massaioli

1
คุณได้รับการแก้ไขปัญหานี้หรือไม่? ถ้าเป็นเช่นนั้นโปรดแบ่งปันกับเรา ฉันก็ต้องวิดีโอ caputre ของหน้าจอ Android
deepa

@deepa ไม่ไม่มีวิธีที่ดีในการทำเช่นนี้
Taranfx

ตรวจสอบโครงการนี้: sourceforge.net/projects/ashot
Nirmal Patel

เป็นไปได้ไหมที่จะอ่านจากบัฟเฟอร์หน้าจอฮาร์ดแวร์?
mP

คำตอบ:


244

Android 4.4 (KitKat) และอุปกรณ์ที่สูงกว่ามียูทิลิตีเชลล์สำหรับการบันทึกหน้าจออุปกรณ์ Android เชื่อมต่ออุปกรณ์ในโหมดผู้พัฒนา / ดีบักที่ใช้งาน KitKat ด้วยยูทิลิตี้ adb ผ่าน USB แล้วพิมพ์ต่อไปนี้:

adb shell screenrecord /sdcard/movie.mp4
(Press Ctrl-C to stop)
adb pull /sdcard/movie.mp4

การบันทึกหน้าจอถูก จำกัด ไว้สูงสุด 3 นาที

การอ้างอิง: https://developer.android.com/studio/command-line/adb.html#screenrecord


ให้ฉันตอบสนองเหมือน screenrecord: ไม่พบ adb ล้าสมัยทำไม?
ยาพิษ

1
ดูเหมือนว่า Android SDK ของคุณจะล้าสมัย เปิดตัวจัดการ SDK Android และดาวน์โหลดเครื่องมือ SDK ล่าสุด
Joe Fernandez

1
อัปยศไม่มีเสียงด้วยนี้ แต่ถึงกระนั้นก็ดี
Martin Capodici

1
เพื่อเพิ่มหน้านี้มีแพ็คเกจที่มี adb + สคริปต์แบบสแตนด์อโลน "ScreenRecord.bat" ซึ่งสามารถดับเบิลคลิกเพื่อเริ่มบันทึกวิดีโอหน้าจอ android .. skipser.com/p/2/p/record-screen-video-in -android.html
arunskrish

1
ฉันได้รับข้อผิดพลาดคำเตือน: linker: libsac3d.so มีการเปลี่ยนตำแหน่งข้อความ นี่คือการสูญเสียหน่วยความจำและมีความเสี่ยงด้านความปลอดภัย กรุณาแก้ไข ข้อผิดพลาด: ไม่สามารถกำหนดค่าตัวแปลงสัญญาณ (err = -2147483648) คำเตือน: ล้มเหลวที่ 1080x1920 ลองอีกครั้งที่ 720x1280
Pete_ch

17

ฉันรู้ว่านี่เป็นคำถามเก่า แต่เนื่องจากดูเหมือนว่ายังไม่ได้ตอบรับความชื่นชอบของ OP มีแอพที่รองรับสิ่งนี้ในลิงก์ Android Market Screencast


29
น่าจะพูดถึงว่ามันต้องใช้ root, btw
themightyjon

ไม่สามารถใช้งานได้ใน HTC One ของฉัน ใช้งานได้ดีกับ Galaxy S II ของฉัน
MiloDC

1
อันนี้ไม่จำเป็นต้องรูท ดูเหมือนว่าจะมีแนวโน้ม ... droid-at-screen.ribomation.com/installation
Fraggle

droid-at-screen ไม่ทำวิดีโอ @Fraggle เพียงแค่ภาพหน้าจอ มันสามารถทำการถ่ายภาพต่อเนื่องได้ แต่อยู่ที่ประมาณ 1fps
Michael Petrotta

ขณะนี้ฉันกำลังใช้sourceforge.net/projects/ashotนี้เพื่อแสดงหน้าจอบน mac ของฉันจากนั้นใช้เครื่องมือมาตรฐาน (SnapPro X) เพื่อจับภาพภาพยนตร์จากส่วนหนึ่งของหน้าจอ ไม่แน่ใจว่าอัตราเฟรมเป็นเท่าที่ควร แต่ฉันคิดว่าสูงกว่า 1 fps
Fraggle

8

ใช่ใช้โทรศัพท์ที่มีวิดีโอและใช้เครื่องบันทึกวิดีโอเพื่อจับภาพสตรีม

ดูบทความนี้http://graphics-geek.blogspot.com/2011/02/recording-animations-via-hdmi.html


นั่นคือสิ่งที่ฉันสามารถทำได้ แต่ความต้องการของฉันคือการทำทุกอย่างภายใน android ทำให้การทำงานในระหว่างการเดินทางเป็นความตั้งใจ
Taranfx

1
ฉันคิดว่าคุณโชคไม่ดี - ข้อกำหนดในการจัดการการเข้ารหัสวิดีโอจำนวนมากบนอุปกรณ์พกพานั้นอยู่นอกขอบเขตของความสามารถทางร่างกายส่วนใหญ่ Android (AFAIK) ไม่มีส่วนต่อประสานเพื่อเข้าถึงสตรีม และแม้ว่ามันจะเป็นช่องโหว่ด้านความปลอดภัยที่อาจเกิดขึ้นอย่างมากเนื่องจากแอปสามารถสอดแนมผู้ใช้
Ollie C

4

@ taranfx โดยไม่มีข้อมูลเพิ่มเติมฉันถือว่าคุณอยู่ใน StackOverFlow ว่าคุณได้ติดตั้งเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Android ถ้าเป็นเช่นนั้นคุณสามารถรันโปรแกรมจำลองและใช้หนึ่งในโปรแกรมจับภาพหน้าจอเดสก์ท็อปจำนวนมากเพื่อจับภาพแอปพลิเคชันที่ทำงานอยู่ของคุณ Screenflowบนเครื่อง Mac ใช้งานได้ดีในการทำเช่นนี้ ฉันแน่ใจว่ามีโปรแกรมจับภาพหน้าจอที่ดีมากมายหากคุณใช้ Windows หรือแพลตฟอร์ม Nix และฉันรู้ว่ามีบริการออนไลน์บางอย่างเช่นกัน แต่ฉันไม่มีลิงก์ใด ๆ หรือฉันไม่ได้ใช้ นี่คือลิงค์สำหรับเอกสารอ้างอิงในการตั้งค่าและเรียกใช้โปรแกรมจำลอง Android SDK มีตัวจำลองอุปกรณ์เคลื่อนที่ ...


2
ขออภัย? ฉันขอจับภาพวิดีโอใน Android ไม่ใช่บน Mac หรือ Emulator
Taranfx

2
MWR แนะนำให้ทำการจับภาพหน้าจอ Android ผ่านโปรแกรมจำลอง
Ollie C

3
ไม่สามารถใช้ aps ทั้งหมดในโปรแกรมจำลองการทำงานได้
RajV

4

ข้อเสนอแนะของฉันคือการใช้เครื่องบันทึกหน้าจอเช่น SMRecorder แทนที่จะใช้อีมูเลเตอร์ซึ่งช้า - โดยเฉพาะเกมและสิ่งที่คุณต้องการวิดีโอผมแนะนำให้ใช้ VirtualBox VM พร้อมกับ Android ที่ติดตั้ง คุณสามารถเชื่อมต่อตัวดีบัก Dalvik เข้ากับมันและทำการดีบักแอพที่นั่น หากโปรแกรมดีบั๊กทำงานช้าลงคุณตรวจสอบมากเกินไปให้ยกเลิกการเชื่อมต่อเพื่อบันทึกวิดีโอ มีหลายลิงก์อธิบายวิธีการตั้งค่า Android VM สำหรับการดีบัก ฉันคิดว่ามันดีกว่าตัวจำลอง ตอนนี้สิ่งนี้ไม่ได้ดูแลหน้าจอการจับภาพโดยตรงบนอุปกรณ์ในกรณีที่แอปคุณใช้ accelerometer หรือกล้องที่ไม่สามารถใช้ได้บนพีซี เพื่อที่ฉันจะใช้แอพ Android Market ดังกล่าวข้างต้น


สำหรับการวัดที่ดี: spkaa.com/…
Reuben L.

3

ฉันเดา screencast ไม่ได้เป็นสาเหตุของความไม่ลงรอยกันของ tegra 2 ฉันลองไปแล้ว แต่ไม่เวย์! ดังนั้นฉันจึงลองใช้Z-ScreeNRecorderจากตลาดติดตั้งลงใน LG Optimus 2x ของฉัน แต่มันเป็นหน้าจอว่างเปล่าของบันทึกฉันพยายาม 5 นาที และฉันก็ได้ 5 นาที ไฟล์หน้าจอว่างขนาด 6mb ... ดังนั้นจึงไม่มีความพยายามจนกว่าพวกเขาจะวางจำหน่ายซอฟต์แวร์ที่เข้ากันได้กับชิปเซ็ต tegra2!



1

สามารถบันทึกวิดีโอหน้าจอได้โดยตรงจากโทรศัพท์หรือแท็บเล็ตหากอุปกรณ์ของคุณถูกรูท ฉันกำลังทำงานกับแอพSCR Screen Recorder เท่าที่ฉันรู้แล้วนี่เป็นแอพเดียวที่รองรับอุปกรณ์ Tegra (รวมถึง Nexus 7) และ Android 4.2 ในขณะนี้แอปบันทึกระหว่าง 9-18fps ขึ้นอยู่กับอุปกรณ์ แต่ฉันกำลังพยายามปรับปรุงมัน SCR Screen Recorder ยังอยู่ในช่วงทดสอบเบต้าดังนั้นอย่าลังเลที่จะทดสอบและให้ข้อเสนอแนะ


1
แชร์งานวิจัยของคุณว่าจะทำอย่างไรในทางโปรแกรมโดยใช้ Android เพื่อจับภาพรองของหน้าจออย่างเงียบ ๆ ?
Ajay S

@Iwo คุณสามารถแบ่งปันงานวิจัยของคุณเกี่ยวกับวิธีการบันทึกวิดีโอบนหน้าจอทางไวยากรณ์ได้หรือไม่? ขอบคุณ.
Srini Kandula


1

หากคุณพัฒนาแอปพลิเคชั่นกล้องวิดีโอมันจะเป็นการดีถ้าคุณรู้ว่า API ใช้สำหรับการจับภาพวิดีโอ:

http://developer.android.com/training/camera/videobasics.html

(ลิงก์ด้านบนแสดงเฉพาะวิธีการบันทึกวิดีโอที่สามารถทำได้ผ่านการส่งเจตนาไม่ใช่วิธีการบันทึกจริง)

https://www.linux.com/learn/tutorials/729988-android-app-development-how-to-capture-video

และถ้าคุณต้องการที่จะเขียนโปรแกรม adb "screenrecord" ด้วยตัวคุณเอง:

https://android.googlesource.com/platform/frameworks/av/+/android-cts-4.4_r1/cmds/screenrecord/screenrecord.cpp

และการกระทำที่สำคัญในการบันทึกเสร็จแล้วที่นี่:

static status_t recordScreen(const char* fileName) {
    status_t err;

<...>

    // Configure, but do not start, muxer.
    sp<MediaMuxer> muxer = new MediaMuxer(fileName,
            MediaMuxer::OUTPUT_FORMAT_MPEG_4);
    if (gRotate) {
        muxer->setOrientationHint(90);
    }

    // Main encoder loop.
    err = runEncoder(encoder, muxer);
    if (err != NO_ERROR) {
        encoder->release();
        encoder.clear();

        return err;
    }

สำหรับโทรศัพท์ Samsung มีการตั้งค่าเพิ่มเติม (แฮ็ค 'cam_mode'):

CamcorderProfile.QUALITY_HIGH ความละเอียดสร้างวิดีโอริบหรี่สีเขียว

ลิงค์ที่เป็นประโยชน์เพิ่มเติม:

ฉันจะบันทึกวิดีโอบน Android ได้อย่างไร


1

ฉันไม่ได้ใช้มัน แต่ฉันยังให้ความคิดแก่คุณในการทำเช่นนี้

ครั้งแรกของทุกคนได้รับรหัสเพื่อใช้ภาพหน้าจอของอุปกรณ์ Android และเรียกใช้ฟังก์ชันเดียวกันนี้เพื่อสร้างรูปภาพหลังจากช่วงเวลาหนึ่ง เพิ่มจากนั้นค้นหารหัสเพื่อสร้างวิดีโอจากเฟรม / ภาพวิดีโอจากภาพ

แก้ไข

เห็นลิงค์นี้นี้และแก้ไขตามขนาดหน้าจอของคุณสิ่งสำคัญคือการแบ่งงานของคุณออกเป็นงานเล็ก ๆ หลาย ๆ ชิ้นแล้วรวมเข้ากับความต้องการของคุณ

FFMPEGเป็นวิธีที่ดีที่สุดในการทำเช่นนี้ แต่เมื่อฉันได้ลองแล้ว แต่มันเป็นขั้นตอนที่ยาวมาก ก่อนอื่นคุณต้องดาวน์โหลด cygwin และ Native C ++ ไลบรารี่และสิ่งต่าง ๆ มากมายแล้วเชื่อมต่อจากนั้นคุณก็สามารถทำงานกับ FFMPEG ได้ (มันถูกสร้างใน C ++)


ฉันทำเช่นเดียวกับที่คุณแนะนำจากการถ่ายภาพหลังจากช่วงเวลาหรือไม่มีช่วงเวลาฉันมีมุมมองการเลื่อนที่ฉันกำลังเลื่อนและในเธรดอื่นฉันกำลังจับภาพพื้นที่หน้าจอ และกว่าพื้นที่อื่นถูกจับ ฉันต้องการลำดับภาพที่สมบูรณ์
Farrakh Javed

1

ลองดูที่ระยะไกลผู้จัดการ แต่ดูเหมือนว่าฉันจะทำงานไม่ถูกต้องกับอุปกรณ์ที่มีหน้าจอขนาดใหญ่ แม้ว่าคุณสามารถทดลองใช้DEMOมาก่อน


ลิงก์ทั้งสองนั้นตาย: /
rahulserver

@ahulserver, Google บล็อกพวกเขาเพราะฉันใช้Androidในชื่อของโปรแกรม ในไม่ช้าฉันจะเผยแพร่อีกครั้งโดยไม่Androidพูดอะไร
Nolesh

ขอบคุณสำหรับการตอบสนอง ฉันต้องการความช่วยเหลืออย่างยิ่งดังนั้นโปรดแจ้งที่นี่เมื่อคุณได้เผยแพร่
rahulserver

@ahulserver ฉันเผยแพร่พวกเขาอีกครั้งและแก้ไขลิงก์
Nolesh

1

หากคุณต้องการบันทึกการนำทางผู้ใช้เพื่อให้คุณสามารถทดสอบ UI และสิ่งอื่น ๆ ได้ฉันขอแนะนำให้คุณใช้TestFairy

อนุญาตให้คุณส่ง apk ไปยังผู้ใช้ทดสอบทางอีเมลและดูวิดีโอพร้อมเซสชันทั้งหมดในแอพและแม้แต่แอปขัดข้องและสถิติอุปกรณ์


1

ใน Android Lollipop (5) ฟีเจอร์ใหม่ได้รับการเพิ่มซึ่งช่วยให้จับภาพหน้าจอซึ่งอธิบายไว้ที่นี่

นี่คือตัวอย่าง

เริ่มโทรหากิจกรรมการปฏิบัติเช่นนี้

startActivityForResult(mProjectionManager.getScreenCaptureIntent(), PERMISSION_CODE);

จากนั้นจับผลลัพธ์

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode != PERMISSION_CODE) {
        Log.e(TAG, "Unknown request code: " + requestCode);
        return;
    }
    if (resultCode != RESULT_OK) {
        Toast.makeText(this,
                "User denied screen sharing permission", Toast.LENGTH_SHORT).show();
        return;
    }
    mMediaProjection = mProjectionManager.getMediaProjection(resultCode, data);
    mVirtualDisplay = createVirtualDisplay();
}

0

นี่คือรุ่นเก่า แต่แล้วASCล่ะ


เนื่องจากความไม่ลงรอยกันกับอุปกรณ์ที่ใช้ Tegra? .. ใช่ฉันได้รับ Asus Transformer: C
Richard Cotrina

มันต้องมีการเปิดใช้งาน 'activator' บนพีซี / Mac แต่ไม่ได้ลงนามและไม่ได้อธิบายว่ามันทำอะไรและไม่ต้องทำ 'เปิดใช้งาน' ด้วยตนเอง ดูเหมือนความเสี่ยงด้านความปลอดภัยและภัยคุกคามเวกเตอร์
Chloe

0

หากคุณอยู่บนพีซีจากนั้นคุณสามารถเรียกใช้My Phone ExplorerบนพีซีMyPhoneExplorer Clientบนโทรศัพท์ตั้งค่าการดักจับหน้าจอเพื่อรีเฟรชอย่างต่อเนื่องและใช้Winkเพื่อจับภาพพื้นที่สี่เหลี่ยมที่กำหนดเองของหน้าจอของคุณผ่านหน้าต่าง My Phone Explorer ด้วยอัตราการจับภาพของคุณเอง จากนั้นแปลงเป็น FLV ในขยิบตาแล้วแปลงจากวิดีโอ Flash เพื่อ MPG กับWinFF


ควรเพิ่มว่า "PC" ที่นี่หมายถึง Microsoft Windows บางประเภท
rwst

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.