我正在开发一个仅针对平板电脑的Android应用程序.最低要求api级别为3.1.该应用程序将流式传输一些直播电视频道.
我测试了RTSP和HLS,两者运行良好.然而,HLS似乎没有更好的工作,并且调用VideoView的onCompletion,因为流来自尚未完成的直播电视,所以不应该调用它.
我有每个电视频道的RTSP和HLS流网址.我知道Android Android 3.0+支持HLS,但我也可以玩RTSP.
哪一个比另一个好,为什么?
我有一个iOS 4.0-5.1的应用程序,它使用HTTP Live Streaming播放视频.我有一个简单的设置,在视图中有一个按钮,当它被点击时开始播放流.这在iOS 5中运行良好,但在iOS 4开始播放流之前需要点击两次按钮.有人知道为什么会发生这种情况以及如何在第一次按下按钮时播放视频吗?
这是我正在做的事情:
.H
#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
@interface ViewController : UIViewController{
MPMoviePlayerController *moviePlayer;
}
@property (nonatomic, strong) MPMoviePlayerController *moviePlayer;
-(IBAction)playApple:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)
.M
-(IBAction)playApple:(id)sender{
if(self.moviePlayer){
self.moviePlayer = nil;
}
//Use Apple's sample stream
NSURL *mediaURL = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mediaURL];
//Begin observing the moviePlayer's load state.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayerLoadStateChanged:)
name:MPMoviePlayerLoadStateDidChangeNotification
object:self.moviePlayer];
[self.moviePlayer setMovieSourceType:MPMovieSourceTypeStreaming];
[self.moviePlayer setShouldAutoplay:NO];//Stop it from autoplaying
[self.moviePlayer prepareToPlay];//Start preparing the video
}
#pragma mark Notification Center
- (void)moviePlayerLoadStateChanged:(NSNotification *)notification{
NSLog(@"State …Run Code Online (Sandbox Code Playgroud) 我想从服务器流式传输一首歌,这似乎与我完成的方式一样好用,但是这种方法似乎有些东西是不可能的.
我目前已经实例化了一个AVPlayer
player = [[AVPlayer alloc] initWithURL:[NSURL URLWithString:@"http://media.soundcloud.com/stream/songID?stream_token=myToken"]];
Run Code Online (Sandbox Code Playgroud)
当我的应用程序认为缓冲区足够时,就调用它.
这听起来很完美,但我发现如果我停止指向AVPlayer实例,播放器会停止,如果我将应用程序推到后台,声音会消失并暂停直到应用程序返回到前台.
是否可以让歌曲继续在AVPlayer的后台播放?
如果没有,我应该看看HTTP Live Streaming吗?
我对iOS的这一方很新,我非常感谢我的同事给我的任何指导!
HSL流被分成多个ts文件,现在我想通过调用ffmpeg API将这些文件和m3u8文件在源代码中保存到本地磁盘。
ffmpeg 支持这个功能吗?如果是,如何实现该功能?否则,谁能给我一些关于如何实现这一目标的建议?
我正在尝试将视频从我的网络摄像头流式传输到我创建的网站,在我的 Ubuntu 12.04 机器上使用 FFMpeg 和 FFServer。我可以使用我制作的 ffserver1.conf 文件成功启动 FFServer,但是当我停止 FFServer(使用 crtl+c)以更改我的配置文件并尝试再次启动 FFServer 时,出现错误:无法启动服务器。然后我尝试使用默认的 ffserver.conf(在 /etc 中)启动服务器,我收到一个错误:bind(port 8090): Address already in use。有时我也会得到Deleting feed file "/tmp/feed1.ffm' 因为流计数不同 (4 != 1)。
在我看来,当我用 ctrl+c 在终端中杀死它时,服务器并没有完全停止。还有其他方法可以停止 FFServer 吗?或者我应该得到一个不同的版本 - 我目前使用的版本是0.10.11-7:0.10.11-1~precisce1。
谢谢
我想询问有关直播,我有wowza服务器和在网络客户端使用rtmp协议,问题是如何兼容所有设备,如桌面和移动,我使用ffmpeg,但如何动态更改rtmp到MP4?ffmpeg中的什么类型命令?我想使用协议http不rtmp或rtsp,谢谢.
此致,潘吉
我有一个使用HTTP Live Streaming传送视频内容的应用程序.我希望应用程序根据设备屏幕大小(4x3或16x9)检索适当的分辨率.我运行Apple的工具来创建主.m3u8播放列表文件(variantplaylistcreator)并获得以下内容:
#EXTM3U
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=248842,BANDWIDTH=394849,CODECS="mp4a.40.2, avc1.4d4028",RESOLUTION=480x360
4x3/lo/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=384278,BANDWIDTH=926092,CODECS="mp4a.40.2, avc1.4d4028",RESOLUTION=480x360
4x3/mid/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=787643,BANDWIDTH=985991,CODECS="mp4a.40.2, avc1.42801e",RESOLUTION=480x360
4x3/hi/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=249335,BANDWIDTH=392133,CODECS="mp4a.40.2, avc1.4d4028",RESOLUTION=640x360
16x9/lo/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=384399,BANDWIDTH=950686,CODECS="mp4a.40.2, avc1.4d4028",RESOLUTION=640x360
16x9/mid/prog_index.m3u8
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=780648,BANDWIDTH=987197,CODECS="mp4a.40.2, avc1.42801e",RESOLUTION=640x360
16x9/hi/prog_index.m3u8
Run Code Online (Sandbox Code Playgroud)
这确实导致我的直播流正确地在视频质量之间切换,但似乎随机选择它是使用4x3还是16x9分辨率.
有没有办法让它自动选择正确的尺寸,还是我需要有多个播放列表文件并让设备请求特定的?例如,如果在iPad上,我是否需要检测它的屏幕是否具有4x3尺寸并请求仅具有480x360分辨率选项的4x3_playlist.m3u8?
我正在构建一个实时广播流媒体,我想知道我应该如何处理多个连接。现在,根据我的经验,选择将阻止音频流式传输。它只播放 3 秒然后停止播放。我将举例说明我的意思。
import socket, select
headers = """
HTTP/1.0 200 OK\n
Content-Type: audio/mpeg\n
Connection: keep-alive\n
\n\n
"""
file="/path/to/file.mp3"
bufsize=4096 # actually have no idea what this should be but python-shout uses this amount
sock = socket.socket()
cons = list()
buf = 0
nbuf = 0
def runMe():
cons.append(sock)
file = open(file)
nbuf = file.read(bufsize) # current buffer
while True:
buf = nbuf
nbuf = file.read(bufsize)
if len(buf) == 0:
break
rl, wl, xl = select.select(cons, [], [], 0.2)
for …Run Code Online (Sandbox Code Playgroud) 我试图了解HLS分段器如何将MPEG-TS数据包转换为HLS块。HLS块是否封装了几个MPEG-TS数据包,或者它是完全不同的格式并不同于MPEG-TS?例如,我可以检索PCR(节目时钟参考)或其他MPEG-TS特定数据吗?
将 hls 流重新混合到 mp4 文件中时,我使用以下命令。
ffmpeg -i "http://example.com/master.m3u8" -c copy -bsf:a aac_adtstoasc output.mp4
Run Code Online (Sandbox Code Playgroud)
这适用于 VOD 内容,但如果流是直播的,则它从直播位置开始,而不是 m3u8 文件中的第一个片段。applehttp demuxer 是否有任何参数会强制从第一段开始?