kickflip / kickflip-android-sdk Goto Github PK
View Code? Open in Web Editor NEWKickflip Android SDK - Live Video Streaming to the Cloud
Home Page: https://kickflip.io
License: Apache License 2.0
Kickflip Android SDK - Live Video Streaming to the Cloud
Home Page: https://kickflip.io
License: Apache License 2.0
I'd be neat if the app checked for secrets in the resources directory as an alternative to setting it in code, as this would allow me to use the BroadcastActivity directly from the the launcher, as there would be no need to call setup() with the secrets.
I'd suggest a keys.xml or a secrets.xml with kickflipClientID and kickflipClientSecret entries.
I checked the session config code, it does not allow stereo audio. Why is that. What would be the easiest way to enabled stereo audio?
I tried to update the check in SessionConfig to allow NumChannels as 2, but the audio breaks and there is lot of echo in the resuting audio.
This is not a priority for 1.0.0, maybe for 1.0.* or 1.., just writing it down here so I don't forget:
Can we have the very first chunk be 1-5 seconds, rather than the standard 10, just so that the user spends less time in the "Buffering" state? It shouldn't have any other real effect, it's just a minor annoyance for the person filming to the the orange rather than the red. "Buffering" seems like a dirty word.
Hi, similar issue to: #46
I'd like to cancel my free trial, but I can't get a hold of anyone to do so.
@mjshiggins maybe you can help?
Excuse me, that I write here, but is not responding technical support for a month. How do I delete my account or a credit card because I have already 2 months did not use the service, but my money is debited monthly.
thanks a lot
I have a 20/30 second latency between when my stream launches in my phone, and what I see on Kickflip. This is by implementing the simple startbroadcastactivity with a default config.
Is this latency set by the servers on the Kickflip side, or can I affect this by configuring the broadcastactivity on the Android side?
When loading the video stream in a browser we get this error: "No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost:44300' is therefore not allowed access."
We use the videojs javascript library with HLC support to view it, and we also use a Flash fallback scenario.
Is it possible to add the "Access-Control-Allow-Origin" header for 2 sites for our client? Or is there any other solution?
I've sent emails and have just received auto-replies.
I would like to know how to update payment information and perform other basic account maintenance features.
We have other custom development items to discuss.
Thanks,
Dennis
I know that kickflip use mediacodec to encode h264 and acc, it is very efficient. But I do not know about decoding. Does kickflip use hardware decoding to play video?
Why the android limitation of 4.3+. Media Codec is available since 4.1 and HLS support in Android is there since Honeycomb?
It's possible to remove this huge dependency?
Hi, I want to know how I can set up my project with the SDK downloaded locally.
Would it be possible to generate HLS format for live streaming and MP4 streaming for archival on phone simulaneously?
My use case is to generate HLS format for live streaming and using the MP4 on phone for offline viewing (in case use opts to)
Developer won't respond to emails and they have no option on their portal to cancel a trial account. I'm assuming once the trial ends, we will be charged. Zero communication, zero support from us. This is the only method I found to contact and warn others.
05-04 16:30:36.696: I/FFmpegMuxer(19003): PrepareAVFormatContext for path /storage/emulated/0/MySampleApp/93482c6f-ee6d-4444-8842-e807f28043f4/index.m3u8
05-04 16:30:36.701: D/audio_hw_primary(182): out_set_parameters: enter: usecase(1: low-latency-playback) kvpairs: routing=2
05-04 16:30:36.702: D/audio_hw_primary(182): select_devices: out_snd_device(0: none) in_snd_device(46: camcorder-mic)
05-04 16:30:36.702: D/msm8974_platform(182): platform_send_audio_calibration: sending audio calibration for snd_device(46) acdb_id(61)
05-04 16:30:36.702: D/(182): Failed to fetch the lookup information of the device 0000003D
05-04 16:30:36.702: E/ACDB-LOADER(182): Error: ACDB AudProc vol returned = -19
05-04 16:30:36.702: D/audio_hw_primary(182): enable_snd_device: snd_device(46: camcorder-mic)
05-04 16:30:36.707: D/audio_hw_primary(182): enable_audio_route: apply and update mixer path: audio-record
05-04 16:30:36.729: I/OMX-VENC(182): open Color conv for RGBA888 W: 1280, H: 720
05-04 16:30:36.755: E/OMX-VENC(182): VIDIOC_REQBUFS CAPTURE_MPLANE Failed
05-04 16:30:36.782: E/AndroidRuntime(19003): FATAL EXCEPTION: CameraEncoder
05-04 16:30:36.782: E/AndroidRuntime(19003): Process: io.kickflip.sample, PID: 19003
05-04 16:30:36.782: E/AndroidRuntime(19003): java.nio.ReadOnlyBufferException
05-04 16:30:36.782: E/AndroidRuntime(19003): at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:354)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.FFmpegMuxer.captureH264MetaData(FFmpegMuxer.java:292)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.FFmpegMuxer.handleWriteSampleData(FFmpegMuxer.java:206)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.FFmpegMuxer.writeSampleData(FFmpegMuxer.java:183)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.AndroidEncoder.drainEncoder(AndroidEncoder.java:100)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.CameraEncoder.handleFrameAvailable(CameraEncoder.java:433)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.CameraEncoder.access$200(CameraEncoder.java:27)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.CameraEncoder$EncoderHandler.handleMessage(CameraEncoder.java:835)
05-04 16:30:36.782: E/AndroidRuntime(19003): at android.os.Handler.dispatchMessage(Handler.java:102)
05-04 16:30:36.782: E/AndroidRuntime(19003): at android.os.Looper.loop(Looper.java:135)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.CameraEncoder.run(CameraEncoder.java:610)
05-04 16:30:36.782: E/AndroidRuntime(19003): at java.lang.Thread.run(Thread.java:818)
05-04 16:30:36.784: W/ActivityManager(817): Force finishing activity io.kickflip.sample/io.kickflip.sdk.activity.BroadcastActivity
05-04 16:30:36.816: D/audio_hw_primary(182): select_devices: out_snd_device(2: speaker) in_snd_device(0: none)
05-04 16:30:36.816: D/msm8974_platform(182): platform_send_audio_calibration: sending audio calibration for snd_device(2) acdb_id(15)
05-04 16:30:36.816: D/audio_hw_primary(182): enable_snd_device: snd_device(2: speaker)
05-04 16:30:36.817: D/audio_hw_primary(182): enable_audio_route: apply and update mixer path: low-latency-playback
05-04 16:30:36.825: I/Process(19003): Sending signal. PID: 19003 SIG: 9
05-04 16:30:36.827: V/ActivityManager(817): Display changed displayId=0
05-04 16:30:36.838: I/ActivityManager(817): Config changes=480 {1.0 310mcc?mnc en_US ldltr sw360dp w360dp h567dp 480dpi nrml port finger -keyb/v/h -nav/h s.21}
05-04 16:30:36.849: I/InputReader(817): Reconfiguring input devices. changes=0x00000004
05-04 16:30:36.849: I/InputReader(817): Device reconfigured: id=4, name='touch_dev', size 1080x1920, orientation 0, mode 1, display id 0
05-04 16:30:36.852: I/OpenGLRenderer(817): Initialized EGL, version 1.4
05-04 16:30:36.875: W/InputDispatcher(817): channel '2c245e5a io.kickflip.sample/io.kickflip.sample.activity.MainActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
05-04 16:30:36.875: E/InputDispatcher(817): channel '2c245e5a io.kickflip.sample/io.kickflip.sample.activity.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
05-04 16:30:36.903: E/JavaBinder(817): !!! FAILED BINDER TRANSACTION !!!
05-04 16:30:36.903: E/JavaBinder(817): !!! FAILED BINDER TRANSACTION !!!
05-04 16:30:36.909: E/JavaBinder(817): !!! FAILED BINDER TRANSACTION !!!
05-04 16:30:36.909: I/ActivityManager(817): Restarting because process died: ActivityRecord{15468e9e u0 io.kickflip.sample/.activity.MainActivity t919}
05-04 16:30:36.913: E/JavaBinder(817): !!! FAILED BINDER TRANSACTION !!!
05-04 16:30:36.914: E/JavaBinder(817): !!! FAILED BINDER TRANSACTION !!!
05-04 16:30:36.915: W/ActivityManager(817): Exception when starting activity io.kickflip.sample/.activity.MainActivity
05-04 16:30:36.915: W/ActivityManager(817): android.os.TransactionTooLargeException
05-04 16:30:36.915: W/ActivityManager(817): at android.os.BinderProxy.transactNative(Native Method)
05-04 16:30:36.915: W/ActivityManager(817): at android.os.BinderProxy.transact(Binder.java:496)
05-04 16:30:36.915: W/ActivityManager(817): at android.app.ApplicationThreadProxy.scheduleLaunchActivity(ApplicationThreadNative.java:793)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:1157)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1257)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:1882)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1480)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStackSupervisor.resumeTopActivitiesLocked(ActivityStackSupervisor.java:2429)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1025)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:923)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:6441)
05-04 16:30:36.915: W/ActivityManager(817): at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:513)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2407)
05-04 16:30:36.915: W/ActivityManager(817): at android.os.Binder.execTransact(Binder.java:446)
05-04 16:30:36.918: W/InputDispatcher(817): channel '187a8098 io.kickflip.sample/io.kickflip.sdk.activity.BroadcastActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
05-04 16:30:36.918: E/InputDispatcher(817): channel '187a8098 io.kickflip.sample/io.kickflip.sdk.activity.BroadcastActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
05-04 16:30:36.920: W/CameraService(182): Disconnecting camera client 0xb608cb90 since the binder for it died (this pid 182)
05-04 16:30:36.920: E/OMXNodeInstance(182): !!! Observer died. Quickly, do something, ... anything...
05-04 16:30:36.921: E/Surface(182): queueBuffer: error queuing buffer to SurfaceTexture, -32
05-04 16:30:36.922: E/Camera3-OutputStream(182): returnBufferCheckedLocked: Stream 0: Error queueing buffer to native window: Broken pipe (-32)
05-04 16:30:36.922: E/Camera3-Device(182): Can't return buffer 0 for frame 75 to its stream: Broken pipe (-32)
05-04 16:30:36.922: E/Surface(182): queueBuffer: error queuing buffer to SurfaceTexture, -32
05-04 16:30:36.922: E/Camera3-OutputStream(182): returnBufferCheckedLocked: Stream 0: Error queueing buffer to native window: Broken pipe (-32)
05-04 16:30:36.922: E/Camera3-Device(182): Can't return buffer 0 for frame 76 to its stream: Broken pipe (-32)
05-04 16:30:36.922: E/Surface(182): queueBuffer: error queuing buffer to SurfaceTexture, -32
05-04 16:30:36.923: E/Camera3-OutputStream(182): returnBufferCheckedLocked: Stream 0: Error queueing buffer to native window: Broken pipe (-32)
05-04 16:30:36.923: E/Camera3-Device(182): Can't return buffer 0 for frame 77 to its stream: Broken pipe (-32)
05-04 16:30:36.934: I/WindowState(817): WIN DEATH: Window{187a8098 u0 io.kickflip.sample/io.kickflip.sdk.activity.BroadcastActivity}
I want to run one phone camera as live streaming source.
and second phone will see this live streaming as it destination.
Can you sdk accomplish this task?
Please tell me asap. I am waiting for your response. Its solution much needed.
Can you also release for armeabi-v7a?
I realize that armeabi should work on armeabi-v7a, but wouldnt it be lot slower? I do not have benchmark results though. Also officially Android 4.0+ only supports ARMV7 - http://android.stackexchange.com/questions/34958/what-are-the-minimum-hardware-specifications-for-android
So I guess releasing for armeabi-v7a should be the way going forward.
What would it take to get this supported added in to Kickflip?
I use the x86 VM to develop (so much faster than the emulator.. soooo much faster..), but unfortunately the project won't compile without x86 support:
Failure [INSTALL_FAILED_CPU_ABI_INCOMPATIBLE]
How much would it inflate the package to add this?
This snippet is suggested by the README of this repo:
@Override
public void onBroadcastLive(String watchUrl) {
Log.i("Kickflip", "This phone is live at " + watchUrl);
}
But I think that String is now a Stream object, so the @OverRide won't work and the project and the code won't compile. Simple fix, just gotta make sure the docs match the interface.
I know this isn't strictly related to kickflip but it's a pretty annoying problem...
My project depends on apache commons codec and I have
compile 'commons-codec:commons-codec:1.8'
in my build.gradle.
Kickflip is dependant on an AWS jar rather than a maven repo, and the jar also has commons codec. This means that gradle can't detect that my commons codec and the amazon one are the same and it gives:
com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/codec/binary/Base64;
If AWS was added as a proper dependency then it would work. Unfortunately there isn't the android one on maven central. I tried a ton of things to work around this but got nowhere. I tired adding AWS as a submodule and making it a gradle project, removing the apache commons .class file in the kickflip jar etc.
I made a stack overflow question too: http://stackoverflow.com/questions/23677459/excluding-class-files-from-gradle-dependecy
I'm new to gradle, is there anything that can be added to my build.gradle to ignore this second .class file?
Thanks
Hey,
I got a specific crash happening in my galaxy S3 mini everytime i release the resources in AVRecorder.
I fixed it by adding
EGL14.eglMakeCurrent(mEGLDisplay, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_CONTEXT);
right after
public void release() {
if (mEGLDisplay != EGL14.EGL_NO_DISPLAY) {
// Android is unusual in that it uses a reference-counted EGLDisplay. So for
// every eglInitialize() we need an eglTerminate().
in EGLCore.java.
Sauce: http://comments.gmane.org/gmane.comp.handhelds.android.ndk/17285 (I got the eglMakeCurrent error like in the first post).
Hope this helps :)
If it's the correct solution you can close the issue right away.
Build fingerprint: 'Xiaomi/cancro/cancro:4.4.2/KVT49L/KXDMIBF23.0:user/release-keys'
Revision: '0'
pid: 25070, tid: 25963, name: Thread-1763 >>> ... <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000005
r0 00000000 r1 00000000 r2 0000000d r3 00000005
r4 8e25e9fe r5 00000000 r6 78409a48 r7 00000000
r8 0000000d r9 78409a48 sl 7863e9a0 fp 000001c8
ip 76f96e68 sp 78409a00 lr 76eef6cc pc 7c385714 cpsr 200d0010
d0 6f7262642f6f7270 d1 776765706d66662f
d2 462f726570706172 d3 6172576765706d46
d4 0000000100000000 d5 0000000000000000
d6 0000000000000000 d7 0000000000000000
d8 0000000000000000 d9 461c40003f000000
d10 00000000445fdb65 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 ffffffffffffffff d17 0000000000000000
d18 0000000000000000 d19 0000000d00000000
d20 0000000000000001 d21 0000000000000000
d22 0000000000000000 d23 00720077002f0072
d24 3fc748e72055a505 d25 3fc2f112df3e5244
d26 c047069e2aa2aa5b d27 0000000000000000
d28 001e001d001c001b d29 0020001f001d001e
d30 002a002a002a002a d31 0000000000000000
scr 88000013
backtrace:
#00 pc 000e2714 /data/app-lib/.../libavcodec-55.so (av_packet_split_side_data+52)
#1 pc 000996c8 /data/app-lib/.../libavformat-55.so (av_write_trailer+216)
code around pc:
7c3856f4 1a000022 e596801c e358000c da00001d
7c385704 e5967018 e59f4290 e0872008 e2423008
7c385714 e5529008 e552b007 e5d3a005 e5522004
7c385724 e5d3c002 e5d31006 e182a40a e189940b
7c385734 e5d32003 e5d33007 e189980c e18aa801
7c385744 e1899c02 e18aac03 e02ac86a e0291869
7c385754 e1a0c42c e1a01421 e59f5240 e3ccccff
7c385764 e3c11cff e02c246a e0213469 e1530005
7c385774 01520004 0a000004 e28dd00c e8bd8ff0
7c385784 e3a00000 e28dd00c e8bd8ff0 e248800d
7c385794 e0873008 e5d31001 e7d72008 e5d3c002
7c3857a4 e1822401 e5d31003 e182280c e1822c01
7c3857b4 e0221862 e1a01421 e3c11cff e0312462
7c3857c4 4affffec e0671003 e1520001 8affffe9
7c3857d4 e3a0c001 ea000011 e3e01004 e0621001
7c3857e4 e7f32001 e28cc001 e5d31001 e5d34002
code around lr:
76eef6ac e3510102 03500000 0a000002 e0922000
76eef6bc e0a33001 e1cd22f0 e1a00009 ebfdd841
76eef6cc e5983008 e1a01009 e5933034 e1a05000
76eef6dc e1a00008 e12fff33 e59834c0 e3530000
76eef6ec e1a04000 0a000007 e5980010 e3500000
76eef6fc 0a000004 e3540000 ba000002 e598343c
76eef70c e3130c02 1a000065 e3550000 0a000001
76eef71c e1a00009 ebfdd82e e3540000 ba000051
76eef72c e598301c e59d2038 e1a00009 e7931102
76eef73c e1c124d0 e2922001 e2a33000 e1c124f0
76eef74c ebfdd59b e5980010 e3500000 0affffac
76eef75c e590304c e3530000 0affffa9 e3500000
76eef76c 0a000000 ebfe4808 e3540000 1a000002
76eef77c e5983010 e3530000 1593404c e5983018
76eef78c e3530000 13a06000 11a05006 0a00000c
76eef79c e598301c e2855001 e7930106 e280
Hi, I am using sdk in my project and I am experiencing an error. I initially thought it was something related to the modifications I made to the sdk, so i tested your example app, but the problem still persists.
The problem is that the index*.ts file stops being written and is not uploaded until the stop recording button is pressed.
To reproduce the bug leave the device recording for at least 40 minutes.
This is the resulting logcat (from Sony SGP611 on 5.0.2, I have another Logcat from Galaxy Camera 2 EK-GC200 with 4.3)
06-17 15:31:58.632 17126-17208/io.kickflip.sample E/FFmpegWrapper﹕ av_interleaved_write_frame video: 0 pkt: 64440 size: 565 error: Invalid argument
06-17 15:31:58.655 17126-17208/io.kickflip.sample E/FFmpegWrapper﹕ av_interleaved_write_frame video: 1 pkt: 64441 size: 25775 error: Invalid argument
06-17 15:31:58.668 17126-17208/io.kickflip.sample E/FFmpegWrapper﹕ av_interleaved_write_frame video: 0 pkt: 64441 size: 564 error: Invalid argument
06-17 15:31:58.691 17126-17208/io.kickflip.sample E/FFmpegWrapper﹕ av_interleaved_write_frame video: 1 pkt: 64442 size: 9889 error: Invalid argument
06-17 15:31:58.693 17126-17126/io.kickflip.sample I/MicrophoneEncoder﹕ stopRecording
06-17 15:31:58.693 17126-17126/io.kickflip.sample I/CameraEncoder﹕ stopRecording
06-17 15:31:58.705 17126-17223/io.kickflip.sample I/MicrophoneEncoder﹕ Exiting audio encode loop. Draining Audio Encoder
06-17 15:31:58.725 17126-17208/io.kickflip.sample E/FFmpegWrapper﹕ av_interleaved_write_frame video: 1 pkt: 64443 size: 9106 error: Invalid argument
06-17 15:31:58.737 17126-17217/io.kickflip.sample I/CameraEncoder﹕ Sending last video frame. Draining encoder
06-17 15:31:58.753 17126-17208/io.kickflip.sample I/FFmpegMuxer﹕ Forcing Shutdown
06-17 15:31:58.753 17126-17208/io.kickflip.sample I/FFmpegWrapper﹕ finalizeAVFormatContext
06-17 15:31:58.753 17126-17228/io.kickflip.sample D/HlsFileObserver﹕ Event 8 at index214.ts ext ts
06-17 15:31:58.754 17126-17228/io.kickflip.sample I/S3Manager﹕ Queueing upload ies_test/jo2lta8i5u6q/ad8145c8-0114-40d4-8e01-3029c65cd6cd/index214.ts
06-17 15:31:58.755 17126-17228/io.kickflip.sample D/HlsFileObserver﹕ Event 8 at index.m3u8.tmp ext tmp
06-17 15:31:58.755 17126-17228/io.kickflip.sample D/HlsFileObserver﹕ Event 128 at index.m3u8 ext m3u8
06-17 15:31:58.764 17126-17228/io.kickflip.sample I/MainActivity﹕ onBroadcastStop
06-17 15:31:58.766 17126-17126/io.kickflip.sample I/CameraEncoder﹕ onHostActivityPaused
06-17 15:31:58.767 17126-17228/io.kickflip.sample I/S3Manager﹕ Queueing upload ies_test/jo2lta8i5u6q/ad8145c8-0114-40d4-8e01-3029c65cd6cd/index.m3u8
06-17 15:31:58.778 17126-17228/io.kickflip.sample I/S3Manager﹕ Queueing upload ies_test/jo2lta8i5u6q/ad8145c8-0114-40d4-8e01-3029c65cd6cd/vod.m3u8
06-17 15:31:58.863 17126-17223/io.kickflip.sample W/FFmpegMuxer﹕ Dropping frame because Muxer not ready!
06-17 15:31:58.863 17126-17223/io.kickflip.sample W/FFmpegMuxer﹕ Dropping frame because Muxer not ready!
06-17 15:31:58.864 17126-17223/io.kickflip.sample W/FFmpegMuxer﹕ Dropping frame because Muxer not ready!
06-17 15:31:59.010 17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:31:59.102 17126-17126/io.kickflip.sample I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@3ef42551 time:14529623
06-17 15:31:59.115 17126-17217/io.kickflip.sample I/CameraEncoder﹕ handleRelease
06-17 15:31:59.115 17126-17217/io.kickflip.sample D/Texture2dProgram﹕ deleting program 45
06-17 15:32:00.160 17126-17126/io.kickflip.sample I/API﹕ request succeeded io.kickflip.sdk.api.json.StreamList@3d6fb1f2
06-17 15:32:00.239 17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:32:00.645 17126-17126/io.kickflip.sample I/API﹕ request succeeded io.kickflip.sdk.api.json.StreamList@3e788e87
06-17 15:32:00.713 17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:32:01.458 17126-17126/io.kickflip.sample I/API﹕ request failed A Kickflip server error occurred
06-17 15:32:02.690 17126-17500/io.kickflip.sample I/S3Manager﹕ Uploaded 2289.276 KB in 3930ms (582.512 KBps)
06-17 15:32:02.701 17126-17498/io.kickflip.sample I/S3Manager﹕ Upload complete.
06-17 15:32:02.883 17126-17500/io.kickflip.sample I/S3Manager﹕ Uploaded 0.244 KB in 178ms (1.37 KBps)
06-17 15:32:02.885 17126-17500/io.kickflip.sample I/MainActivity﹕ onBroadcastLive @ https://kickflip.io/ad8145c8-0114-40d4-8e01-3029c65cd6cd
06-17 15:32:02.887 17126-17498/io.kickflip.sample I/S3Manager﹕ Upload complete.
06-17 15:32:03.084 17126-17500/io.kickflip.sample I/S3Manager﹕ Uploaded 6.582 KB in 194ms (33.927 KBps)
06-17 15:32:03.096 17126-17498/io.kickflip.sample I/S3Manager﹕ Last Upload complete.
06-17 15:32:03.096 17126-17498/io.kickflip.sample I/S3Manager﹕ Shutting down
06-17 15:34:11.020 17126-17136/io.kickflip.sample I/art﹕ Debugger is no longer active
06-17 15:35:22.067 17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:35:23.288 17126-17136/io.kickflip.sample W/art﹕ Suspending all threads took: 6.570ms
06-17 15:35:23.340 17126-17126/io.kickflip.sample I/API﹕ request succeeded io.kickflip.sdk.api.json.StreamList@c9cf43
06-17 15:35:23.417 17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:35:23.427 17126-17126/io.kickflip.sample I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@3ef42551 time:14733948
06-17 15:35:23.802 17126-17126/io.kickflip.sample I/API﹕ request succeeded io.kickflip.sdk.api.json.StreamList@156193aa
06-17 15:35:23.873 17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:35:23.889 17126-17126/io.kickflip.sample I/Muxer﹕ Created muxer for output: /storage/emulated/0/MySampleApp/107335b8-cd8b-4e79-b06e-4078dc43b2b3/index.m3u8
06-17 15:35:23.897 17126-17126/io.kickflip.sample I/Timeline﹕ Timeline: Activity_launch_request id:io.kickflip.sample time:14734418
06-17 15:35:24.001 17126-17126/io.kickflip.sample I/BroadcastFragment﹕ Recreating BroadcastFragment
06-17 15:35:24.013 17126-13298/io.kickflip.sample I/OMXClient﹕ Using client-side OMX mux.
06-17 15:35:24.031 17126-13298/io.kickflip.sample E/OMXMaster﹕ A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
06-17 15:35:24.035 17126-13298/io.kickflip.sample D/MediaCodec﹕ MediaCodec[kWhatConfigure]: video-output-protection: 00000000, audio-output-protection: 00000000
06-17 15:35:24.054 17126-17126/io.kickflip.sample I/Kickflip﹕ Clearing SessionConfig
06-17 15:35:24.067 17126-17126/io.kickflip.sample W/CameraRelease﹕ Didn't try to open camera onHAResume. rec: false mSurfaceTexture ready? no
06-17 15:35:24.188 17126-13307/io.kickflip.sample D/CameraSurfaceRenderer﹕ onSurfaceCreated
06-17 15:35:24.193 17126-13307/io.kickflip.sample D/Texture2dProgram﹕ Created program 3 (TEXTURE_EXT)
06-17 15:35:24.197 17126-13307/io.kickflip.sample D/Texture2dProgram﹕ Created program 6 (TEXTURE_2D)
06-17 15:35:24.199 17126-13307/io.kickflip.sample D/CameraSurfaceRenderer﹕ onSurfaceChanged 1920x1200
06-17 15:35:24.199 17126-13307/io.kickflip.sample I/CameraSurfaceRenderer﹕ setTexSize on display Texture
06-17 15:35:24.203 17126-13325/io.kickflip.sample I/OMXClient﹕ Using client-side OMX mux.
06-17 15:35:24.229 17126-17126/io.kickflip.sample I/API﹕ request failed A Kickflip server error occurred
06-17 15:35:24.248 17126-17126/io.kickflip.sample I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@33c013e5 time:14734769
06-17 15:35:24.290 17126-13324/io.kickflip.sample D/MediaCodec﹕ MediaCodec[kWhatConfigure]: video-output-protection: 00000000, audio-output-protection: 00000000
06-17 15:35:24.292 17126-13325/io.kickflip.sample E/ACodec﹕ [OMX.qcom.video.encoder.avc] storeMetaDataInBuffers (output) failed w/ err -2147483648
06-17 15:35:24.293 17126-13325/io.kickflip.sample W/ACodec﹕ do not know color format 0x7fa30c04 = 2141391876
06-17 15:35:24.293 17126-13325/io.kickflip.sample W/ACodec﹕ do not know color format 0x7f000789 = 2130708361
06-17 15:35:24.301 17126-13325/io.kickflip.sample I/ACodec﹕ [OMX.qcom.video.encoder.avc] setupVideoEncoder succeeded
06-17 15:35:24.302 17126-13325/io.kickflip.sample W/ACodec﹕ do not know color format 0x7f000789 = 2130708361
06-17 15:35:24.303 17126-13325/io.kickflip.sample D/ACodec﹕ Found video-output-protection flags set to 00000000
This always happened during writing of index214.ts (approximately 1.5 GB of data written), on Sony SGP611 5.0.2, Galaxy Camera 2 EK-GC200 with 4.3 and HTC ONE M7 5.0.2.
Hope this is enough, I can provide more info on different devices if you need, just tell me.
Keep up the good work.
P.S. I removed most of the FFmpegWrapper because they added nothing useful and made the logcat less readable.
Android version is 4.4.2.
Example video produced: https://drive.google.com/file/d/0B7nLoVfDWbdmMGhLc203OEhtUzBZeWcyV3RTbU5vZG1PNVZj/edit?usp=sharing
Other resolutions tested:
Resolution - Corrupted
480x480 - YES
480x360 - YES
481x480 - YES
512x512 - YES
600x512 - YES
500x640 - YES
639x640 - YES
640x480 - NO
640x512 - NO
640x640 - NO
This seems like a hardware/firmware bug. Couldn't see anything in Kickflip that would cause this. And recording small videos works fine on all my other tablets/devices. As the Nexus is a fairly common one it may be a bug on others too.
Couldn't find anything in the docs referring to this either.
So I would probably just limit the recording width to 640 or more.
Hello! Seems like this problem is in the ffmpeg wrapper. It won`t write hls to the directory that contains dots (like the app data dir containing package name). Btw Is there any way to look at the wrapper source code?
./gradlew clean
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "versionInt" on "project ':sdk'", value: "1".
Deprecated dynamic property: "versionName" on "project ':sdk'", value: "0.9".
Deprecated dynamic property: "android_manifest" on "project ':sdk'", value: "manifest[attributes={x...".
Deprecated dynamic property: "package_name" on "project ':sdk'", value: "io.kickflip.sdk".
FAILURE: Build failed with an exception.
Where:
Script 'https://raw.github.com/OnlyInAmerica/mvn-repo/master/maven.gradle' line: 27
What went wrong:
A problem occurred configuring project ':sample'.
A problem occurred configuring project ':sdk'.
Could not find property 'artifactName' on project ':sdk'.
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Modules introduced in 6b4b3ab have problem:
java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "libavformat-56.so" needed by "libFFmpegWrapper.so"; caused by could not load library "libavcodec-56.so" needed by "libavformat-56.so"; caused by could not load library "libswresample-1.so" needed by "libavcodec-56.so"; caused by could not load library "libavutil-54.so" needed by "libswresample-1.so"; caused by could not load library "librtmp-1.so" needed by "libavutil-54.so"; caused by cannot locate symbol "rand" referenced by "librtmp-1.so"...
Tested on Xiaomi Mi3 (Android 4.4.4).
At stackoverflow were hints, that this can be becourse this modules were compiled with NDK API 21.
Could you please provide C code for net.openwatch.ffmpegwrapper.FFmpegWrapper as OpenWatch/FFmpegWrapper-Android is outdated?
I was looking at the code here (https://github.com/Kickflip/kickflip-docs/tree/master/android).
I see that you can create users and streams for those users. I have been trying to find a way to make a user's streams viewable only by specific users. A scenario would be other users who the user created the streams gave permission to view the stream. Is this possible? If so, how is it done?
I wish to make relevant changes to allow portrait mode. First steps would be to allow BroadcastFragment to load in portrait mode. But once that happens, the camera preview is rotated -90.
I believe the rotation makes sense when the fragment opens in Landscape mode. Could you suggest where is actual rotation taking place?
the parameter in reset(SessionConfig config) in AVRecorder.java isn't used inside
In a brief test I did reset doesn't seem to start the preview in GLCameraView again after stopping recording. If I do startRecording and then stopRecording the preview after that will freeze to the last frame drawn before stopping the recording. I guess some resources aren't cleared after the end of the recording and seem to persist?
Texture2dProgram D Created program 9 (TEXTURE_EXT)
FFmpegMuxer I PrepareAVFormatContext for path /storage/emulated/0/MySampleApp/60c63b9e-1abc-4a7e-9bc5-3923083d2ac1/index.m3u8
AndroidRuntime E FATAL EXCEPTION: CameraEncoder
E Process: io.kickflip.sample, PID: 20050
E java.nio.ReadOnlyBufferException
E at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:354)
E at io.kickflip.sdk.av.FFmpegMuxer.captureH264MetaData(FFmpegMuxer.java:292)
E at io.kickflip.sdk.av.FFmpegMuxer.handleWriteSampleData(FFmpegMuxer.java:206)
E at io.kickflip.sdk.av.FFmpegMuxer.writeSampleData(FFmpegMuxer.java:183)
E at io.kickflip.sdk.av.AndroidEncoder.drainEncoder(AndroidEncoder.java:100)
E at io.kickflip.sdk.av.CameraEncoder.handleFrameAvailable(CameraEncoder.java:433)
E at io.kickflip.sdk.av.CameraEncoder.access$200(CameraEncoder.java:27)
E at io.kickflip.sdk.av.CameraEncoder$EncoderHandler.handleMessage(CameraEncoder.java:835)
E at android.os.Handler.dispatchMessage(Handler.java:102)
E at android.os.Looper.loop(Looper.java:135)
E at io.kickflip.sdk.av.CameraEncoder.run(CameraEncoder.java:610)
E at java.lang.Thread.run(Thread.java:818)
Process I Sending signal. PID: 20050 SIG: 9
Hi, I found you have used ffmpeg to mix the audio and video, Is the C source code open? Where can I get it?
On some Android 4.2 devices we tested we have sometimes the issue that it crashes at the end of the recorded livestream with the Kickflip MediaPlayer integrated in the SDK.
Any idea what causes this and how this can be solved?
Stacktrace:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.cloozup.app, PID: 31217
java.lang.IllegalStateException
at android.media.MediaPlayer.getCurrentPosition(Native Method)
at io.kickflip.sdk.fragment.MediaPlayerFragment.getCurrentPosition(MediaPlayerFragment.java:245)
at android.widget.MediaController.setProgress(MediaController.java:423)
at android.widget.MediaController.access$500(MediaController.java:71)
at android.widget.MediaController$3.handleMessage(MediaController.java:394)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
I emailed a week after signing up (Oct 5) that I wanted my trial subscription cancelled. I was just charged though. I would like my money refunded and my account cancelled.
I am trying to integrate the SDK in my app and I get UnsatisfiedLinkError every time the lib tries to load ffmpeg.
In FFmpegMuxer -> mFFmpeg = new FFmpegWrapper(); which leads to the loading of the static contractor -> System.loadLibrary("FFmpegWrapper");
What am I missing ?
I know this SDK is not focussing on RTMP anymore, but would you have any food for thought on how to get the status of the RTMp endpoint (like CONNECTED, DISCONNECTED...etc)
Typical use is when during streaming, internet snaps or connection to rtmp endpoint breaks, we can pause broadcasting and resume when the state changes back to CONNECTED
My username is 'justSomeAppLol'.
I need to cancel the trial, but there is no option within the console to do so.
The service is great, but I need to do more testing, and will not be launching app for some time.
This ticket is a reminder for us to keep an eye on this upstream bug: http://code.google.com/p/google-api-java-client/issues/detail?id=869&sort=-id&colspec=Milestone%20Priority%20Component%20Type%20Summary%20ID%20Status%20Owner
When this is solved, we can update our google library and replace Apache with NetHTTP to be more modern.
This is not a critical bug, as replacing NetHTTP with Apache in the meantime is a simple change which produces the desired result.
I analysed a recorded (with AVRecorder and AndroidMuxer) mp4 file in VirtualDub and it seems that:
Both these issues seem probably related to how the timestamps are handled in MicrophoneEncoder and CameraEncoder and later passed to and changed again in AndroidMuxer?
In an effort to fix this and make the video/audio smooth and synced I have two questions.
How is the presentation time in each (audio/video) created and considered? Is it just added per write of buffer to file based on the initial mStartTimeNS of each? How is synchronization achieved? Would it maybe be better to pass the presentationTime of both audio and video to the Muxer un-altered and somehow sync it there with something common between them?
What is the getSafePts method in Muxer.java doing exactly?
I seem to get a bit lost with these.
also
3) SideQuestion. I noticed the muxer is created and started as soon as the camera/microphone threads start and their tracks are added to the muxer. This is convenient but it does create a separate mp4 file each time the AVRecorder is started even if nothing is recorded in the meantime. Also I suspect it might be related to some of the crashes in some devices I experience. Is there some limitation from android or can I create and start the Muxer only when the recording stops?
Sorry for the huge post. Keep up the good work. :)
I'm getting an error when I import the Kickflip SDK into my project in Android Studio as a module.
The error occurs when I attempt to import the SDK as a module
Here is the error:
Error:(3, 0) No such property: versionInt for class: org.gradle.api.internal.project.DefaultProject_Decorated
Possible solutions: version
Information about my build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
applicationId "com.example.lgorse.androidhive_test"
minSdkVersion 18
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug{
debuggable true
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile project(':libstreaming')
compile 'io.kickflip:sdk:1.1.1'
and here is the gradle build for the Kickflip SDK:
apply plugin: 'android-library'
versionInt=8
versionName="1.1.1"
android {
compileSdkVersion 19
buildToolsVersion "20.0"
defaultConfig {
minSdkVersion 18
targetSdkVersion 19
versionCode versionInt
versionName versionName
}
buildTypes {
release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
configurations {
jaxDoclet
classpaths
}
dependencies {
compile 'com.google.guava:guava:16.0'
compile 'com.android.support:support-v4:19.+'
// aws-sdk-android
compile files('libs/aws-android-sdk-1.7.0-core.jar')
compile files('libs/aws-android-sdk-1.7.0-s3.jar')
// google-oauth-java-client
compile files('libs/google-http-client-1.17.0-rc.jar')
compile files('libs/google-http-client-android-1.17.0-rc.jar')
compile files('libs/google-http-client-jackson2-1.17.0-rc.jar')
compile files('libs/google-oauth-client-1.17.0-rc.jar')
compile files('libs/gson-2.1.jar')
compile files('libs/jsr305-1.3.9.jar')
compile files('libs/protobuf-java-2.4.1.jar')
// fulfilled by aws-android-sdk:
//compile files('libs/jackson-core-2.1.3.jar')
//compile files('libs/jackson-core-asl-1.9.11.jar')
// m3u8 parser
compile files('libs/m3u8parser-0.2.jar')
// For Doclava JavaDoc
jaxDoclet("com.google.doclava:doclava:1.0.5")
//classpaths files('build/classes/release')
classpaths fileTree(dir: 'build/classes/release').matching { include 'io/kickflip/sdk/Kickflip.java' }
classpaths files(new File(System.getenv('ANDROID_HOME') + '/platforms/android-19/android.jar'))
}
// Maven publish task
// Uncomment this line to enable publishing to Maven Central. Requires maven
// credentials in gradle.properties
//apply from: 'https://raw.github.com/OnlyInAmerica/mvn-repo/master/maven.gradle'
// Generate JavaDoc
android.libraryVariants.all { variant ->
task("generate${variant.name}Javadoc", type: Javadoc) {
source = android.sourceSets.main.java
title = null
options.docletpath = configurations.jaxDoclet.files.asType(List)
options.classpath = configurations.classpaths.files.asType(List)
options {
doclet "com.google.doclava.Doclava"
bootClasspath new File(System.getenv('JAVA_HOME') + "/jre/lib/rt.jar")
addStringOption "warning", '110' // Allow undocumented types
addStringOption "overview", "/Users/davidbrodsky/Code/android/kickflip-android-example/submodules/kickflip-android-sdk/sdk/src/javadoc-overview.html"
addStringOption "public"
addStringOption "hdf project.name", "Kickflip Android SDK"
addStringOption "federate android", "http://d.android.com/reference"
addStringOption "federationxml android", "http://doclava.googlecode.com/svn/static/api/android-10.xml"
}
}
}
I'm used bellow code to get all streams, but got message: A Kickflip server error occurre.
I still can login user/ start srteam but I can't get streams.
Please help me
KickflipApiClient apiClient = Kickflip.getApiClient(this);
apiClient.getStreamsByKeyword(null, 0, 100, new KickflipCallback() {
@Override
public void onSuccess(Response response) {
mStreams = (List<Stream>) response;
LogUtil.e("onSuccess", mStreams.size() + "adf");
LogUtil.e("onSuccess", mStreams.toString());
}
@Override
public void onError(KickflipException e) {
LogUtil.e("onError", e.getMessage());
}
});
BroadcastActivity should be more configurable.
A few requests:
A few other ideas:
Any suggestion is OK . Thanks.
Hi everyone.
I'm studying this sdk to use with Wowza stream service. Anyone can help me?
skype: [email protected]
gmail: [email protected]
I want to use Sourcegraph for kickflip-android-sdk code search, browsing, and usage examples. Can an admin enable Sourcegraph for this repository? Just go to https://sourcegraph.com/github.com/Kickflip/kickflip-android-sdk. (It should only take 30 seconds.)
Thank you!
The existing kickflip sdk is not allowing recording past 35mins
Hello guys, I made the modifications according to this message
#35 (comment)
But I am not able to create a .so file, can some one upload one. Thanks in advance.
Can someone let me know what are the technologies used in kickflip. I believe it uses a client(android/ios) to build, upload m3u8
and ts
files to the regional s3 bucket, which is then distributed via a Global cloud-based Content Distribution Network. Is there something else that i have missed ??
I noticed that there was RTMP support. But a patch which remove RTMP had been merged. Could you tell me why ?
I am not able to figure out how to reduce the number of items in index.m3u8 to 3. Currently 5 items are listed and it adds to the lag,
I cannot find the code which creates, updates the index.m3u8. Also, is there a way for the player to start playing from the last .ts file in the m3u8?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.