Android มี API ที่อนุญาตให้แอปต่างๆ ปรับการตั้งค่าการแสดงผลในฮาร์ดแวร์ที่รองรับ ใน Android TV OS แอปต่างๆ สามารถใช้ประโยชน์จากฟีเจอร์นี้เพื่อให้มั่นใจว่าเนื้อหาจะแสดงในรูปแบบที่ดีที่สุดเท่าที่จะเป็นไปได้ โดยการจับคู่อัตราเฟรมและโปรไฟล์สีเพื่อให้ได้ประสบการณ์การรับชมที่เหมาะสมที่สุด
จับคู่อัตราเฟรมของเนื้อหา
เมื่ออัตราเฟรมของวิดีโอไม่ตรงกับอัตราการรีเฟรชของการแสดงผล ผู้ใช้อาจพบสิ่งรบกวนการเคลื่อนไหวที่ไม่พึงประสงค์จากการแปลงอัตราเฟรม ซึ่งจะเห็นได้ชัดเจนเป็นพิเศษในระหว่างการแพนกล้องอย่างช้าๆ ด้วยเหตุนี้
ให้ใช้ API Surface.setFrameRate() เพื่อแจ้งให้
เฟรมเวิร์กทราบเกี่ยวกับอัตราเฟรมของเนื้อหาและเพื่อส่งสัญญาณว่าเนื้อหา
วิดีโอมีสิทธิ์เปลี่ยนอัตราเฟรม
แบบไม่ราบรื่นหรือไม่
อ่านข้อมูลเพิ่มเติมได้ในคู่มืออัตราเฟรม
จับคู่โปรไฟล์รูปภาพที่ต้องการ
MediaQuality API ใน Android 16 ช่วยให้นักพัฒนาแอปควบคุมโปรไฟล์รูปภาพได้
ตัวอย่างสถานการณ์มีดังนี้
- สำหรับภาพยนตร์และซีรีส์ทีวีที่สร้างขึ้นด้วยช่วงไดนามิกที่กว้างขึ้น นักพัฒนาแอปอาจขอโหมดผู้สร้างภาพยนตร์เพื่อแสดงเนื้อหาได้อย่างถูกต้องตามที่ผู้สร้างต้องการ โปรไฟล์ภาพยนตร์ที่มีความแม่นยำของสีมากขึ้นจะแสดงรายละเอียดเล็กๆ น้อยๆ ในเงาเพื่อเพิ่มความสว่าง
- การแข่งขันกีฬาแบบสดซึ่งมักจะสร้างขึ้นด้วยช่วงไดนามิกที่แคบและรับชมในเวลากลางวันจะได้รับประโยชน์จากโปรไฟล์ที่ให้ความสำคัญกับความสว่างมากกว่าความแม่นยำของสี
- นักพัฒนาเกมสามารถขอโปรไฟล์ที่มีเวลาในการตอบสนองต่ำและมีการประมวลผลรูปภาพน้อยที่สุดเพื่อให้ผู้เล่นได้รับประสิทธิภาพที่ดีที่สุดจากการแสดงผล
การเลือกโปรไฟล์รูปภาพของระบบ
ก่อนเลือกโปรไฟล์รูปภาพ คุณควรตรวจสอบก่อนว่าอุปกรณ์รองรับโปรไฟล์ดังกล่าว
ข้อมูลโค้ดต่อไปนี้แสดงวิธีใช้
getAvailablePictureProfiles() เพื่อค้นหาโปรไฟล์รูปภาพที่รองรับทั้งหมด
และใช้โปรไฟล์กีฬา
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
val mediaQualityManager: MediaQualityManager =
context.getSystemService(MediaQualityManager::class.java)
val profiles = mediaQualityManager.getAvailablePictureProfiles(null)
for (profile in profiles) {
// If we have a system sports profile, apply it to our media codec
if (profile.profileType == PictureProfile.TYPE_SYSTEM
&& profile.name == NAME_SPORTS
) {
val bundle = Bundle().apply {
putParcelable(MediaFormat.KEY_PICTURE_PROFILE_INSTANCE, profile)
}
mediaCodec.setParameters(bundle)
}
}
}
หากต้องการรับโปรไฟล์ที่เฉพาะเจาะจงตามชื่อ ให้ใช้ getPictureProfile()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
val profile = mediaQualityManager.getPictureProfile(
PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null)
}
หากไม่จำเป็นต้องค้นหาว่าโปรไฟล์พร้อมใช้งานหรือไม่ คุณสามารถระบุโปรไฟล์ตามรหัสให้กับ MediaCodec ได้โดยตรงโดยใช้ MediaFormat.KEY_PICTURE_PROFILE_INSTANCE
แม้ว่าโปรไฟล์ที่รองรับอาจแตกต่างกันไปตามอุปกรณ์ แต่คุณอาจพิจารณาจับคู่กับรหัสโปรไฟล์ระบบที่รู้จักต่อไปนี้
const val NAME_STANDARD: String = "standard"
const val NAME_VIVID: String = "vivid"
const val NAME_SPORTS: String = "sports"
const val NAME_GAME: String = "game"
const val NAME_MOVIE: String = "movie"
const val NAME_ENERGY_SAVING: String = "energy_saving"
const val NAME_USER: String = "user"