FMUSER Wirless ส่งวิดีโอและเสียงได้ง่ายขึ้น!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> แอฟริคานส์
sq.fmuser.org -> แอลเบเนีย
ar.fmuser.org -> ภาษาอาหรับ
hy.fmuser.org -> อาร์เมเนีย
az.fmuser.org -> อาเซอร์ไบจัน
eu.fmuser.org -> บาสก์
be.fmuser.org -> เบลารุส
bg.fmuser.org -> บัลแกเรีย
ca.fmuser.org -> คาตาลัน
zh-CN.fmuser.org -> ภาษาจีน (ประยุกต์)
zh-TW.fmuser.org -> ภาษาจีน (ดั้งเดิม)
hr.fmuser.org -> โครเอเชีย
cs.fmuser.org -> เช็ก
da.fmuser.org -> เดนมาร์ก
nl.fmuser.org -> ดัตช์
et.fmuser.org -> เอสโตเนีย
tl.fmuser.org -> ฟิลิปปินส์
fi.fmuser.org -> ฟินแลนด์
fr.fmuser.org -> ฝรั่งเศส
gl.fmuser.org -> กาลิเซีย
ka.fmuser.org -> จอร์เจีย
de.fmuser.org -> เยอรมัน
el.fmuser.org -> กรีก
ht.fmuser.org -> ชาวเฮติครีโอล
iw.fmuser.org -> ภาษาฮิบรู
hi.fmuser.org -> ภาษาฮินดี
hu.fmuser.org -> ฮังการี
is.fmuser.org -> ไอซ์แลนด์
id.fmuser.org -> ชาวอินโดนีเซีย
ga.fmuser.org -> ไอริช
it.fmuser.org -> อิตาเลี่ยน
ja.fmuser.org -> ภาษาญี่ปุ่น
ko.fmuser.org -> ภาษาเกาหลี
lv.fmuser.org -> ลัตเวีย
lt.fmuser.org -> ลิทัวเนีย
mk.fmuser.org -> มาซิโดเนีย
ms.fmuser.org -> มาเลย์
mt.fmuser.org -> มอลตา
no.fmuser.org -> นอร์เวย์
fa.fmuser.org -> เปอร์เซีย
pl.fmuser.org -> โปแลนด์
pt.fmuser.org -> โปรตุเกส
ro.fmuser.org -> โรมาเนีย
ru.fmuser.org -> รัสเซีย
sr.fmuser.org -> เซอร์เบีย
sk.fmuser.org -> สโลวัก
sl.fmuser.org -> สโลวีเนีย
es.fmuser.org -> สเปน
sw.fmuser.org -> ภาษาสวาฮิลี
sv.fmuser.org -> สวีเดน
th.fmuser.org -> ไทย
tr.fmuser.org -> ตุรกี
uk.fmuser.org -> ยูเครน
ur.fmuser.org -> ภาษาอูรดู
vi.fmuser.org -> เวียดนาม
cy.fmuser.org -> เวลส์
yi.fmuser.org -> ยิดดิช
เพิ่งทำโครงการ Android เพื่อใช้ฟังก์ชันการเข้ารหัสและถอดรหัส ข้อกำหนดทั่วไปคือถ่ายวิดีโอผ่านกล้องจากนั้นแยกเฟรมสร้างวิดีโอสั้น ๆ และย้อนกลับวิดีโอ ในตอนแรกจะใช้รูปแบบการเข้ารหัส H.264 โดยตรงโดยไม่ต้องใช้บรรจุภัณฑ์คอนเทนเนอร์ MP4 หลังจากทำหน้าที่เหล่านี้ฉันรู้สึกว่ารูปแบบ MP4 เข้ากันได้กับทุกรุ่นมากขึ้นและลดจุดบกพร่อง ยกตัวอย่างที่ชัดเจน: เมื่อ Android เป็นฮาร์ดโค้ดมักจะใช้การรวมกันของ mediacodec และ mediaextractor อย่างไรก็ตามหากคุณใช้ไฟล์วิดีโอเปล่า H.264 ฟังก์ชัน setsource ของ mediaextractor จะรายงานข้อยกเว้น ไม่สามารถแยกวิเคราะห์ไฟล์วิดีโอในบางรุ่น (เช่น Meizu Note2 ระบบเป็น 5.1)
หลังจากได้รับข้อกำหนดทั่วไปแล้วในตอนแรกเราใช้ ffmpeg เพื่อสร้างตัวแปลงสัญญาณวิดีโอซึ่งเรียกว่าตัวแปลงสัญญาณซอฟต์แวร์ เนื่องจากความเร็วในการประมวลผลที่ช้าและความจำเป็นในการแสดงผลที่รวดเร็วหลังจากการถอดรหัสโครงร่างจึงไม่สามารถบรรลุเอฟเฟกต์ที่เราต้องการได้ (การถอดรหัสวิดีโอ ffmpeg และบันทึกเป็นตัวอย่าง JPEG: https://github.com/xiaoxiaoqingyi/ffmpeg-android-video-decoder ) 。 แต่ยังมีข้อดีบางประการเช่นความเข้ากันได้ที่ดีและการแปลงสี ท้ายที่สุดไม่ใช่ตัวแปลงสัญญาณฮาร์ดแวร์ (มีหลายรุ่นในประเทศจีนที่คุณรู้จัก) ประการที่สอง ffmpeg สามารถส่งออกเฟรมที่ระบุได้ในขณะที่ mediacodec ไม่สามารถส่งออกเฟรมที่ระบุได้ คุณต้องป้อนหลายเฟรมให้กับตัวถอดรหัสเพื่อถอดรหัสหนึ่งเฟรม ในปัจจุบันฉันยังไม่พบรูปแบบในการใส่กรอบและแก้ปัญหาซึ่งพระเจ้ารู้ดีว่าสามารถชี้แนะได้
ในกรณีที่ตัวแปลงสัญญาณซอฟต์แวร์ไม่เหมาะสมเราสามารถพิจารณาใช้ตัวแปลงสัญญาณฮาร์ดแวร์เท่านั้น ไม่กี่วันที่ผ่านมาฉันได้เข้าร่วมการประชุมนักพัฒนาสดของ Tencent 2017live และได้เรียนรู้ว่าการถ่ายทอดสดส่วนใหญ่ใช้ฮาร์ดแวร์ในการเข้ารหัสและถอดรหัส เพียงแค่กล่าวว่าบางรุ่นไม่สามารถใช้ mediaextractor เพื่อแยกวิเคราะห์ไฟล์ H.264 เพื่อให้เข้ากันได้กับโมเดลส่วนใหญ่พวกเขาจำเป็นต้องแยกวิเคราะห์ด้วยตัวเอง ด้วยการวิเคราะห์แต่ละไบต์ของไฟล์ H.264 พวกเขาสามารถแยกแยะตำแหน่งของแต่ละเฟรมและประเภทของเฟรมได้ เพื่อให้บรรลุข้อกำหนดนี้ประการแรกข้อมูลที่ได้รับจากกล้องจะถูกตั้งค่าเป็นรูปแบบ nv21 หากใช้กล้องถ่ายรูป แต่บางคนใช้ Camera2 และรูปแบบเป็นภาพ ไม่ว่าจะเป็นรูปแบบใดก็ตามจำเป็นต้องแปลงเป็น yuv420sp หรือ yuv420p (หมายเหตุ: เมื่อแปลงรหัสควรใช้ JNI ใช้ C / C + + เพื่อแปลงรูปแบบประสิทธิภาพจะสูงขึ้นหลายเท่า) ดังนั้น สามารถเข้ารหัสโดย mediacodec จากนั้นบันทึกไฟล์ H.264 เมื่อสร้างอินสแตนซ์ของ mediacodec นอกเหนือจากการตั้งค่าพารามิเตอร์ที่ต้องการแล้วคุณควรให้ความสนใจกับบางแง่มุมเช่นตัวเข้ารหัสที่จะเลือก โดยทั่วไปคุณจะเลือกสิ่งต่อไปนี้:
MediaCodec.createEncoderByType ("วิดีโอ / avc");
ดูเหมือนจะไม่มีปัญหา หลักการพื้นฐานคือการได้รับตัวเข้ารหัสที่ดีที่สุดซึ่งเป็นตัวแรกในรีจิสตรีตัวเข้ารหัสของระบบ Android ซึ่งโดยปกติจะเป็นการถอดรหัสฮาร์ดแวร์ (mediacodec สามารถเรียกตัวแปลงสัญญาณซอฟต์แวร์ได้เช่นกัน) ในความเป็นจริงการสร้างตัวเข้ารหัสด้วยวิธีนี้ไม่น่าเชื่อถือมากนัก แม้ว่าเว็บไซต์อย่างเป็นทางการจะแนะนำ แต่ใน Android รุ่นในประเทศหลายรุ่นโทรศัพท์มือถือบางรุ่นจะมีปัญหาบางรหัสจะมีหน้าจอสีน้ำเงินและบางรุ่นจะย้อนกลับโดยตรง มีตัวอย่างจากต่างประเทศซึ่งหมายถึงการขอรับตัวเข้ารหัสประเภท "วิดีโอ / AVC" ก่อนจากนั้นทดสอบทีละรายการโดยลองจับ หากไม่มีปัญหาให้เลือกตัวเข้ารหัสนี้ ซอร์สโค้ด: mediacodec_ rtsp_ h264
ปัญหาอีกประการหนึ่งคือเมื่อตั้งค่าช่วงเวลา I-frame โทรศัพท์มือถือบางรุ่นจะไม่ทำงาน การตั้งค่ามีดังนี้:
mediaFormat.setInteger (MediaFormat.KEY_ I_ FRAME_ INTERVAL ช่วงเวลา);
ในมุมมองของสถานการณ์นี้เราจำเป็นต้องใช้วิธีอื่นในการตั้งค่า I frame ซึ่งเป็นการตั้งค่าบังคับ:
Bundle params = Bundle ใหม่ ();
params.putInt ( MediaCodec.PARA .)เมตร_ คีย์_ คำขอ_ ซิงค์_ เฟรม, 0);
mMediaCodec.setParameters (พารามิเตอร์);
ในการเข้ารหัสและถอดรหัสเมื่อข้อมูลทั้งหมดถูกป้อนลงในตัวแปลงสัญญาณอย่าลืมป้อนอักขระท้ายจากนั้นตัวแปลงสัญญาณจะส่งออกเฟรมทั้งหมด
นอกจากนี้ยังมีปัญหาการดึงกรอบ หากใช้ mediacodec ในการแยกเฟรมวิดีโอใหม่จะถูกสร้างขึ้น ฉันสามารถลบเฟรมออกจากไฟล์ H.264 ได้หรือไม่? มันไม่ได้ผลแบบนี้ โดยปกติจะมีหน้าจอเริ่มต้น สิ่งนี้จำเป็นต้องป้อนไฟล์ H.264 ไปยังตัวถอดรหัสอีกครั้งจากนั้นรับเฟรมที่คุณต้องการจากนั้นป้อนลงในตัวเข้ารหัสใหม่เพื่อสร้างไฟล์ H.264 ที่คุณต้องการ นอกจากนี้ยังมีปัญหาเรื่องรูปแบบที่นี่ ไม่ใช่ว่าข้อมูลที่ถอดรหัสจากตัวถอดรหัสจะสามารถเข้ารหัสได้โดยตรงโดยตัวเข้ารหัส โทรศัพท์มือถือบางรุ่นสามารถและบางรุ่นจะมีหน้าจอสีน้ำเงินหรือแม้กระทั่งแฟลชย้อนกลับ ในกรณีนี้เราจำเป็นต้องรวมรูปแบบของตัวถอดรหัส หากคุณใช้แบบฟอร์มนี้เพื่อรับ:
mMediaCodec.getOutputBuffer ()
มีรูปแบบมากมายอยู่ที่นั่นและยากที่คุณจะเข้ากันได้ Google ได้เปิดตัวรูปแบบใหม่:
mMediaCodec.getOutputImage (outIndex)
ผลลัพธ์ที่ได้คือออบเจ็กต์ภาพซึ่งสามารถบันทึกเป็นภาพ JPEG หรือแปลงเป็น nv21 เช่นเดียวกับส่วนการถ่ายภาพด้านบนแปลงเป็นรูปแบบ YUV422 จากนั้นป้อนข้อมูลไปยังตัวเข้ารหัส ดังนั้นไม่ว่ารุ่นใดก็สามารถใช้งานร่วมกันได้ (ฉันลองผู้ผลิตโทรศัพท์มือถือมากกว่า 10 ราย) แม้ว่าจะมีทางอ้อมมากมายก็ตาม
|
ป้อนอีเมลเพื่อรับเซอร์ไพรส์
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> แอฟริคานส์
sq.fmuser.org -> แอลเบเนีย
ar.fmuser.org -> ภาษาอาหรับ
hy.fmuser.org -> อาร์เมเนีย
az.fmuser.org -> อาเซอร์ไบจัน
eu.fmuser.org -> บาสก์
be.fmuser.org -> เบลารุส
bg.fmuser.org -> บัลแกเรีย
ca.fmuser.org -> คาตาลัน
zh-CN.fmuser.org -> ภาษาจีน (ประยุกต์)
zh-TW.fmuser.org -> ภาษาจีน (ดั้งเดิม)
hr.fmuser.org -> โครเอเชีย
cs.fmuser.org -> เช็ก
da.fmuser.org -> เดนมาร์ก
nl.fmuser.org -> ดัตช์
et.fmuser.org -> เอสโตเนีย
tl.fmuser.org -> ฟิลิปปินส์
fi.fmuser.org -> ฟินแลนด์
fr.fmuser.org -> ฝรั่งเศส
gl.fmuser.org -> กาลิเซีย
ka.fmuser.org -> จอร์เจีย
de.fmuser.org -> เยอรมัน
el.fmuser.org -> กรีก
ht.fmuser.org -> ชาวเฮติครีโอล
iw.fmuser.org -> ภาษาฮิบรู
hi.fmuser.org -> ภาษาฮินดี
hu.fmuser.org -> ฮังการี
is.fmuser.org -> ไอซ์แลนด์
id.fmuser.org -> ชาวอินโดนีเซีย
ga.fmuser.org -> ไอริช
it.fmuser.org -> อิตาเลี่ยน
ja.fmuser.org -> ภาษาญี่ปุ่น
ko.fmuser.org -> ภาษาเกาหลี
lv.fmuser.org -> ลัตเวีย
lt.fmuser.org -> ลิทัวเนีย
mk.fmuser.org -> มาซิโดเนีย
ms.fmuser.org -> มาเลย์
mt.fmuser.org -> มอลตา
no.fmuser.org -> นอร์เวย์
fa.fmuser.org -> เปอร์เซีย
pl.fmuser.org -> โปแลนด์
pt.fmuser.org -> โปรตุเกส
ro.fmuser.org -> โรมาเนีย
ru.fmuser.org -> รัสเซีย
sr.fmuser.org -> เซอร์เบีย
sk.fmuser.org -> สโลวัก
sl.fmuser.org -> สโลวีเนีย
es.fmuser.org -> สเปน
sw.fmuser.org -> ภาษาสวาฮิลี
sv.fmuser.org -> สวีเดน
th.fmuser.org -> ไทย
tr.fmuser.org -> ตุรกี
uk.fmuser.org -> ยูเครน
ur.fmuser.org -> ภาษาอูรดู
vi.fmuser.org -> เวียดนาม
cy.fmuser.org -> เวลส์
yi.fmuser.org -> ยิดดิช
FMUSER Wirless ส่งวิดีโอและเสียงได้ง่ายขึ้น!
ติดต่อ
ที่ตั้ง:
เลขที่ 305 อาคาร HuiLan เลขที่ 273 Huanpu Road Guangzhou China 510620
หมวดหมู่
จดหมายข่าว