@@ -33,13 +33,19 @@ import com.pedro.encoder.input.decoder.VideoDecoderInterface
33
33
import com.pedro.encoder.input.gl.render.filters.AndroidViewFilterRender
34
34
import com.pedro.encoder.input.gl.render.filters.BlackFilterRender
35
35
import com.pedro.encoder.input.gl.render.filters.NoFilterRender
36
+ import com.pedro.encoder.input.gl.render.filters.`object`.ImageObjectFilterRender
36
37
import com.pedro.encoder.input.video.CameraHelper
38
+ import com.pedro.encoder.utils.gl.TranslateTo
37
39
import com.pedro.rtplibrary.rtmp.RtmpCamera1
38
40
import com.pedro.rtplibrary.rtmp.RtmpFromFile
39
41
import idv.luchafang.videotrimmer.VideoTrimmerView
40
42
import kotlinx.android.synthetic.main.activity_live.*
41
43
import net.ossrs.rtmp.ConnectCheckerRtmp
44
+ import net.zentring.live.common.Common
45
+ import net.zentring.live.common.MathUtils
42
46
import net.zentring.live.data.Companion.instance
47
+ import net.zentring.live.graphic.HitGraphic
48
+ import net.zentring.live.graphic.RankGraphic
43
49
import java.io.File
44
50
import java.io.FileOutputStream
45
51
import java.io.InputStream
@@ -383,11 +389,115 @@ class LiveActivity : AppCompatActivity(), ConnectCheckerRtmp, SurfaceHolder.Call
383
389
384
390
edit.setOnClickListener {
385
391
graphic_view.show()
392
+ graphic_view.setGraphicListener { graphicType: GraphicType , url: String , time: Long ->
393
+ upGraphic(graphicType, url, time)
394
+ }
386
395
graphic_view.bringToFront()
387
396
settingBtn.visibility = View .INVISIBLE
388
397
}
389
398
}
390
399
400
+ private fun upGraphic (graphicType : GraphicType , url : String , time : Long ) {
401
+ when (graphicType) {
402
+ GraphicType .HIT -> upHitGraphic(url, time)
403
+ GraphicType .RANK -> upRankGraphic(url, time)
404
+ }
405
+ }
406
+
407
+ private fun upHitGraphic (url : String , time : Long ) {
408
+ val graphicID = 1
409
+ val hitGraphic = HitGraphic ()
410
+ hitGraphic.onStatusListener { whetherUp, path, width, height ->
411
+ if (whetherUp == Common .WHETHER_UP_GRAPHIC_STATUS .can.toNumber()) {
412
+
413
+ val hitGraphicRender = ImageObjectFilterRender ()
414
+ hitGraphicRender.setImage(Common .getBitmap(path))
415
+ // 一定要先设置setScale,才可以用TranslateTo设置setPosition
416
+ hitGraphicRender.setScale(
417
+ MathUtils .div(width.toDouble(), data.resolution[0 ].toDouble())
418
+ .toFloat() * 100 * 2 ,
419
+ MathUtils .div(height.toDouble(), data.resolution[1 ].toDouble())
420
+ .toFloat() * 100 * 2
421
+ )
422
+ hitGraphicRender.setPosition(TranslateTo .TOP_RIGHT )
423
+ Log .e(
424
+ " zhaofei" ,
425
+ " width" + MathUtils .div(width.toDouble(), data.resolution[0 ].toDouble())
426
+ .toString()
427
+ )
428
+ Log .e(
429
+ " zhaofei" ,
430
+ " height" + MathUtils .div(height.toDouble(), data.resolution[1 ].toDouble())
431
+ .toString()
432
+ )
433
+ // rtmpCamera1!!.glInterface.setFilter(NoFilterRender())
434
+ rtmpCamera1!! .glInterface.setFilter(graphicID, hitGraphicRender)
435
+ clearGraphic(graphicID, 0 , time)
436
+ } else {
437
+ Toast .makeText(applicationContext, " 下载字幕失败!!!" , Toast .LENGTH_SHORT ).show()
438
+ // setBtnEnableStatus(prizeGraphicBtn, true)
439
+ }
440
+ }
441
+ hitGraphic.useGraphic(url)
442
+ }
443
+
444
+ private fun upRankGraphic (url : String , time : Long ) {
445
+ val graphicID = 2
446
+ val rankGraphic = RankGraphic ()
447
+ rankGraphic.onStatusListener { whetherUp, path, width, height ->
448
+ if (whetherUp == Common .WHETHER_UP_GRAPHIC_STATUS .can.toNumber()) {
449
+
450
+ val rankGraphicRender = ImageObjectFilterRender ()
451
+ rankGraphicRender.setImage(Common .getBitmap(path))
452
+ // 一定要先设置setScale,才可以用TranslateTo设置setPosition
453
+ rankGraphicRender.setScale(
454
+ MathUtils .div(width.toDouble(), data.resolution[0 ].toDouble())
455
+ .toFloat() * 100 * 2 ,
456
+ MathUtils .div(height.toDouble(), data.resolution[1 ].toDouble())
457
+ .toFloat() * 100 * 2
458
+ )
459
+ rankGraphicRender.setPosition(TranslateTo .CENTER )
460
+ Log .e(
461
+ " zhaofei" ,
462
+ " width" + MathUtils .div(width.toDouble(), data.resolution[0 ].toDouble())
463
+ .toString()
464
+ )
465
+ Log .e(
466
+ " zhaofei" ,
467
+ " height" + MathUtils .div(height.toDouble(), data.resolution[1 ].toDouble())
468
+ .toString()
469
+ )
470
+ // rtmpCamera1!!.glInterface.setFilter(NoFilterRender())
471
+ rtmpCamera1!! .glInterface.setFilter(graphicID, rankGraphicRender)
472
+ clearGraphic(graphicID, 0 , time)
473
+ } else {
474
+ Toast .makeText(applicationContext, " 下载字幕失败!!!" , Toast .LENGTH_SHORT ).show()
475
+ // setBtnEnableStatus(prizeGraphicBtn, true)
476
+ }
477
+ }
478
+ rankGraphic.useGraphic(url)
479
+ }
480
+
481
+ private var mTimer // 定时下字幕
482
+ : Timer ? = null
483
+
484
+ private fun clearGraphic (
485
+ id : Int ,
486
+ btn : Int ,
487
+ time : Long
488
+ ) {
489
+ if (mTimer == null ) {
490
+ mTimer = Timer ()
491
+ }
492
+ val timerTask: TimerTask = object : TimerTask () {
493
+ override fun run () {
494
+ // rtmpCamera1!!.glInterface.setFilter(NoFilterRender())
495
+ rtmpCamera1!! .glInterface.setFilter(id, NoFilterRender ())
496
+ }
497
+ }
498
+ mTimer!! .schedule(timerTask, time)
499
+ }
500
+
391
501
private fun returnToLive () {
392
502
if (rtmpFile!! .isStreaming) {
393
503
rtmpFile!! .stopStream()
@@ -636,7 +746,20 @@ class LiveActivity : AppCompatActivity(), ConnectCheckerRtmp, SurfaceHolder.Call
636
746
var i = 0
637
747
Thread {
638
748
while (true ) {
639
- rtmpCamera1!! .startRecord(File (part, i.toString()).absolutePath)
749
+ /*
750
+ java.lang.IllegalArgumentException
751
+ at android.media.MediaCodec.native_configure(Native Method)
752
+ at android.media.MediaCodec.configure(MediaCodec.java:2023)
753
+ at android.media.MediaCodec.configure(MediaCodec.java:1951)
754
+ at com.pedro.encoder.video.VideoEncoder.prepareVideoEncoder(VideoEncoder.java:128)
755
+ at com.pedro.encoder.video.VideoEncoder.reset(VideoEncoder.java:196)
756
+ at com.pedro.rtplibrary.base.Camera1Base.resetVideoEncoder(Camera1Base.java:484)
757
+ at com.pedro.rtplibrary.base.Camera1Base.startRecord(Camera1Base.java:287)
758
+ at com.pedro.rtplibrary.base.Camera1Base.startRecord(Camera1Base.java:293)
759
+ at net.zentring.live.LiveActivity$startStreaming$2.run(LiveActivity.kt:675)
760
+ at java.lang.Thread.run(Thread.java:929)
761
+ */
762
+ // rtmpCamera1!!.startRecord(File(part, i.toString()).absolutePath)
640
763
Thread .sleep(1000 )
641
764
rtmpCamera1!! .stopRecord()
642
765
i++
@@ -748,8 +871,8 @@ class LiveActivity : AppCompatActivity(), ConnectCheckerRtmp, SurfaceHolder.Call
748
871
rtmpCamera1!! .prepareVideo(
749
872
data.resolution[0 ],
750
873
data.resolution[1 ],
751
- 30 ,
752
- 12000 * 1024 ,
874
+ 25 ,
875
+ 5000 * 1024 ,
753
876
false ,
754
877
rotation
755
878
)
@@ -959,8 +1082,8 @@ class LiveActivity : AppCompatActivity(), ConnectCheckerRtmp, SurfaceHolder.Call
959
1082
}
960
1083
961
1084
private fun setDefaultPreviewSize () {
962
- val r = 1920 .0 / 1080
963
- data.resolution = arrayOf(1920 , 1080 )
1085
+ val r = 1280 .0 / 720
1086
+ data.resolution = arrayOf(1280 , 720 )
964
1087
setCameraScale(r)
965
1088
}
966
1089
@@ -1295,6 +1418,7 @@ class LiveActivity : AppCompatActivity(), ConnectCheckerRtmp, SurfaceHolder.Call
1295
1418
}
1296
1419
1297
1420
override fun onDestroy () {
1421
+ mTimer?.cancel()
1298
1422
super .onDestroy()
1299
1423
this .releaseInstance()
1300
1424
finishAffinity()
0 commit comments