Coder Social home page Coder Social logo

wbaizx / videolive Goto Github PK

View Code? Open in Web Editor NEW
212.0 212.0 75.0 795 KB

android视频直播库,视频H264,H265硬编码,音频AAC编码,使用UDP协议提供实时预览,传输,解码播放,录制功能。也支持单独语音对讲

Java 7.66% CMake 0.18% C 0.41% C++ 89.00% Makefile 0.19% Python 2.27% Batchfile 0.11% Shell 0.17%

videolive's People

Contributors

wbaizx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

videolive's Issues

请问推流的地址要怎么设置呢?

大神,你好,我想把流推在我们的服务器上,看到有代码中有设置ip和端口的地方,但是正常播放流还需要流名字,请问怎样设置流名字呢 ?
例如:rtsp://10.10.10.10:1080/stream.sdp

我想通过service的方式运行

大神,你好。我按照说明,通过后台方式运行,但是接收端(只是在Windows 服务器上开启了一个UDP服务端侦听了端口做测试)没有接收到任何数据,不知道问题出在哪,请指教。

publish = new Publish.Buider(mContext)
                .setPushMode(new UdpSend(server, 8808))
                .setFrameRate(15)//帧率
                .setVideoCode(VDEncoder.H264)//编码方式
                .setIsPreview(false)//是否需要显示预览(如需后台推流最好设置false,如果设置false则构建Buider可以调用单参数方法Publish.Buider(context))
                .setPublishBitrate(600 * 1024)//推流采样率
                .setCollectionBitrate(600 * 1024)//采集采样率
                .setCollectionBitrateVC(64 * 1024)//音频采集采样率
                .setPublishBitrateVC(24 * 1024)//音频推流采样率
                .setPublishSize(480, 320)//推流分辨率,不要高于预览分辨率
                .setPreviewSize(480, 320)//预览分辨率,决定截屏、录制文件的分辨率
                .setRotate(true)//是否为前置摄像头,默认后置
                .setScreenshotsMode(Publish.CONVERSION)//截屏模式
                .setVideoDirPath(Environment.getExternalStorageDirectory().getPath() + File.separator + "VideoLive")//录制路径,当前为默认路径
                .setPictureDirPath(Environment.getExternalStorageDirectory().getPath() + File.separator + "VideoPicture")//拍照路径,当前为默认路径
                .build();

大神,我有个问题,看到了回复一下,万谢

.setPublishSize(1280, 720)//推流分辨率,不要高于预览分辨率
.setPreviewSize(1280, 720)//预览分辨率,决定截屏、录制文件的分辨率

当我把分辨率调到了1280720的时候,录制视频录制不了,我想录的是h265的,但我用480320的时候就没有问题呢?我就只改过这里,别的有动过

帧率和码率不对的问题

帧率设置的25,码率设置的1024
但是录制出来的视频和设置的帧率和码率差距过大
请问是怎么回事,谢谢!
录制出来后是16帧率
码率是1180

请问您实现过TCP方式吗?

您好 感谢您分享这么优秀的代码。
我在两个手机测试时如果画面是移动的会发现有点花屏现象,不知道是否是udp丢包导致。请问您尝试过TCP方式吗?

音频数据和视频数据是否有进行封装。

1.我使用的场景是 pc端将编码通过UDP发送到安卓手机,安卓手机解码,不知道这样是否可行。
我看了你的解码,好像没有解封装,通过自定义协议(checkInformation)判断是音频还是视频数据。
我想咨询的问题:
1.是是否有封装,如果有封装的格式是哪种类型,
2.我用pc端编码 按照你的协议,用udp发送,安卓解码显示,你的这个包是否适用个方案。

记录一些在使用中出现的问题与解决的方法,希望能让各位少走一些弯路

H264:
在使用中遇到接受端黑屏,但是有声音。
1.先判断发送端的ADEncoder类里面startEncoderThread方法里是否生成了关键帧,即进到
bufferInfo.flags == MediaCodec.BUFFER_FLAG_KEY_FRAME 这个判断里面。在部分魅族手机
上发现 关键帧的flags 为9,使用无法封装关键帧,领到接受端无法初始化解码器,所以黑屏。
2.在接受端的VDDecoder类的beginCodec报错,判断getH264SPS和getH264PPS 是否返回
null, 在getH264SPS方法主要通过判断00 00 00 01 68 来截取sps,但是部分硬编生成的并不
是00 00 00 01 68 而是 00 00 00 01 28。在getH264PPS方法里通过 00 00 00 01 68和 00 00
00 01 65 来截取pps,但是部分硬编生成的是00 00 00 01 28 和 00 00 00 01 25。

H265:
在使用中遇到在VDDecoder类的beginCodec 报错,原因是在getH265information方法返回null,
在调用mCodec.configure时报错, 发现原因是getH265information方法通过 00 00 00 01 26 进行判断然后截取,部分手机硬编生成的是 00 00 00 01 28。

以上是我在使用时遇到得问题,希望能帮到大家。

使用H265推流,H265接收端报错

12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] JNI DETECTED ERROR IN APPLICATION: GetStringUTFChars received null jstring
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] in call to GetStringUTFChars
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] from void android.media.MediaCodec.native_configure(java.lang.String[], java.lang.Object[], android.view.Surface, android.media.MediaCrypto, int)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] "Udp" prio=5 tid=34 Runnable
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] | group="main" sCount=0 dsCount=0 obj=0x12f11dd0 self=0x7f740b2000
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] | sysTid=25122 nice=0 cgrp=default sched=0/0 handle=0x7f75f79000
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] | state=R schedstat=( 9250769 2320768 117 ) utm=0 stm=0 core=0 HZ=100
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] | stack=0x7f74602000-0x7f74604000 stackSize=1036KB
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] | held mutexes= "mutator lock"(shared held)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at android.media.MediaCodec.native_configure(Native method)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at android.media.MediaCodec.configure(MediaCodec.java:590)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at com.library.live.vd.VDDecoder.beginCodec(VDDecoder.java:100)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] - locked <0x233eeef3> (a com.library.live.vd.VDDecoder)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at com.library.live.vd.VDDecoder.Information(VDDecoder.java:60)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at com.library.live.stream.UdpRecive.checkInformation(UdpRecive.java:214)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at com.library.live.stream.UdpRecive.mosaicVideoFrame(UdpRecive.java:182)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at com.library.live.stream.UdpRecive.write(UdpRecive.java:153)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at com.library.live.stream.UdpRecive$2.run(UdpRecive.java:119)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at android.os.Handler.handleCallback(Handler.java:815)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at android.os.Handler.dispatchMessage(Handler.java:104)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at android.os.Looper.loop(Looper.java:194)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70] at android.os.HandlerThread.run(HandlerThread.java:61)
12-12 11:44:14.815 24984-25122/com.videolive A/art: art/runtime/check_jni.cc:70]
12-12 11:44:14.816 24984-25122/com.videolive A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 25122 (Udp)

无法播放

2019-03-26 15:22:33.793 26982-26982/? W/Utils: Utils_isSuperResolutionSupport [load libai_client.so failed]
2019-03-26 15:22:34.272 26982-26982/? W/InputMethodManager: startInputReason = 1
2019-03-26 15:22:34.305 26982-26982/? W/InputMethodManager: startInputReason = 5

报错了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.