如何将实时视频流式传输到Android(2.1及更高版本),我有两个链接:m3u8和f4m(据我所知,不支持f4m).
从我在stackoverflow上看到的,有一种方法可以使用vitamio来传输m3u8(但链接不起作用).
有没有其他方法来传输m3u8视频?也许我还可以使用其他格式?
谢谢.
android video-streaming android-video-player http-live-streaming
我想在使用FFMPEG创建.ts文件时减少多路复用开销.
./ffmpeg -i myInputFile.ismv \
-vcodec copy \
-acodec copy \
-bsf h264_mp4toannexb \
-map 0 \
-f segment \
-segment_time 10\
-segment_list_size 999999 \
-segment_list output/myVarientPlaylist.m3u8 \
-segment_format mpegts \
output/myAudioVideoFile-%04d.ts
Run Code Online (Sandbox Code Playgroud)
我的输入是ismv格式,包含视频和音频流:
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240, 348 kb/s, 29.97 tbr, 10000k tbn, 59.94 tbc
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 63 kb/s
Run Code Online (Sandbox Code Playgroud)
存在与多路复用相关的问题,这导致将大量开销添加到流中.这是我为音频描述的问题:

因此对于给定的aac流,开销将是88%(因为200字节将映射到2 x 188字节数据包).
对于视频,iframe数据包非常大,因此它们可以很好地转换为.ts数据包,但是,差异可以与音频数据包一样小,因此它们会遇到同样的问题.
解决方案是将几个aac数据包组合成一个更大的流,然后再将它们打包成.ts.这是否可以开箱即用FFMPEG?
有人可以解释我需要采取的步骤,以便为Android添加新的编解码器吗?
此外,我希望编解码器作为应用程序安装(或首次启动)的一部分安装,而不是作为完整Android操作系统构建的一部分.
我想这样做的原因是我有一个应用程序需要显示一个不受支持的编解码器(HLS或TS)的视频,但我不想构建一个完整的视频播放器 - 只需与现有的,内置播放器.
谢谢,Alik.
我意识到在Android中支持HLS的程度方面存在一些问题.我正在尝试编写一个小型视频播放器演示(尽可能多地使用设备); 最好不要使用第三方图书馆; 可以流式传输HLS视频.
注意:我目前正在测试JellyBean 4.2.2,但可以访问其他版本
我已经设法使用MediaPlayer类,以便我的应用程序能够开始播放流(例如Apple的测试视频BipBopAll),但它似乎正在加载流的错误部分,因为视频似乎从29分钟开始(大约三十秒后完成).
我使用的代码非常基本:
private void playTrack()
{
player = new MediaPlayer();
try
{
player.setDisplay(holder);
player.setDataSource("http://devimages.apple.com/iphone/samples/bipbop
/bipbopall.m3u8");
player.prepare();
}
catch (...)
{
}
player.start();
}
Run Code Online (Sandbox Code Playgroud)
更新:我在ICS 4.0.4上测试了相同的代码,它运行正常.在3.0.1中进行测试,在15分钟时加载流,然后从那里正确运行.
我该怎么做才能确保流在开始时启动,并在多个Android版本上正确播放?
或者,我应该使用更好的实现吗?
我正在尝试在播放hls流时获得视频分辨率.我有典型的玩家初始化:
let urlAsset = AVURLAsset(URL: currentVideoUrl)
self.player=AVPlayer(playerItem: AVPlayerItem(asset:urlAsset))
.......
Run Code Online (Sandbox Code Playgroud)
我使用KVO,当我获得AVPlayerItem的.ReadyToPlay状态时,我尝试获取视频大小:
func resolutionSizeForVideo() {
guard let videoTrack = self.player.currentItem?.asset.tracksWithMediaType(AVMediaTypeVideo).first else
{ return
}
let size = CGSizeApplyAffineTransform(videoTrack.naturalSize, videoTrack.preferredTransform)
let frameSize = CGSize(width: fabs(size.width), height: fabs(size.height))
print ("video size: \(frameSize)")
}
Run Code Online (Sandbox Code Playgroud)
问题是tracksWithMediaType()总是返回空数组(但适用于非流文件,例如.mov).
如何在AVPlayer中播放HLS视频的大小(CGRect)?
我想从实时服务器播放音频.我不想下载这些音频文件.这些文件的格式是android java上的mp3.working.
我最近遇到了很多麻烦.
我想开发一个嵌入了直播的Android应用程序,但我只是不知道如何开始.我尝试使用嵌入了livestreaming标记的Webview,但它不起作用(很可能是通过Flash提供的流).我也尝试使用VideoView组件,但它也没有用.
我知道这是可能的,因为那些发布者有自己的APP,但我们提供的格式通常是Flash.不是移动友好格式.
有人可以告诉我如何开始或者是否有一些解决方法?
提前致谢!
编辑:
我想做的是,比如说,请看这个流:http: //new.livestream.com/ATP/lexington2014court1 并在我的APP中显示它.
我正在尝试使用iOS应用中的ffmpeg将本地.mp4视频转换为HLS.我已经使用pod集成了ffmpeg包装器并生成了所有分段的.ts文件和m3u8文件,但是.m3u8播放列表文件中没有列出一些.ts文件段,如下所示.它始终列出最后5个视频片段.
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:13
#EXTINF:2,
out13.ts
#EXTINF:1,
out14.ts
#EXTINF:2,
out15.ts
#EXTINF:2,
out16.ts
#EXTINF:1,
out17.ts
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)
我使用以下代码生成HLS.
FFmpegWrapper *wrapper = [[FFmpegWrapper alloc] init];
[wrapper convertInputPath:inputFilePath outputPath:outputFilePath options:nil progressBlock:^(NSUInteger bytesRead, uint64_t totalBytesRead, uint64_t totalBytesExpectedToRead) {
} completionBlock:^(BOOL success, NSError *error) {
success?NSLog(@"Success...."):NSLog(@"Error : %@",error.localizedDescription);
}];
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以做到这一点?
桌面Chrome和FF不支持HLS.我知道有一个插件可以为Flash添加HLS支持.是否有这样的插件或技术可以在没有HLS支持的浏览器上增强HTML5?
我想从iPhone获得实时视频到另一台设备(桌面浏览器或其他iPhone,例如点对点).
注意:这不是一对多,而是目前只有一对一.音频可以是流的一部分或通过iphone上的电话呼叫.
我能想到的方法有四种......
在iPhone上捕获帧,将帧发送到mediaserver,让mediaserver使用主机webserver发布实时视频.
在iPhone上捕获帧,转换为图像,发送到httpserver,在浏览器中使用javascript/AJAX尽快从服务器重新加载图像.
在iPhone上运行httpServer,在iPhone上捕获1秒持续时间的电影,在iPhone上创建M3U8文件,让另一个用户直接连接到iPhone上的httpServer以进行liveStreaming.
在iPhone上捕获1秒持续时间的电影,在iPhone上创建M3U8文件,发送到httpServer,让其他用户连接到http服务器以进行liveStreaming.这是一个很好的答案,有没有人得到它的工作?
有更好,更有效的选择吗?从iPhone上获取数据的最快方法是什么?是ASIHTTPRequest吗?
感谢大家.
android ×5
video ×3
audio ×2
ffmpeg ×2
ios ×2
audio-player ×1
avplayer ×1
codec ×1
html5-video ×1
iphone ×1
m3u8 ×1
media-player ×1
mpeg2-ts ×1
swift ×1