{"id":18340238,"url":"https://github.com/eafy/react-native-rtmp-player-jm","last_synced_at":"2025-04-06T05:32:29.460Z","repository":{"id":57339665,"uuid":"209486772","full_name":"Eafy/react-native-rtmp-player-jm","owner":"Eafy","description":"Jimi Video Player for RTMP SDK modules and view for React Native(Android \u0026 IOS), support react native 0.57+. ","archived":false,"fork":false,"pushed_at":"2021-10-27T02:20:08.000Z","size":59510,"stargazers_count":9,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-18T13:14:32.965Z","etag":null,"topics":["jimi","jm","react-native","react-native-rtmp-player-jm","rnjimirtmpplayer","rtmp"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Eafy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-09-19T07:11:44.000Z","updated_at":"2024-09-05T12:10:24.000Z","dependencies_parsed_at":"2022-09-04T14:23:17.034Z","dependency_job_id":null,"html_url":"https://github.com/Eafy/react-native-rtmp-player-jm","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eafy%2Freact-native-rtmp-player-jm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eafy%2Freact-native-rtmp-player-jm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eafy%2Freact-native-rtmp-player-jm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eafy%2Freact-native-rtmp-player-jm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Eafy","download_url":"https://codeload.github.com/Eafy/react-native-rtmp-player-jm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247440696,"owners_count":20939223,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jimi","jm","react-native","react-native-rtmp-player-jm","rnjimirtmpplayer","rtmp"],"created_at":"2024-11-05T20:21:46.533Z","updated_at":"2025-04-06T05:32:28.749Z","avatar_url":"https://github.com/Eafy.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# react-native-rtmp-player-jm [![npm version](https://img.shields.io/npm/v/react-native-rtmp-player-jm.svg?style=flat)](https://www.npmjs.com/package/react-native-rtmp-player-jm)\n\nJimi RTMP Player SDK modules and view for React Native(Android \u0026 IOS), support react native 0.57+\n\n![Sample](https://raw.githubusercontent.com/Eafy/react-native-rtmp-player-jm/master/images/screenShot.png)\n\n### Environments 环境要求\n1.JS\n- node: 8.0+\n\n2.Android\n- Android SDK: api 28+\n- gradle: 4.5\n- Android Studio: 3.1.3+\n\n3.IOS\n- XCode: 9.0+\n\n\n### Install 安装\n#### 使用 npm 源\nnpm install react-native-rtmp-player-jm --save\n\n### 原生模块导入\n\n#### Android Studio\n`react-native link react-native-rtmp-player-jm`\n\n#### IOS/Xcode\n1、方式一：`react-native link react-native-rtmp-player-jm`\n2、方式二：\nPodfile 增加\n```\n  pod 'React', :path =\u003e '../node_modules/react-native', :subspecs =\u003e [\n    'Core',\n    'CxxBridge',\n    'DevSupport', \n    'RCTText',\n    'RCTNetwork',\n    'RCTWebSocket', \n    'RCTAnimation'\n  ]\n  pod 'yoga', :path =\u003e '../node_modules/react-native/ReactCommon/yoga'\n  pod 'DoubleConversion', :podspec =\u003e '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'\n  pod 'glog', :podspec =\u003e '../node_modules/react-native/third-party-podspecs/glog.podspec'\n  pod 'Folly', :podspec =\u003e '../node_modules/react-native/third-party-podspecs/Folly.podspec'\n\n  pod 'react-native-rtmp-player-jm', :podspec =\u003e '../node_modules/react-native-rtmp-player-jm/ios/react-native-rtmp-player-jm.podspec'\n```\n\n### Usage 使用方法\n\n    import { Platform, NativeModules, NativeEventEmitter } from 'react-native';\n    import { JMRTMPMonitorView} from 'react-native-rtmp-player-jm';\n    const { JMRTMPPlayerManager } = NativeModules;\n\n\n#### JMRTMPMonitorView Props 属性\n| Prop                    | Type  | Default  | Description\n| ----------------------- |:-----:| :-------:| -------\n| image                   | require  | null     | Monitor视图默认展示图\n\n#### JMRTMPPlayerManager Methods\n| Method                    | Listener | Result | Description\n| ------------------------- | -------  | ------ | -------\n| initialize(String key, String secret, String imei) | null | 初始化成功 | RTMP SDK内部初始化\n| deInitialize() | null | null | RTMP SDK 释放(解初始化)\n| startPlayLive() | kOnStreamPlayerPlayStatus | 见回调说明 | 开始播放\n| startPlay(String url) | kOnStreamPlayerPlayStatus | 见回调说明 | 使用RTMP URL进行播放\n| startPlayback(Array fileNameArray) | kOnStreamPlayerReceiveDeviceData | 见回调说明 | 回放文件，参数为文件名称字符串列表\n| stopPlay() | null | null | 停止播放\n| startTalk() | kOnStreamPlayerTalkStatus | 见回调说明 | 开始对讲，iOS会自动申请对讲权限，Android需要自己先申请权限\n| stopTalk() | kOnStreamPlayerTalkStatus | 见回调说明 | 停止对讲\n| stop() | null | null | 停止内部所有功能（播放、对讲，网络请求）\n| reStart() | null | null | 重启网关、Web服务\n| Promise switchCamera(bool isFront, bool bAuto, resolver, rejecter) | Promise | bAuto，默认请填true，成功返回url，否则错误码及错误信息，比如：{ [Error: 设备不在线] code: '228'} | 切换摄像头\n| Promise snapshot(String filePath) | Promise | 成功返回保存后的图片路径，否则错误码及错误信息，比如：{ [Error: Failed to do snapshot] code: '-1'} | 视频截图，filePath：需要保存图片的绝对路径，必须以\".png\"结尾，code:-1，截图失败，-2:保存图片失败，-3:格式无效\n| startRecording(String filePath) | kOnStreamPlayerRecordStatus | 见回调说明 | mp4视频录制，filePath：需要保存视频的绝对路径(iOS默认只录制在沙盒，必须以\".mp4\"结尾)\n| stopRecording() | kOnStreamPlayerRecordStatus | 见回调说明 | 停止视频录制\n| Promise isRecording(resolve, rejecter) | Promise | true：正在录制；false：未录制 | 视频是否在录制\n| Promise getRecordingDuration(resolve, rejecter) | Promise | 0 | 视频录制的时长(毫秒)\n| Promise sendCustomRequest(Map paraDic, resolve, rejecter) | Promise | 0 | 发送自定义指令(请求)\n| setMute(bool mute) | null | null | 设置静音\n| Promise getMute() | Promise | true：静音；false：未静音 | 获取静音状态\n| Promise videoSize() | Promise | {\"width\": 0, \"hieght\": 0} | 获取视频宽高，只有视频开始且显示画面之后才有效\n\n#### JMRTMPPlayerManager Listener:- kOnStreamPlayerPlayStatus\n| Field                    | Must Exist | Type | Value | Description\n| ----------------------- | ------- | ------- | ------ | -------\n| status | YES | int | 1~14, \"videoStatusPrepare\": 正在准备播放; \"videoStatusStart\": 正在播放; \"videoStatusStop\": 停止播放；\"videoStatusErrURLGet\": 获取URL失败；\"videoStatusErrURLInvalid\": URL无效；\"videoStatusErrOpenFail\": 打开URL失败；\"videoStatusErrOpenTimeout\": 打开URL超时；\"videoStatusErrPlayAbnormal\": 播放异常或设备停止推流(会自动停止播放器)；\"videoStatusErrHttpTimeout\": http请求超时；\"videoStatusErrHttpHost\": 域名或IP错误；\"videoStatusErrHttpParameter\": http参数错误；\"videoStatusErrServerData\": 服务器数据解析异常；\"videoStatusErrDeviceReplayFail\": 设备回复“失败”；\"videoStatusErrNetworkAnomaly\": 网络异常；| 播放状态\n| errCode | NO | int | \u003e videoStatusStop，或其他服务器返回错误码| 播放错误码\n| errMsg | NO | int | 错误提示语 | 错误提示语，仅当 status===videoStatusErrURLGet 时才有\n\n#### Code:- PlayStatus\n| Code                    | Description\n| ----------------------- | -------\n| 0 | 未启动或未识别的状态\n| 1 | 正在准备播放\n| 2 | 开始或正在播放\n| 3 | 播放结束\n| 4 | 获取URL失败\n| 5 | URL无效\n| 6 | 打开URL失败\n| 7 | 打开URL超时\n| 8 | 播放异常或设备停止推流(会自动停止播放器)\n| 9 | http请求超时\n| 10 | 域名或IP错误\n| 11 | http参数错误\n| 12 | 服务器数据解析异常\n| 13 | 设备回复“失败”及拒绝响应\n| 14 | 网络异常\n\n#### JMRTMPPlayerManager Listener:- kOnStreamPlayerTalkStatus\n| Field                    | Must Exist | Type | Value | Description\n| ----------------------- | ------- | ------- | ------ | -------\n| status | YES | int | 1~14, \"talkStatusPrepare\": 进行对讲准备工作; \"talkStatusStart\": 对讲已开始; \"talkStatusStop\": 对讲已停止；\"talkStatusErrURLGet\": 获取URL失败；\"talkStatusErrInit\": 初始化对讲URL失败；\"talkStatusErrTalking\": 正在对讲不能再次开始；\"talkStatusErrSend\": 发送音频数据失败；\"talkStatusErrHttpTimeout\": http请求超时；\"talkStatusErrHttpHost\": 域名或IP错误；\"talkStatusErrHttpParameter\": http参数错误；\"talkStatusErrServerData\": 服务器数据解析异常；\"talkStatusErrDeviceReplayFail\": 设备回复“失败”；\"talkStatusErrNetworkAnomaly\": 网络异常；\"talkStatusErrAuthority\": 无麦克风权限 | 播放状态\n| errCode | NO | int | \u003e talkStatusStop，或其他服务器返回错误码| 播放错误码\n| errMsg | NO | int | 错误提示语 | 错误提示语，仅当 status===talkStatusErrURLGet 时才有\n\n#### Code:- TalkStatus\n| Code                    | Description\n| ----------------------- | -------\n| 0 | 未启动或未识别的状态\n| 1 | 进行对讲准备工作\n| 2 | 对讲已开始\n| 3 | 对讲已停止\n| 4 | 获取URL失败\n| 5 | 初始化对讲URL失败\n| 6 | 正在对讲不能再次开始\n| 7 | 发送音频数据失败\n| 8 | http请求超时\n| 9 | 域名或IP错误\n| 10 | http参数错误\n| 11 | 服务器数据解析异常\n| 12 | 设备回复“失败”，即表示设备端拒绝对讲或对讲初始化异常\n| 13 | 网络异常\n| 14 | 无麦克风权限\n\n#### JMRTMPPlayerManager Listener:- kOnStreamPlayerRecordStatus\n| Field                    | Must Exist | Type | Value | Description\n| ----------------------- | ------- | ------- | ------ | -------\n| status | YES | int | 1~7, \"recordStatusStart\": 开始录制; \"recordStatusComplete\": 录制完成; \"recordStatusErrRecording\": 正在录制；\"recordStatusErrFail\": 录制失败；\"recordStatusErrSave\": 保存失败；\"recordStatusErrPath\": 无效路径；\"recordStatusErrAuthority\": 无权限； | 录制状态\n| filePath | YES | string | 录制视频的保存路径\n\n#### Code:- RecordStatus\n| Code                    | Description\n| ----------------------- | -------\n| 0 | 未启动或未识别的状态\n| 1 | 开始录制\n| 2 | 录制完成\n| 3 | 正在录制\n| 4 | 录制失败\n| 5 | 保存失败\n| 6 | 无效路径\n| 7 | 无权限\n\n#### JMRTMPPlayerManager Listener:- kOnStreamPlayerReceiveFrameInfo\n| Field                    | Must Exist | Type | Value | Description\n| ----------------------- | ------- | ------- | ------ | -------\n| width | YES | int | 0 | 视频宽度\n| height | YES | int | 0 | 视频高度\n| videoBps | YES | int | 0 | 视频每秒码率\n| audioBPS | YES | int | 0 | 音频每秒高度\n| timestamp | YES | int | 0 | 视频时间戳\n| totalFrameCount | YES | int | 0 | 视频每秒帧总数\n| onlineCount | YES | int | 0 | 设备端在线的人数\n\n#### JMRTMPPlayerManager Listener:- kOnStreamPlayerReceiveDeviceData\n| Field                    | Must Exist | Type | Value | Description\n| ----------------------- | ------- | ------- | ------ | -------\n| undefine | YES | undefine | null | 回复内容由设备端决定，一般是json字符串或字符串\n\n#### Code:- DeviceData\n| Code                    | Description\n| ----------------------- | -------\n| 0x3 | 设备端SDK信息\n| 0x5 | 响应客户端SDK释放请求\n| 0x10 | 在线人数信息\n| 0x108 | 单个回放文件结尾\n| 0x109 | 所有回放文件结束\n\n\n#### Demo示例\n[https://github.com//Eafy/react-native-rtmp-player-jm/tree/master/example/App.js](example/App.js)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feafy%2Freact-native-rtmp-player-jm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feafy%2Freact-native-rtmp-player-jm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feafy%2Freact-native-rtmp-player-jm/lists"}