wbaizx / videolive Goto Github PK
View Code? Open in Web Editor NEWandroid视频直播库,视频H264,H265硬编码,音频AAC编码,使用UDP协议提供实时预览,传输,解码播放,录制功能。也支持单独语音对讲
android视频直播库,视频H264,H265硬编码,音频AAC编码,使用UDP协议提供实时预览,传输,解码播放,录制功能。也支持单独语音对讲
大神,你好,我想把流推在我们的服务器上,看到有代码中有设置ip和端口的地方,但是正常播放流还需要流名字,请问怎样设置流名字呢 ?
例如:rtsp://10.10.10.10:1080/stream.sdp
大神,你好。我按照说明,通过后台方式运行,但是接收端(只是在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
您好 感谢您分享这么优秀的代码。
我在两个手机测试时如果画面是移动的会发现有点花屏现象,不知道是否是udp丢包导致。请问您尝试过TCP方式吗?
就是两台手机在同一wifi下,使用socket连接,用这个可以做到吗?
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。
以上是我在使用时遇到得问题,希望能帮到大家。
大神 我这里用你的demo 只有声音 没有图像是什么原因? 非常感谢
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
报错了
支持在PC上用VLC播放吗?
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.