标签: video-streaming

调用setDataSource(FileDescriptor)方法时出现异常(失败:状态= 0x80000000)

我正在开发一个视频流应用程序,并且在使用FileDescriptor调用set setDataSource时遇到困难.我希望我的应用程序在下载时播放视频,所以一旦我得到最小字节数,我将这些字节移动到另一个文件,这样它就可以在原始文件中下载时在另一个文件中播放.

所以,我检查一下我是否可以像这样启动每个数据包的媒体:

if (mediaPlayer == null) {
                    // Only create the MediaPlayer once we have the minimum
                    // buffered data
                    if (totalKbRead >= INTIAL_KB_BUFFER) {
                        try {
                            startMediaPlayer();
                        } catch (Exception e) {
                            Log.e(getClass().getName(),
                                    "Error copying buffered conent.", e);
                        }
                    }
                } else if (mediaPlayer.getDuration()
                        - mediaPlayer.getCurrentPosition() <= 1000) {
                    transferBufferToMediaPlayer();
                }
}
Run Code Online (Sandbox Code Playgroud)

这是startMediaPlayer方法代码:

private void startMediaPlayer() {
        try {
            File bufferedFile = new File(context.getCacheDir(), "playingMedia"
                    + (counter++) + ".dat");

            // bufferedFile is the one that'll be played
            moveFile(downloadingMediaFile, …
Run Code Online (Sandbox Code Playgroud)

android file-descriptor video-streaming media-player

31
推荐指数
2
解决办法
5万
查看次数

可以使用Amazon S3/CloudFront和HTML5播放器流式传输视频吗?

我想使用HTML5视频播放器并流式传输视频.S3/CloudFront可以实现吗?我了解亚马逊使用RTMP流媒体协议,而HTML5的video标签不支持RTMP.有没有办法用HTML5播放器流式传输视频?

html5 rtmp amazon-s3 video-streaming html5-video

31
推荐指数
2
解决办法
2万
查看次数

使用AVAssetReader从远程资产中读取(流)

我的主要目标是从服务器流式传输视频,并在流式传输时逐帧剪切(以便OpenGL可以使用它).为此,我使用了我在互联网上随处可见的代码(我记得它来自Apple的GLVideoFrame示例代码):

NSArray * tracks = [asset tracks];
NSLog(@"%d", tracks.count);

for(AVAssetTrack* track in tracks) {

    NSLog(@"type: %@", [track mediaType]);

    initialFPS = track.nominalFrameRate;
    width = (GLuint)track.naturalSize.width;
    height = (GLuint)track.naturalSize.height;


    NSError * error = nil;

    // _movieReader is a member variable
    @try {
        self._movieReader = [[[AVAssetReader alloc] initWithAsset:asset error:&error] autorelease];
    }
    @catch (NSException *exception) {
        NSLog(@"%@ -- %@", [exception name], [exception reason]);
        NSLog(@"skipping track");

        continue;
    }


    if (error)
    {
        NSLog(@"CODE:%d\nDOMAIN:%@\nDESCRIPTION:%@\nFAILURE_REASON:%@", [error code], [error domain], error.localizedDescription, [error localizedFailureReason]);                                          
        continue;
    }

    NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c avfoundation video-streaming ios

30
推荐指数
1
解决办法
2万
查看次数

VideoView onResume丢失了视频的缓冲部分

我正在进行活动

  1. VideoView - 从网络服务器流式传输视频.

  2. 按钮 - 使用户进入下一个要显示的活动.

应用程序启动时,VideoView将从Web服务器播放视频.

现在假设

 Total Video length is 60 Minutes

 Current Video progress is 20 Minutes

 Current Buffered progress 30 Minutes 
Run Code Online (Sandbox Code Playgroud)

现在,当我点击上面提到的Button时,用户将进入下一个活动.

如果按下后退按钮,则从该活动开始,用户前面会显示"上一个活动"(带有VideoView和"按钮").但是当恢复时,视频的所有缓冲部分都会丢失,因此VideoView从一开始就播放视频,这真的很糟糕. < - 实际问题

问题

当Activity重新恢复时,视频的缓冲部分会丢失,因此会再次开始缓冲.那么如何克服重新缓冲视频的缓冲部分呢?

甚至官方Youtube Android应用程序.有同样的问题.

编辑1:

我在Activity中尝试了下面的代码,但它不起作用.

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    videoView.suspend();
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    videoView.resume();
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以指导我这个问题吗?或者我错过了一些能使这项工作完美的东西?

目前的解决方法

我已经用onPause()方法和onResume()方法保存了视频的当前播放位置,我已经使用该位置来寻找该持续时间的视频.这很好用.但是视频缓冲从一开始就从搜索位置开始视频开始.

非常感谢任何帮助.

android video-streaming android-video-player android-videoview

30
推荐指数
3
解决办法
2万
查看次数

在网页中嵌入H.264视频的实时RTSP流

我有一台服务器通过RTSP(rtsp:// ...)在网络上提供实时H.264视频,我一直在努力寻找一种方法在浏览器中向用户显示流(至少在Windows和OS X - Linux是一个奖金).我目前已经嵌入了VLC播放器,并且在IE9和Mozilla Firefox 12.0中都可以使用它,但如果用户只需要为他们的浏览器安装一个插件或类似的东西(而不是整个程序),那将是理想的选择. .

我可以使用开源解决方案,但我不能使用任何GPL.Java applet或类似的东西是可能的.

到目前为止考虑的解决方案似乎不起作用:

  • HTML5视频标记:似乎不支持实时RTSP流
  • GStreamer(Java Bindings)/ OSSBuild GStreamer-WinBuilds v0.10.7 Beta 4 LGPL:插件看起来很脆弱,有RTSP源和WinBuild(我的流提供了与流SETUP请求相关的错误,而其他人没有)
  • JavaFX:在最近的版本中,似乎已经放弃了对实时RTSP流的支持
  • Xuggler:许可似乎构成了一个问题
  • JMF:旧的,没有明显的H.264支持
  • FMJ:似乎不支持实时RTSP流

我应该重新评估这些可能性吗?任何其他建议(例如在Flash或Silverlight中)将不胜感激.

谢谢!

编辑:在HTML5中获得解决方案真的很棒.

rtsp video-streaming h.264 live-streaming embedded-video

30
推荐指数
1
解决办法
10万
查看次数

使用Android MediaCodec从摄像头编码H.264

我试图让它在Android 4.1上运行(使用升级的Asus Transformer平板电脑).感谢Alex对我之前的问题的回答,我已经能够将一些原始的H.264数据写入文件,但是这个文件只能播放ffplay -f h264,而且似乎丢失了有关帧速率的所有信息(极快的播放).此外,色彩空间看起来不正确(atm使用摄像机默认的编码器侧).

public class AvcEncoder {

private MediaCodec mediaCodec;
private BufferedOutputStream outputStream;

public AvcEncoder() { 
    File f = new File(Environment.getExternalStorageDirectory(), "Download/video_encoded.264");
    touch (f);
    try {
        outputStream = new BufferedOutputStream(new FileOutputStream(f));
        Log.i("AvcEncoder", "outputStream initialized");
    } catch (Exception e){ 
        e.printStackTrace();
    }

    mediaCodec = MediaCodec.createEncoderByType("video/avc");
    MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 320, 240);
    mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
    mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
    mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
    mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
    mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
    mediaCodec.start();
}

public void close() {
    try {
        mediaCodec.stop();
        mediaCodec.release();
        outputStream.flush();
        outputStream.close();
    } …
Run Code Online (Sandbox Code Playgroud)

android video-encoding video-streaming h.264 android-camera

30
推荐指数
3
解决办法
5万
查看次数

使用Android将实时视频流传输到服务器

我们必须使用Android Camera捕获实时视频,并将它们发送到服务器,然后其他用户将通过浏览器或其他内容读取它们.

我在谷歌搜索和搜索,有一些关于视频流应用程序的例子,如:

1 Android-eye:https://github.com/Teaonly/android-eye

2 Spydroid-ipcamera:https://code.google.com/p/spydroid-ipcamera/

但是,它们似乎有不同的环境,大多数应用程序将启动HTTP服务器以进行流请求,然后客户端将通过本地网络访问该页面并查看视频.

那么视频流源和服务器都是这样的设备: 在此输入图像描述

但我们需要像这样的互联网支持: 在此输入图像描述

所以我想知道是否还有其他想法.

video android video-streaming

30
推荐指数
1
解决办法
4万
查看次数

什么技术最适合将iPhone视频摄像机数据直播到计算机?

我想将视频从iPhone相机流式传输到Mac上运行的应用程序.想想视频聊天,但只有一种方式,从设备到接收器应用程序(它不是视频聊天).

到目前为止我的基本理解:

  1. 您可以使用AVFoundation获取"实时"视频摄像机数据而无需保存到文件,但它是未压缩的数据,因此我必须自己处理压缩.
  2. 没有内置的AVCaptureOutput支持发送到网络位置,我必须自己解决这个问题.

我对上述情况是对的还是我已经偏离了轨道?

Apple Tech Q&A 1702提供了一些关于将单个帧保存为图像的信息 - 这是最好的解决方法吗?只需保存30fps,然后像ffmpeg那样压缩它们?

有很多关于iPhone直播的讨论,但关于发送实时视频的人的信息要少得多.我希望有一些广泛的笔触让我指向正确的方向.

iphone avfoundation video-streaming ios4 ios

29
推荐指数
2
解决办法
1万
查看次数

AVPlayer seekToTime无法在正确的位置播放

我有一个播放HLS视频流的AVPlayer.我的用户界面提供了一行按钮,一个用于视频中的每个"章节"(按钮标记为"1","2","3").该应用程序从服务器下载一些元数据,该服务器包含以秒表示的章节切入点列表.例如,一个视频的长度为12分钟 - 章节切入点的列表为0,58,71,230,530等,等等.

当用户点击其中一个"章节按钮"时,按钮处理程序代码执行以下操作:

            [self.avPlayer pause];

    [self.avPlayer seekToTime: CMTimeMakeWithSeconds(seekTime, 600) 
              toleranceBefore: kCMTimeZero 
               toleranceAfter: kCMTimeZero 
            completionHandler: ^(BOOL finished) 
            {
                [self.avPlayer play];
            }];
Run Code Online (Sandbox Code Playgroud)

其中"seekTime"是包含切入点的局部变量(如上所述).

问题是视频并不总是从正确的点开始.有时确实如此.但有时它会在请求的seekTime之前的任何时间从十分之一秒到2秒.它永远不会在请求的seekTime之后启动.

以下是视频编码的一些统计信息:

编码器:handbrakeCLI编解码器:h.264帧率:24(实际上,23.976 - 与拍摄方式相同)视频比特率:多比特率(64/150/300/500/800/1200)音频比特率:128k关键帧:23.976(每秒1次)

我当然使用Apple mediafilesegmenter工具和variantplaylistcreator来生成播放列表.

这些文件是从Amazon Cloud/S3存储桶提供的.

我仍然不清楚的一个领域是CMTimeMakeWithSeconds - 我已经根据我读过的不同文章/文档尝试了几种变体.例如,在上面的摘录我使用:

CMTimeMakeWithSeconds(seekTime,600)

我也尝试过:

CMTimeMakeWithSeconds(seekTime,1)

我不知道哪个是正确的,虽然两个似乎产生相同的不一致结果!

我也尝试过:

CMTimeMakeWithSeconds(seekTime,23.967)

有些文章声称这就像分子/分母一样,所以n/1应该是正确的,其中'n'是秒数(如CMTimeMakeWithseconds(n,1)).但是,代码最初是由一个不同的程序员(现在已经不在了)创建的,他使用600数字作为preferredTimeScale(即CMTimeMakeWithseconds(n,600)).

任何人都可以提供任何关于我做错的线索,或者即使我想要实现的那种准确性甚至可能吗?

如果有人想要提供"替代"解决方案,我们已经在考虑将视频分成不同的流,每章一个,但我们不相信这会给我们带来相同的性能,因为更改章节需要更长的时间因为新的AVPlayerItem必须被创建和加载等等,所以如果你认为这是唯一可行的解​​决方案(我们希望这将达到我们想要的结果 - 即每一章都会准确地开始我们想要的地方)随意说出来.

提前致谢!

video-streaming ios avplayer

29
推荐指数
2
解决办法
2万
查看次数

如何在Spring MVC中实现HTTP字节范围请求

我的网站上有视频倒带的问题.

我找出了http标题的问题.

我当前的控制器方法返回视频:

@RequestMapping(method = RequestMethod.GET, value = "/testVideo")
@ResponseBody
public FileSystemResource testVideo(Principal principal) throws IOException {
   return new FileSystemResource(new File("D:\\oceans.mp4"));
}
Run Code Online (Sandbox Code Playgroud)

如何用字节范围支持重写以下代码?

PS

我见过以下示例http://balusc.blogspot.in/2009/02/fileservlet-supporting-resume-and.html

但是这段代码看起来很难,我无法理解.我希望在春天mvc存在方式更简单.

java spring http spring-mvc video-streaming

29
推荐指数
3
解决办法
2万
查看次数