ÈÚÔÆÊµÊ±ÒôÊÓÆµ SDK »á¶ÔÊÐÃæÉϵĸ÷ÀàÖÇÄÜÓ²¼þÉ豸£¬ÌرðÊǸ÷ÖÖÀàÐÍ¡¢¸÷ÖÖ°æ±¾µÄÊÖ»ú½øÐÐÊÊÅ䣬ÒÔÈ·±£
SDK µÄÎȶ¨ÐÔ¡£µ«²»Í¬ÓÚÊÖ»úµÄÊÊÅ䣬ÖÇÄÜÓ²¼þµÄÊÊÅäÓкܶ಻֮ͬ´¦£º
1.ºÜ¶àÖÇÄÜÓ²¼þµÄÔËÐÐÄÚ´æ¡¢CPU ÐÔÄܵÈÓ²¼þÅäÖÃÆÕ±é±ÈÊÖ»úÐÔÄܵͣ»
2.²¿·Ö³§ÉÌÔÚÖÇÄÜÓ²¼þµÄÉãÏñÍ·°²×°·½Ïò¡¢¸öÊý¡¢ÀàÐͺÍÊÖ»úÓнϴó²îÒì¡£
ËùÒÔÔÚÊÊÅäÎÊÌâÉÏ£¬ÖÇÄÜÓ²¼þÐèÒªµ¥¶À½øÐÐÑéÖ¤ÌÖÂÛ£¬ÏÂÃæ¾ÍΪ´ó¼Ò½øÐÐÏêϸ½âÎö¡£
ÊÓÆµ²É¼¯ÊÊÅä
²É¼¯·½Ê½ÊÊÅä
ÈÚÔÆÊµÊ±ÒôÊÓÆµ SDK ÉãÏñÍ·²É¼¯Êý¾ÝÌṩ Texture ºÍ YUV(NV21)
Á½ÖÖ·½Ê½£¬Í¨¹ýÉèÖò»Í¬²É¼¯·½Ê½¿ÉÒÔ»ñÈ¡µ½ Texture ID »ò byte
ÔʼÊÓÆµÁ÷Êý¾Ý¡£Texture ID
ÓÃÀ´±íʾͼÏñÕÕÆ¬»òÕßһϵÁеÄÊý¾Ý£¬Ê¹ÓÃÎÆÀí¿ÉÒÔʹÎïÌåÕ¹ÏÖ¸ü¶àµÄϸ½Ú£¬YUV ÔòÊÇÉãÏñÍ·²É¼¯³öµÄ NV21
¸ñʽÊý¾Ý¡£
YUV
ÊÇÒ»ÖÖ²ÊÉ«±àÂë¸ñʽ£¬¿ÉÒÔ½«ÆäÀí½âΪÔʼÊÓÆµÁ÷Êý¾Ý£¬Ö÷ÒªÓÃÔÚÊÓÆµ¡¢Í¼Ðδ¦ÀíÁ÷Ë®ÏßÖÐ(pipeline)¡£Ïà¶ÔÓÚ
RGB ÑÕÉ«¿Õ¼ä£¬Éè¼Æ YUV µÄÄ¿µÄ¾ÍÊÇΪÁ˱àÂë¡¢´«Êä¸ü·½±ã£¬¼õÉÙ´ø¿íÕ¼ÓúÍÐÅÏ¢³ö´í¡£
ÈÚÔÆÊµÊ±ÒôÊÓÆµ SDK ÖÐĬÈϲÉÓà Texture ·½Ê½²É¼¯£¬µ±±¾¶ËʹÓø÷½Ê½²É¼¯Ê±£¬±àÂëÆ÷ĬÈϽ«Ê¹ÓÃ
android.media.MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface(0x7F000789)
ÑÕÉ«¿Õ¼ä½øÐбàÂ룬Èç¹û¶Ô¶Ë²»Ö§³Ö¸ÃÑÕÉ«¿Õ¼äµÄÇé¿öÏ£¬¿ÉÄܻᵼÖ½âÂ뻨ÆÁ»òÕß½âÂëʧ°ÜÎÊÌ⣬¿ª·¢Õß¿ÉÒÔÔÚ¼ÓÈë·¿¼ä֮ǰµ÷ÓÃ
RongRTCConfig.Builder#enableVideoTexture ·½·¨ÉèÖÃÊÇ·ñ²ÉÓÃ
texture ·½Ê½²É¼¯¡£
ÉãÏñÍ·ÊÊÅä
ÔÚÓö¼ûÖÇÄÜÓ²¼þÉãÏñÍ·°²×°·½Ïò¡¢¸öÊý¡¢ÀàÐ͵¼ÖµÄÊÓÆµ²É¼¯ÎÊÌâʱ£¬¿ÉÒÔͨ¹ýÈÚÔÆÊµÊ±ÒôÊÓÆµSDKÖÐ
RongRTCConfig.Builder ÀàµÄÉèÖ÷½·¨
setCameraDisplayOrientation ºÍ
setCustomizedCameraParameter£¬ÐÞ¸ÄÉãÏñ»ú²É¼¯µÄ½Ç¶ÈºÍÖ±½ÓÉèÖøø
android.hardware.Camera#setParameters(Parameters
params) ÅäÖÃÐÅÏ¢¡£
ÈÚÔÆÊµÊ±ÒôÊÓÆµ SDK »áͨ¹ý
android.hardware.Camera.getNumberOfCameras()
·½·¨»ñÈ¡µ½¿ÉÓõÄÉãÏñÍ·
ID£¬Ä¬ÈÏ»á´ò¿ªÇ°ÖÃÉãÏñÍ·£¬¶ÔÓÚÐèÒª´ò¿ªÓãÑÛ¾µÍ·»òÕß´îÔØ¶à¸öÉãÏñÍ·Ó²¼þÉ豸³¡¾°ÖУ¬¿ÉÒÔʹÓÃ
RongRTCCapture.getInstance().startCameraCapture
´ò¿ª¡¢Çл»£»
RongRTCCapture.getInstance().switchCamera Ö¸¶¨ ID
µÄÉãÏñÍ·¡£
µ±ÖÇÄÜÓ²¼þ´øÓÐ USB ÉãÏñÍ·»ò USB
Âó¿Ë·ç£¬²¢ÇÒ°²×¿ÏµÍ³ÎÞ·¨Ê¶±ðÆäÍâÖÃÉ豸ʱ£¬µ÷ÓÃÉÏÎÄ·½·¨½«ÎÞ·¨´ò¿ªÓ²¼þÉ豸£¨¶Ô¶Ë½«ÎÞ·¨¹Û¿´±¾¶ËÊÓÆµ£©£¬ÕâÖÖÇé¿ö£¬ÍƼöʹÓÃÈÚÔÆÊµÊ±ÒôÊÓÆµ
SDK ·¢²¼×Ô¶¨ÒåÊÓÆµÁ÷¹¦ÄÜ¡£
¶þ¡¢ÊÓÆµ±à½âÂëÊÊÅä
ÈÚÔÆÒôÊÓÆµ SDK Ö§³Ö H.264 ±à½âÂëÆ÷£¬ÒÔ¸ßѹËõ¡¢¸ßÖÊÁ¿ºÍÖ§³Ö¶àÖÖÍøÂçµÄÁ÷ýÌå´«ÊäÖø³Æ£¬Í¬Ê±Ò²ÊÇ
MPEG-4 µÚÊ®²¿·Ö£¬ÊÇÓÉITU-TÊÓÆµ±àÂëר¼Ò×飨VCEG£©ºÍISO/IEC¶¯Ì¬Í¼Ïñר¼Ò×飨MPEG£©ÁªºÏ×é³ÉµÄÁªºÏÊÓÆµ×飨JVT£¬Joint
Video Team£©Ìá³öµÄ¸ß¶ÈѹËõÊý×ÖÊÓÆµ±à½âÂëÆ÷±ê×¼£¬Õâ¸ö±ê׼ͨ³£±»³ÆÖ®ÎªH.264/AVC¡£
ʹÓÃÈÚÔÆÒôÊÓÆµ SDK
ʱ£¬¿ÉÒÔÉèÖñàÂëÆ÷ÑÕÉ«¿Õ¼ä¡¢±àÂëµÈ¼¶¡¢±àÂëÖ¡ÂÊ¡¢±àÂë¹Ø¼üÖ¡¼ä¸ôʱ¼ä¡¢±àÂëÆ÷ÂëÂÊ¿ØÖÆÄ£Ê½µÈÅäÖÃÐÅÏ¢£¬ÒÔ½â¾öÉ豸±à½âÂëµ¼ÖµÄÎÊÌâ¡£
±àÂëÑÕÉ«¿Õ¼ä
ÈÚÔÆ RTCLib SDK ÖÐÉãÏñÍ·²É¼¯Êý¾Ý²ÉÓõÄÑÕÉ«¸ñʽΪ NV21£¬ËüÊôÓÚ YUV420
¸ñʽ£¬Èç¹ûÖÇÄÜÓ²¼þ³§É̶¨ÖÆÁËÑÕÉ«¿Õ¼ä£¬»áµ¼ÖÂÈÚÔÆ SDK
ÄÚ²¿´¦ÀíÑÕÉ«¿Õ¼äÂß¼ºÍÉ豸ËùÖ§³ÖÑÕÉ«¿Õ¼ä²»·ûºÏ£¬³öÏÖ±àÂ뱨´í¡¢¶Ô¶Ë½âÂëʧ°Ü¡¢¶Ô¶Ë¹Û¿´»¨ÆÁµÈÏÖÏó¡£Óö¼û´ËÎÊÌ⣬¿ª·¢Õß¿ÉÒÔʹÓÃ
RongRTCConfig.Builder#setHardWareEncodeColor
·½·¨Ð޸ıàÂëÑÕÉ«¿Õ¼äÀ´½â¾ö¡£
±àÂëµÈ¼¶
ÓÉÓÚÊÓÆµ±àÂëºóÏÔʾµÄÊý¾ÝÖÊÁ¿Æ«µÍ£¬ÎªÁ˵÷ÕûÖÊÁ¿£¬¾ÍÐèÒªÉèÖñàÂëµÈ¼¶ level¡¢profile¡£ÈÚÔÆ
SDK ĬÈÏʹÓÃ
android.media.MediaCodecInfo.CodecProfileLevel.AVCProfileBaseline
£¬¿ª·¢ÕßÒ²¿ÉÒÔͨ¹ý RongRTCConfig.Builder#enableHardWareEncodeHighProfile
·½·¨½«ÆäÉèÖÃΪ
android.media.MediaCodecInfo.CodecProfileLevel.AVCProfileHigh£¬AVCProfileHigh
Ëù¶ÔÓ¦µÄ±àÂëµÈ¼¶Îª
android.media.MediaCodecInfo.CodecProfileLevel.AVCLevel3£¬AVCProfileHigh
Ïà¶Ô AVCProfileBaseline
²ÉÓÃÁ˸ü¸ß¼¶µÄѹËõÌØÐÔ£¬ÕâÒâζ×ŶԶËÔÚ½âÂëʱҲÐèÒªÓ²¼þ¸ü¸ßµÄÐÔÄÜ£¬²ÉÓÃ
AVCProfileBaseline ÊÇÒòΪÆä¼æÈÝÐÔ¸ü¸ß¡£°²×¿Ô´ÂëÖÐ 7.0 °æ±¾Ö®Ç°Ä¬ÈÏʹÓÃ
AVCProfileBaseline £¬7.0 ²ÅÐÞ¸ÄÁ˸ÃÂß¼¡£
°²×¿ 6.0 Ô´Âë(android/6.0.1_r16/xref/frameworks/av/media/libstagefright/ACodec.cpp)Ƭ¶ÎÈçÏ£º
°²×¿ 7.0 Ô´Âë(android/7.0.0_r31/xref/frameworks/av/media/libstagefright/ACodec.cpp)´úÂëÆ¬¶ÎÈçÏ£º
±àÂëÂëÂÊ¿ØÖÆÄ£Ê½
¶ÔÓÚÐèÒª´«Êä¸ßÖÊÁ¿ÊÓÆµÁ÷µÄ³¡¾°£¬³ýÁËÉèÖ÷ֱæÂÊ¡¢Ö¡ÂÊ¡¢ÂëÂÊÌá¸ßÊÓÆµÖÊÁ¿Í⣬»¹¿ÉÒÔ¿ØÖƱàÂëÂëÂÊ£¬ÈÚÔÆ
SDK ĬÈÏʹÓà CBR £¬¿ª·¢Õß¿ÉÒÔʹÓÃÒôÊÓÆµ SDK µÄ RongRTCConfig.Builder#setHardWareEncodeBitrateMode
·½·¨ÐÞ¸ÄģʽÉèÖ᣸ÃÊôÐÔ°²×¿ 5.0 ²Å¿ªÊ¼Ö§³Ö²ÎÊýÉèÖã¬ÒÔÏÂÊǶÔÈýÖÖģʽµÄ½éÉÜ£º
±àÂë¹Ø¼üÖ¡¼ä¸ôʱ¼ä
H.264 ±ê×¼ÖÐÓÐ Instantaneous Decoding Refresh£¨IDR£¬¼´Ê±½âÂëˢУ¬ÒÔϳÆ
I Ö¡£©¡£H.264 ͼÏñÒÔÐòÁÐΪµ¥Î»½øÐÐ×éÖ¯£¬Ò»¸öÐòÁÐÊÇÒ»¶ÎͼÏñ±àÂëºóµÄÊý¾ÝÁ÷£¬¸ÃÐòÁÐÒÔ I
Ö¡¿ªÊ¼£¬µ½ÏÂÒ»¸ö I Ö¡½áÊø¡£Á½¸ö I Ö¡Ö®¼äΪ¶à¸ö P Ö¡(Predictive-frame)»ò B
Ö¡(Bi-directional predicted frames)£¬ÉèÖõıàÂë¹Ø¼üÖ¡¼ä¸ôʱ¼ä¾ÍÊÇ
IDR ¼ä¸ôʱ¼ä¡£
I Ö¡£ºÍ¨³£ÊÇÿ¸ö GOP(Group Of Picture) (MPEG ËùʹÓõÄÒ»ÖÖÊÓÆµÑ¹Ëõ¼¼Êõ)
µÄµÚÒ»¸öÖ¡£¬I ֡ͼÏñ²ÉÓÃÖ¡ÄÚ±àÂ뷽ʽ£¬¼´Ö»ÀûÓÃÁ˵¥Ö¡Í¼ÏñÄڵĿռäÏà¹ØÐÔ£¬¶øÃ»ÓÐÀûÓÃʱ¼äÏà¹ØÐÔ¡£I
֡ʹÓÃÖ¡ÄÚѹËõ£¬²»Ê¹ÓÃÔ˶¯²¹³¥£¬ÓÉÓÚ I Ö¡²»ÒÀÀµÆäËüÖ¡£¬ËùÒÔÊÇËæ»ú´æÈ¡µÄÈëµã£¬Í¬Ê±ÊǽâÂëµÄ»ù×¼Ö¡¡£I
Ö¡Ö÷ÒªÓÃÓÚ½âÂëÆ÷µÄ³õʼ»¯£¬ÒÔ¼°½ÚÄ¿µÄÇл»ºÍ²åÈ룬I ֡ͼÏñµÄѹËõ±¶ÊýÏà¶Ô½ÏµÍ£¬I
֡ͼÏñÊÇÖÜÆÚÐÔ³öÏÖÔÚͼÏñÐòÁÐÖе쬳öÏÖÆµÂÊ¿ÉÓɱàÂëÆ÷Ñ¡Ôñ£¬I ֡ѹËõ¿ÉÈ¥µôÊÓÆµµÄ¿Õ¼äÈßÓ࣬¶ø B¡¢P
ÔòÊÇΪÁËÈ¥µôʱ¼äÈßÓà¡£
P
Ö¡£ºÏòǰ²Î¿¼Ö¡£¨µÚÒ»Ö¡Ö®ºóµÄÖ¡£¬Ö»´æÔÚºÍǰһ֡µÄ²îÒ죬¿ÉÒÔÌá¸ßѹËõЧÂʺÍͼÏñÖÊÁ¿£©£¬Ñ¹Ëõʱֻ²Î¿¼Ç°Ò»¸öÖ¡£¬ÊôÓÚÖ¡¼ä±àÂ뷽ʽ£¨¼´Í¬Ê±ÀûÓÃÁ˿ռäºÍʱ¼äÉϵÄÏà¹ØÐÔ£©£¬P
֡ͼÏñÖпÉÒÔ°üº¬Ö¡ÄÚ±àÂëµÄ²¿·Ö£¬¼´ P Ö¡ÖеÄÿһ¸öºê¿é¿ÉÒÔÊÇǰÏòÔ¤²â£¬Ò²¿ÉÒÔÊÇÖ¡ÄÚ±àÂ룻Ëü²Î¿¼Ç°Ò»¸ö
B Ö¡»ò I Ö¡À´½âÂë³öÒ»ÕÅÍêÕûµÄͼÏñ¡£
B
Ö¡£ºË«Ïò²Î¿¼Ö¡£¬Ñ¹Ëõ²Î¿¼Ç°Ò»Ö¡ºÍºóÒ»Ö¡£¬ÊôÓÚÖ¡¼äѹËõ¼¼Êõ¡£Ñ¹Ëõ±È¸ß£¬Èç¹ûÍøÂç²»ºÃ£¬¶ÔʵʱҪÇó¸ßµÄ»°»áÒ»Ö±µÈ´ý£¬ÊµÊ±»¥¶¯Ö±²¥Ò»°ã²»Ê¹Óã¬ÖµµÃ×¢ÒâµÄÊÇ£¬ÓÉÓÚ
B ֡ͼÏñ²ÉÓÃÁËδÀ´Ö¡×÷Ϊ²Î¿¼£¬Òò´Ë MPEG-2 ±àÂëÂëÁ÷ÖÐͼÏñÖ¡µÄ´«Êä˳ÐòºÍÏÔʾ˳ÐòÊDz»Í¬µÄ¡£
ÒòΪ H.264 ²ÉÓÃÁ˶àÖ¡Ô¤²â£¬ËùÒÔ I Ö¡Ö®ºóµÄ PÖ¡¿ÉÄÜ»á²Î¿¼ I
֮֡ǰµÄÖ¡£¬ÕâʹµÃÔÚËæ»ú·ÃÎʵÄʱºò²»ÄÜÒÔÕÒµ½ I Ö¡×÷Ϊ²Î¿¼Ìõ¼þ£¬ÒòΪ¼´Ê¹ÕÒµ½ÁË I Ö¡£¬I
Ö¡Ö®ºóµÄÊý¾ÝÒ²ÓпÉÄܽⲻ³öÊý¾Ý£¬¶øIDR Ö¡¾ÍÊÇÒ»ÖÖÌØÊâµÄ I Ö¡£¨ÕâÒ»Ö¡Ö®ºóµÄËùÓвο¼Ö¡Ö»»á²Î¿¼IDR£¬¶ø²»»á²Î¿¼ÆäËûÇ°ÃæµÄÖ¡£©¡£ÔÚ½âÂëÆ÷ÖУ¬Ò»µ©ÊÕµ½
IDR Ö¡£¬¾Í»áÁ¢¼´ÇåÀí²Î¿¼Ö¡»º³åÇø£¬²¢½« IDR Ö¡×÷Ϊ±»²Î¿¼Ö¡¡£
ÈÚÔÆ SDK ÖйؼüÖ¡¼ä¸ôʱ¼äĬÈÏΪ 100 Ã룬¿ª·¢Õß¿ÉÒÔͨ¹ý
RongRTCConfig.Builder#setHardWareEncodeKeyFrameInterval
·½·¨Ð޸ļä¸ôʱ¼ä£¬Èç¹û¸ÃÖµÉèÖùýС£¬»á¼Ó´óÍøÂçÁ÷Á¿ºÍ±à½âÂëѹÁ¦£»Èç¹û¹ý´ó£¬ÔÚÍøÂçÓв¨¶¯Çé¿öÏ£¬Í¼ÏñÖÊÁ¿»áϽµ¡£ÒÔÉϾÍÊÇÈÚÔÆÔÚʵʱÒôÊÓÆµ
SDK ¶ÔÖÇÄÜÓ²¼þÊÓÆµÊÊÅä·½ÃæµÄһЩ¾Ñ飬ϣÍûÄܶԿª·¢ÕßÅóÓÑÃÇÀí½âÖÇÄÜÓ²¼þµÄÊÊÅäÓÐËù°ïÖú¡£
2020Äê07ÔÂ13ÈÕ ÓÚÉϺ£
°æÈ¨×÷Æ· δ¾Ðí¿É ÇëÎð×ªÔØ ¡¡